Python For Finance (Basics)

safari

ارسال ها
68
Python:
==============================
PYTHON FOREX DEVELOPER CHEAT SHEET
==============================

ENVIRONMENT & PROJECT SETUP

python --version
Check Python version

python -m venv venv
Create virtual environment

venv\Scripts\activate
Activate virtual environment (Windows)

pip install package_name
Install a package

pip install -r requirements.txt
Install dependencies from file

pip freeze > requirements.txt
Save project dependencies

==============================
ESSENTIAL LIBRARIES FOR FOREX
==============================

pip install pandas
pip install numpy
pip install matplotlib
pip install ta
pip install MetaTrader5
pip install ccxt
pip install yfinance
pip install scipy
pip install scikit-learn
pip install backtrader
pip install vectorbt

==============================
DATA HANDLING (PANDAS)
==============================

import pandas as pd

df = pd.read_csv("data.csv")
Load price data

df.head()
Show first rows

df.tail()
Show last rows

df.info()
Dataset info

df.describe()
Statistical summary

df['close']
Access column

df[['open','close']]
Multiple columns

df.iloc[0]
Access row by index

df.loc[10]
Access row by label

df['returns'] = df['close'].pct_change()
Calculate returns

df.dropna()
Remove missing values

df.fillna(0)
Replace missing values

df.sort_values("time")
Sort data

df.groupby("symbol")
Group by asset

==============================
NUMPY FOR FAST CALCULATIONS
==============================

import numpy as np

np.array([1,2,3])

np.mean(data)
Mean

np.std(data)
Standard deviation

np.diff(data)
Difference between values

np.log(data)
Log transformation

np.cumsum(data)
Cumulative sum

==============================
FOREX DATA FROM METATRADER5
==============================

import MetaTrader5 as mt5

mt5.initialize()

symbol = "EURUSD"

rates = mt5.copy_rates_from_pos(symbol, mt5.TIMEFRAME_M5, 0, 500)

mt5.shutdown()

Convert to dataframe

df = pd.DataFrame(rates)

==============================
TIMEFRAME CONSTANTS
==============================

mt5.TIMEFRAME_M1
mt5.TIMEFRAME_M5
mt5.TIMEFRAME_M15
mt5.TIMEFRAME_M30
mt5.TIMEFRAME_H1
mt5.TIMEFRAME_H4
mt5.TIMEFRAME_D1

==============================
TECHNICAL INDICATORS
==============================

SIMPLE MOVING AVERAGE

df['sma'] = df['close'].rolling(20).mean()

EXPONENTIAL MOVING AVERAGE

df['ema'] = df['close'].ewm(span=20).mean()

RSI

delta = df['close'].diff()
gain = delta.clip(lower=0)
loss = -delta.clip(upper=0)

avg_gain = gain.rolling(14).mean()
avg_loss = loss.rolling(14).mean()

rs = avg_gain / avg_loss
df['rsi'] = 100 - (100/(1+rs))

BOLLINGER BANDS

df['ma'] = df['close'].rolling(20).mean()
df['std'] = df['close'].rolling(20).std()

df['upper'] = df['ma'] + (df['std']*2)
df['lower'] = df['ma'] - (df['std']*2)

==============================
TRADING SIGNALS
==============================

BUY SIGNAL

df['buy'] = df['sma_short'] > df['sma_long']

SELL SIGNAL

df['sell'] = df['sma_short'] < df['sma_long']

CROSSOVER

df['signal'] = np.where(df['ema_fast'] > df['ema_slow'],1,-1)

==============================
BACKTESTING BASICS
==============================

df['strategy_return'] = df['signal'].shift(1) * df['returns']

df['equity'] = (1 + df['strategy_return']).cumprod()

==============================
RISK MANAGEMENT
==============================

pip_value = 10

lot_size = risk / stop_loss_pips / pip_value

risk = account_balance * 0.01

position_size = risk / stop_loss

==============================
PLOTTING CHARTS
==============================

import matplotlib.pyplot as plt

plt.plot(df['close'])
plt.plot(df['sma'])
plt.show()

Candlestick charts

pip install mplfinance

import mplfinance as mpf

mpf.plot(df, type='candle')

==============================
ORDER EXECUTION (MT5)
==============================

order = {
"action": mt5.TRADE_ACTION_DEAL,
"symbol": "EURUSD",
"volume": 0.1,
"type": mt5.ORDER_TYPE_BUY,
"price": mt5.symbol_info_tick("EURUSD").ask,
"deviation": 20,
"magic": 123456,
"comment": "python order",
"type_time": mt5.ORDER_TIME_GTC,
"type_filling": mt5.ORDER_FILLING_IOC,
}

mt5.order_send(order)

==============================
LOGGING TRADES
==============================

import logging

logging.basicConfig(filename="trades.log", level=logging.INFO)

logging.info("Buy executed")

==============================
SCHEDULING STRATEGY
==============================

import time

while True:
    run_strategy()
    time.sleep(60)

==============================
COMMON FOREX DATA STRUCTURE
==============================

time
open
high
low
close
tick_volume
spread

==============================
IMPORTANT PYTHON CONCEPTS
==============================

list comprehension

[x for x in data]

dictionary

config = {"symbol":"EURUSD","lot":0.1}

function

def strategy(data):
    return signal

class trading_bot:
    def run(self):
        pass

==============================
PROJECT STRUCTURE (FOREX BOT)
==============================

project/

config.py
strategy.py
data_loader.py
indicators.py
risk_management.py
execution.py
backtest.py
main.py

==============================
 
بالا