Ş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.