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

تحلیل تکنیکال با پایتون

تحلیل تکنیکال یک روش محبوب برای ارزیابی و پیش‌بینی حرکت‌های بازارهای مالی است. این روش بر اساس بررسی نمودارهای قیمت و حجم معاملات استوار است. در پایتون، ابزارهای زیادی برای انجام تحلیل تکنیکال وجود دارد. در ادامه، چند نمونه از کتابخانه‌ها و ابزارهای مفید برای تحلیل تکنیکال با پایتون آورده شده‌اند:

  1. Pandas: Pandas یک کتابخانه مفید برای کار با داده‌های جدولی است. معمولاً نمای representational (نمایشی) داده به صورت جدولی در تحلیل تکنیکال استفاده می‌شود.
  2. Matplotlib و Seaborn: برای رسم نمودارهای مختلف بر روی داده‌های زمانی و قیمتی، می‌توانید از کتابخانه‌های Matplotlib و Seaborn استفاده کنید.
    import matplotlib.pyplot as plt
    import seaborn as sns
  3. NumPy: NumPy به شما امکان محاسبات علمی و آماری بر روی داده‌های عددی را می‌دهد که می‌تواند برای محاسبات مربوط به تحلیل تکنیکال مفید باشد.
    import numpy as np
  4. TA-Lib: TA-Lib یک کتابخانه معروف برای تحلیل تکنیکال است که حاوی انواع از شاخص‌ها و الگوریتم‌های مرتبط با بازارهای مالی می‌باشد.
    import talib
  5. mplfinance: mplfinance یک کتابخانه جهت رسم نمودارهای مالی است. این کتابخانه بر اساس Matplotlib ساخته شده و نمودارهای قیمتی، نمودارهای شمعی و سایر انواع نمودارهای مالی را فراهم می‌کند.
    import mplfinance as mpf
  6. 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) رسم شده است.

ادامه تحلیل تکنیکال با پایتون می‌تواند شامل افزودن شاخص‌های دیگر، انجام تحلیل‌های مختلف و استفاده از تکنیک‌های پیشرفته باشد. در ادامه، چند نمونه از این فعالیت‌ها آورده شده است:

  1. شاخص‌های تکنیکال: افزودن شاخص‌های تکنیکال به داده‌های خود می‌تواند به تحلیل شما افزوده شود. به عنوان مثال، اضافه کردن شاخص‌های مانند 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)

  2. الگوهای نمودار: بررسی الگوهای نموداری مانند الگوهای شمعی (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
  3. تحلیل تغییرات حجم: بررسی تغییرات حجم معاملات نیز می‌تواند مفید باشد. ممکن است حجم معاملات افزایش یابد در زمان‌های مشخص و به عنوان یک نشانه از تغییرات در بازار اطلاعات مهمی فراهم کند.
    # اضافه کردن متغیر حجم به داده
    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')

  4. تحلیل با استفاده از 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}')

  1. Backtesting: بررسی استراتژی‌های معاملاتی در گذشته با استفاده از داده‌های تاریخی به عنوان backtesting شناخته می‌شود. این کار می‌تواند با استفاده از کتابخانه‌هایی مانند Backtrader یا QuantConnect انجام شود.
    # نمونه اجرای یک backtest با Backtrader
    import backtrader as bt

    class 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()

  2. Optimization: بهینه‌سازی پارامترهای استراتژی معاملاتی می‌تواند به افزایش عملکرد آن کمک کند. این بهینه‌سازی می‌تواند با استفاده از الگوریتم‌های مختلف مانند Grid Search یا Genetic Algorithms انجام شود.
  3. Streaming Data: در بسیاری از موارد، نیاز به بررسی داده‌های زمان‌واقعی (streaming data) برای تصمیم‌گیری سریعتر در بازارها وجود دارد. می‌توانید از کتابخانه‌هایی مانند WebSocket یا ccxt برای دریافت داده‌های زمان‌واقعی استفاده کنید.
  4. استفاده از 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')

  5. ارتقاء به یک پروژه بزرگتر: در صورتی که به تحلیل تکنیکال علاقه دارید، می‌توانید یک پروژه بزرگتر برای سیستم معاملات خود ایجاد کنید. این شامل اتصال به یک بورس و اجرای سفارشات به صورت اتوماتیک نیز می‌شود.
    # مثال: اجرای سفارشات با استفاده از 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'
    )

با ما در شبکه های اجتماعی همراه باشید ( یوتیوب ، تلگرام ، اینستاگرام ، توییتر )

مطالب مرتبط

عناوین