Python ile Ultimate RSI (Relative Strength Index) göstergesi oluşturmak

Python ile Ultimate RSI (Relative Strength Index) göstergesi oluşturmak

Şu an çok mutluyum. Kendi kendimize bir challenge başlattık resmen. İletişim kutuma gönderilen mesajlar ile ilgili betik yazmak hiç aklıma gelmemişti 🙂 Bu günkü yazı konumuz:

Sanırım pandas ile ilgili ayrı bir yazı yazmam gerekecek. Elbette yfinance ile birlikte pandas kütüphanesini kullanarak Ultimate RSI yani (Relative Strength Index) göstergesi oluşturabiliriz ve hatta bunu grafiğe yansıtabiliriz.

Öncelikli olarak butiğimizde kullanacağımız kütüphanelerimizi ekliyoruz:

import yfinance as yf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

Daha sonra 1 günlük değer ile birlikte belirlediğimiz tarihler arasında verilerimizi indiriyoruz.

btc = yf.download('BTC-USD', start='2022-01-01', end='2023-12-31', interval='1d')

Ultimate RSI hesaplama fonksiyonumuzu yazıyoruz:

def ultimate_rsi(df, time_period1=7, time_period2=14, time_period3=28):
    close = df['Close']
    avg_gain1 = close.diff().clip(lower=0).rolling(window=time_period1).mean()
    avg_loss1 = -close.diff().clip(upper=0).rolling(window=time_period1).mean()

    avg_gain2 = close.diff().clip(lower=0).rolling(window=time_period2).mean()
    avg_loss2 = -close.diff().clip(upper=0).rolling(window=time_period2).mean()

    avg_gain3 = close.diff().clip(lower=0).rolling(window=time_period3).mean()
    avg_loss3 = -close.diff().clip(upper=0).rolling(window=time_period3).mean()

    rs1 = avg_gain1 / avg_loss1
    rs2 = avg_gain2 / avg_loss2
    rs3 = avg_gain3 / avg_loss3

    rsi1 = 100 - (100 / (1 + rs1))
    rsi2 = 100 - (100 / (1 + rs2))
    rsi3 = 100 - (100 / (1 + rs3))

    ultimate_rsi = (rsi1 + rsi2 + rsi3) / 3
    return ultimate_rsi

Ultimate RSI’yi hesaplama ve grafik oluşturmak:

btc['Ultimate RSI'] = ultimate_rsi(btc)

fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(14, 10))

Mum grafiği:

ax1.plot(btc['Close'], label='BTC-USD Close', color='black')
ax1.set_title('Bitcoin Daily Close Price')
ax1.set_ylabel('Price (USD)')
ax1.legend()

Ultimate RSI grafiği:

ax2.plot(btc['Ultimate RSI'], label='Ultimate RSI', color='blue')
ax2.axhline(y=70, color='r', linestyle='--', label='Overbought')
ax2.axhline(y=30, color='g', linestyle='--', label='Oversold')
ax2.set_title('Ultimate RSI')
ax2.set_ylabel('RSI Value')
ax2.legend()

plt.tight_layout()
plt.show()

Sonuç çıktımız aşağıdadır. Bir sonraki betik talebimizde buluşmak üzere.

Posted by Tolgien