Spaces:
Running
Running
File size: 1,053 Bytes
56c56ef 8d5c542 56c56ef | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | import pandas as pd
def calculate_rsi(df, period=14):
delta = df['close'].diff()
gain = delta.where(delta > 0, 0)
loss = -delta.where(delta < 0, 0)
avg_gain = gain.rolling(window=period).mean()
avg_loss = loss.rolling(window=period).mean()
rs = avg_gain / avg_loss
rsi = 100 - (100 / (1 + rs))
return rsi
def calculate_macd(df):
ema12 = df['close'].ewm(span=12, adjust=False).mean()
ema26 = df['close'].ewm(span=26, adjust=False).mean()
macd = ema12 - ema26
signal = macd.ewm(span=9, adjust=False).mean()
return macd, signal
def generate_signal(df):
rsi = calculate_rsi(df)
macd, signal = calculate_macd(df)
if len(rsi) < 1 or len(macd) < 1 or len(signal) < 1:
return "Not enough data"
latest_rsi = rsi.iloc[-1]
latest_macd = macd.iloc[-1]
latest_signal = signal.iloc[-1]
if latest_rsi < 30 and latest_macd > latest_signal:
return "BUY"
elif latest_rsi > 70 and latest_macd < latest_signal:
return "SELL"
else:
return "HOLD"
|