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)