File size: 926 Bytes
2d1745a 5e39409 2d1745a 30d191f 2d1745a 5e39409 2d1745a 5e39409 30d191f 5e39409 2d1745a 5e39409 2d1745a 5e39409 30d191f 5e39409 2d1745a 30d191f 2d1745a 30d191f | 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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | import pandas as pd
import ta
def backtest_strategy(df):
if len(df) < 60:
return 0
df = df.copy()
close = df["Close"].squeeze()
rsi = ta.momentum.RSIIndicator(close).rsi()
ma20 = close.rolling(20).mean()
ma50 = close.rolling(50).mean()
wins = 0
trades = 0
for i in range(50, len(df) - 1):
rsi_val = rsi.iloc[i]
ma20_val = ma20.iloc[i]
ma50_val = ma50.iloc[i]
price_today = close.iloc[i]
price_next = close.iloc[i + 1]
signal = False
# RSI oversold bounce
if rsi_val < 35:
signal = True
# MA bullish crossover
if ma20_val > ma50_val:
signal = True
if signal:
trades += 1
if price_next > price_today:
wins += 1
if trades == 0:
return 0
winrate = (wins / trades) * 100
return round(winrate, 2) |