تحلیل تکنیکال بازارهای مالی با کمک پایتون

تحلیل تکنیکال یک روش محبوب برای ارزیابی و پیشبینی حرکتهای بازارهای مالی است. این روش بر اساس بررسی نمودارهای قیمت و حجم معاملات استوار است. در پایتون، ابزارهای زیادی برای انجام تحلیل تکنیکال وجود دارد. در ادامه، چند نمونه از کتابخانهها و ابزارهای مفید برای تحلیل تکنیکال با پایتون آورده شدهاند:
- Pandas: Pandas یک کتابخانه مفید برای کار با دادههای جدولی است. معمولاً نمای representational (نمایشی) داده به صورت جدولی در تحلیل تکنیکال استفاده میشود.
- Matplotlib و Seaborn: برای رسم نمودارهای مختلف بر روی دادههای زمانی و قیمتی، میتوانید از کتابخانههای Matplotlib و Seaborn استفاده کنید.
import matplotlib.pyplot as plt
import seaborn as sns
- NumPy: NumPy به شما امکان محاسبات علمی و آماری بر روی دادههای عددی را میدهد که میتواند برای محاسبات مربوط به تحلیل تکنیکال مفید باشد.
import numpy as np
- TA-Lib: TA-Lib یک کتابخانه معروف برای تحلیل تکنیکال است که حاوی انواع از شاخصها و الگوریتمهای مرتبط با بازارهای مالی میباشد.
import talib
- mplfinance: mplfinance یک کتابخانه جهت رسم نمودارهای مالی است. این کتابخانه بر اساس Matplotlib ساخته شده و نمودارهای قیمتی، نمودارهای شمعی و سایر انواع نمودارهای مالی را فراهم میکند.
import mplfinance as mpf
- yfinance: برای دریافت دادههای تاریخی از Yahoo Finance، میتوانید از yfinance استفاده کنید.
import yfinance as yf
نمونهای از استفاده از این کتابخانهها و ابزارها به منظور تحلیل تکنیکال را میتوانید به شکل زیر ببینید:
import yfinance as yf
import matplotlib.pyplot as plt
import mplfinance as mpf# دریافت دادههای تاریخی از Yahoo Finance
symbol = "AAPL"
start_date = "2022-01-01"
end_date = "2023-01-01"
data = yf.download(symbol, start=start_date, end=end_date)
# رسم نمودار قیمتی با mplfinance
mpf.plot(data, type='candle', volume=True)
# اعمال یک شاخص تکنیکال (مثلاً متوسط متحرک ساده)
data['SMA'] = talib.SMA(data['Close'], timeperiod=20)
# رسم نمودار با استفاده از Matplotlib
plt.plot(data['Close'], label='Close Price')
plt.plot(data['SMA'], label='20-Day SMA')
plt.legend()
plt.show()
در اینجا، از دادههای تاریخی شاخص AAPL به عنوان مثال استفاده شده است و یک نمودار قیمتی به همراه میانگین متحرک ساده (SMA) رسم شده است.
ادامه تحلیل تکنیکال با پایتون میتواند شامل افزودن شاخصهای دیگر، انجام تحلیلهای مختلف و استفاده از تکنیکهای پیشرفته باشد. در ادامه، چند نمونه از این فعالیتها آورده شده است:
- شاخصهای تکنیکال: افزودن شاخصهای تکنیکال به دادههای خود میتواند به تحلیل شما افزوده شود. به عنوان مثال، اضافه کردن شاخصهای مانند RSI ،MACD و Bollinger Bands میتواند به تحلیلهای شما افزوده شود.
# محاسبه RSI
data['RSI'] = talib.RSI(data['Close'], timeperiod=14)# محاسبه MACD
data['macd'], data['signal'], _ = talib.MACD(data['Close'], fastperiod=12, slowperiod=26, signalperiod=9)# محاسبه Bollinger Bands
data['upper_band'], data['middle_band'], data['lower_band'] = talib.BBANDS(data['Close'], timeperiod=20)
- الگوهای نمودار: بررسی الگوهای نموداری مانند الگوهای شمعی (Candlestick Patterns) و الگوهای نمودار فنی میتواند به شناخت موقعیتهای بازار کمک کند.
# بررسی الگوهای شمعی
candlestick_patterns = talib.get_function_groups()['Pattern Recognition']
for pattern in candlestick_patterns:
result = getattr(talib, pattern)(data['Open'], data['High'], data['Low'], data['Close'])
data[pattern] = result
- تحلیل تغییرات حجم: بررسی تغییرات حجم معاملات نیز میتواند مفید باشد. ممکن است حجم معاملات افزایش یابد در زمانهای مشخص و به عنوان یک نشانه از تغییرات در بازار اطلاعات مهمی فراهم کند.
# اضافه کردن متغیر حجم به داده
data['Volume'] = talib.MA(data['Volume'], timeperiod=5)# رسم نمودار قیمتی و حجم
fig, ax1 = plt.subplots()
ax1.plot(data['Close'], label='Close Price', color='blue')
ax1.set_ylabel('Close Price', color='blue')
ax2 = ax1.twinx()
ax2.fill_between(data.index, 0, data['Volume'], alpha=0.2, color='green')
ax2.set_ylabel('Volume', color='green')
- تحلیل با استفاده از Machine Learning: استفاده از الگوریتمهای یادگیری ماشین برای پیشبینی حرکت بازار نیز ممکن است جالب باشد. برای این کار، میتوانید از کتابخانههایی مانند Scikit-learn یا TensorFlow و Keras استفاده کنید.
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score# ایجاد متغیرهای برچسب
data['Price_Up'] = np.where(data['Close'].shift(-1) > data['Close'], 1, 0)# حذف ردیفهای حاوی NaN
data = data.dropna()# انتخاب ویژگیها و برچسبها
features = data[['RSI', 'macd', 'upper_band', 'lower_band', 'Volume']]
labels = data['Price_Up']# تقسیم داده به دو بخش آموزش و تست
X_train, X_test, y_train, y_test = train_test_split(features, labels, test_size=0.2, random_state=42)# اعمال مدل یادگیری ماشین
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)# پیشبینی
predictions = model.predict(X_test)# محاسبه دقت مدل
accuracy = accuracy_score(y_test, predictions)
print(f'Model Accuracy: {accuracy}')
- Backtesting: بررسی استراتژیهای معاملاتی در گذشته با استفاده از دادههای تاریخی به عنوان backtesting شناخته میشود. این کار میتواند با استفاده از کتابخانههایی مانند
Backtrader
یاQuantConnect
انجام شود.# نمونه اجرای یک backtest با Backtrader
import backtrader as btclass MyStrategy(bt.Strategy):
def __init__(self):
# افزودن اندیکاتورها و شاخصهای تکنیکال
self.sma = bt.indicators.SimpleMovingAverage(self.data.close, period=20)def next(self):
# اعمال استراتژی معاملاتی بر اساس شاخصها
if self.data.close > self.sma:
self.buy()
elif self.data.close < self.sma:
self.sell()# ایجاد یک cerebro (موتور backtest)
cerebro = bt.Cerebro()# افزودن دادههای تاریخی به cerebro
data = bt.feeds.YahooFinanceData(dataname='AAPL', fromdate=start_date, todate=end_date)
cerebro.adddata(data)# افزودن استراتژی به cerebro
cerebro.addstrategy(MyStrategy)# اجرای backtest
cerebro.run()
- Optimization: بهینهسازی پارامترهای استراتژی معاملاتی میتواند به افزایش عملکرد آن کمک کند. این بهینهسازی میتواند با استفاده از الگوریتمهای مختلف مانند Grid Search یا Genetic Algorithms انجام شود.
- Streaming Data: در بسیاری از موارد، نیاز به بررسی دادههای زمانواقعی (streaming data) برای تصمیمگیری سریعتر در بازارها وجود دارد. میتوانید از کتابخانههایی مانند
WebSocket
یاccxt
برای دریافت دادههای زمانواقعی استفاده کنید. - استفاده از APIهای تحلیل تکنیکال: برخی سرویسها APIهایی ارائه میدهند که به شما امکان دسترسی به دادههای تحلیل تکنیکال و شاخصهای مختلف را میدهند. به عنوان مثال، Alpha Vantage یا Binance API.
# مثال: استفاده از Alpha Vantage API
from alpha_vantage.timeseries import TimeSeries# کلید API خود را قرار دهید
api_key = 'YOUR_API_KEY'# ایجاد یک شیء از کلاس TimeSeries
ts = TimeSeries(key=api_key, output_format='pandas')# دریافت دادههای تاریخی
symbol = 'AAPL'
data, meta_data = ts.get_daily(symbol=symbol, outputsize='full')
- ارتقاء به یک پروژه بزرگتر: در صورتی که به تحلیل تکنیکال علاقه دارید، میتوانید یک پروژه بزرگتر برای سیستم معاملات خود ایجاد کنید. این شامل اتصال به یک بورس و اجرای سفارشات به صورت اتوماتیک نیز میشود.
# مثال: اجرای سفارشات با استفاده از Alpaca API
import alpaca_trade_api as tradeapi# تنظیمات API
api_key = 'YOUR_API_KEY'
api_secret = 'YOUR_API_SECRET'
base_url = 'https://paper-api.alpaca.markets' # در حالت تست# ایجاد یک شیء از کلاس API
api = tradeapi.REST(api_key, api_secret, base_url, api_version='v2')# ایجاد یک سفارش خرید
api.submit_order(
symbol='AAPL',
qty=1,
side='buy',
type='market',
time_in_force='gtc'
)
با ما در شبکه های اجتماعی همراه باشید ( یوتیوب ، تلگرام ، اینستاگرام ، توییتر )