15 related strategies (⧉ identical code, ≈ similar name)
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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 | # pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement """ StarterStrategy — strategia baseline semplice, robusta e anti-overfitting. Filosofia (vedi docs/analisi-completa.md, potenziamento-v2.md, mentalita-esperti.md): - Poche regole chiare = pochi gradi di liberta' = meno overfitting. - Solo LONG su spot, NESSUNA leva (sopravvivenza prima del rendimento). - Una sola idea: "compra il ribasso dentro un trend rialzista". - Il rischio e' gestito da stoploss + ROI + trailing + le `protections` in config. NON e' una macchina da soldi: e' una base onesta da validare in backtest e dry-run. Tara i parametri con cautela (l'over-ottimizzazione uccide le strategie). """ from datetime import datetime from pandas import DataFrame import talib.abstract as ta import freqtrade.vendor.qtpylib.indicators as qtpylib from freqtrade.strategy import IStrategy class StarterStrategy(IStrategy): INTERFACE_VERSION = 3 # --- Impostazioni base ------------------------------------------------- timeframe = "1h" can_short = False # solo long, niente leva # Lavora solo alla chiusura di una nuova candela (meno rumore, meno costi). process_only_new_candles = True use_exit_signal = True exit_profit_only = False # Servono 200 candele di "riscaldamento" per la EMA200. startup_candle_count = 200 # --- Protezioni (circuit breaker dai documenti) ------------------------ # Nelle versioni recenti di Freqtrade le protezioni si definiscono qui, # nella strategia (non piu' nel config.json). @property def protections(self): return [ # Pausa breve dopo ogni trade chiuso (evita di rientrare sul rumore). { "method": "CooldownPeriod", "stop_duration_candles": 2 }, # Troppi stoploss in poco tempo -> sospendi il trading. { "method": "StoplossGuard", "lookback_period_candles": 24, "trade_limit": 2, "stop_duration_candles": 12, "only_per_pair": False }, # Drawdown oltre il 15% -> stop temporaneo (Leva 2: controllo del DD). { "method": "MaxDrawdown", "lookback_period_candles": 48, "trade_limit": 5, "stop_duration_candles": 24, "max_allowed_drawdown": 0.15 }, # Coppie costantemente in perdita -> mettile in pausa. { "method": "LowProfitPairs", "lookback_period_candles": 360, "trade_limit": 2, "stop_duration_candles": 60, "required_profit": 0.0 } ] # --- Uscite gestite dal rischio ---------------------------------------- # ROI decrescente nel tempo (chiavi = minuti): prendi profitto e non # restare innamorato del trade. Valori di partenza, da validare in backtest. minimal_roi = { "0": 0.10, "360": 0.06, "720": 0.03, "1440": 0.0 } # Stoploss "hard" per trade: la rete di sicurezza piu' importante. stoploss = -0.10 # Trailing stop: blocca i profitti quando il trade va bene. trailing_stop = True trailing_stop_positive = 0.02 trailing_stop_positive_offset = 0.03 trailing_only_offset_is_reached = True # Ordini limit (maker-leaning) per ridurre i costi (Leva 1 dei documenti). order_types = { "entry": "limit", "exit": "limit", "stoploss": "market", "stoploss_on_exchange": False } # --- Indicatori -------------------------------------------------------- def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame: # Filtro di regime: trend di fondo. dataframe["ema200"] = ta.EMA(dataframe, timeperiod=200) dataframe["ema50"] = ta.EMA(dataframe, timeperiod=50) # Oscillatore per il timing del "ribasso". dataframe["rsi"] = ta.RSI(dataframe, timeperiod=14) # Volatilita' (usata in futuro per sizing/stop dinamici). dataframe["atr"] = ta.ATR(dataframe, timeperiod=14) return dataframe # --- Regola di ENTRATA (una sola idea) --------------------------------- def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame: dataframe.loc[ ( # 1) Regime rialzista: prezzo sopra la media lenta. (dataframe["close"] > dataframe["ema200"]) & # 2) Pullback che rientra: RSI risale sopra 35 dall'ipervenduto. (qtpylib.crossed_above(dataframe["rsi"], 35)) & # 3) Mercato attivo. (dataframe["volume"] > 0) ), "enter_long", ] = 1 return dataframe # --- Regola di USCITA (oltre a ROI/stop/trailing) ---------------------- def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame: dataframe.loc[ ( # Ipercomprato: prendi i profitti. (qtpylib.crossed_above(dataframe["rsi"], 75)) & (dataframe["volume"] > 0) ), "exit_long", ] = 1 return dataframe |
Strategy League — fixed backtest that feeds the ranking
Export report Freqtrade logsRun finished · took 57.3s
ℹ️ This strategy uses a trailing stop — freqtrade only
re-checks these once per 1h candle by default, not against the price movement within it.
For a more accurate read, re-run this backtest locally with --timeframe-detail 1m
(or 5m — freqtrade's own docs use 5m detail for an hourly strategy as a lighter
alternative). Freqle doesn't do this for every check here: multiplying every
League/sweep backtest by a finer detail timeframe is more compute than the sandbox can sustain
across every indexed strategy. why this matters →
- profit isn't statistically significant (p=1.00) — hard to tell apart from luck
- only 0% of resampled runs were profitable
- profitable in only 24% of rolling 3-month windows
- did not beat simply holding the market
- very deep drawdown (-75%)
Resampling the trade sequence 2,000× shows the spread of results this edge could plausibly produce — separating a dependable strategy from one that got lucky once.
Loading charts…
Monthly breakdown
| Month | Regime | Trades | Profit % | Avg % | Win | Loss | Win % | DD % | Avg dur |
|---|---|---|---|---|---|---|---|---|---|
| Jan 2026 | bullish trending low vol | 2 | -1.14 | -5.71 | 0 | 2 | 0.0 | -74.73 | 67h 00m |
| Dec 2025 | bearish trending low vol | 9 | -0.30 | -0.33 | 6 | 3 | 66.7 | -74.34 | 60h 07m |
| Nov 2025 | bearish trending high vol | 11 | -0.86 | -0.79 | 9 | 2 | 81.8 | -73.5 | 28h 11m |
| Oct 2025 | bearish trending low vol | 16 | -0.78 | -0.49 | 13 | 3 | 81.2 | -72.78 | 20h 08m |
| Sep 2025 | bullish choppy low vol | 16 | -2.60 | -1.62 | 10 | 6 | 62.5 | -72.21 | 37h 00m |
| Aug 2025 | bullish choppy low vol | 27 | -0.66 | -0.25 | 19 | 8 | 70.4 | -69.42 | 34h 44m |
| Jul 2025 | bullish choppy low vol | 26 | +0.97 | 0.37 | 17 | 9 | 65.4 | -69.71 | 40h 14m |
| Jun 2025 | bearish choppy low vol | 11 | -1.65 | -1.50 | 6 | 5 | 54.5 | -70.27 | 42h 16m |
| May 2025 | bullish trending low vol | 22 | -3.72 | -1.69 | 14 | 8 | 63.6 | -68.16 | 38h 16m |
| Apr 2025 | bullish choppy low vol | 21 | +1.37 | 0.65 | 16 | 5 | 76.2 | -66.76 | 35h 54m |
| Mar 2025 | bearish trending high vol | 27 | +1.36 | 0.50 | 22 | 5 | 81.5 | -66.3 | 20h 18m |
| Feb 2025 | bearish trending low vol | 14 | -0.73 | -0.52 | 8 | 6 | 57.1 | -67.5 | 29h 00m |
| Jan 2025 | bearish choppy low vol | 24 | +1.11 | 0.46 | 19 | 5 | 79.2 | -69.67 | 17h 38m |
| Dec 2024 | bullish trending low vol | 25 | -1.46 | -0.59 | 20 | 5 | 80.0 | -67.86 | 17h 26m |
| Nov 2024 | bullish trending low vol | 31 | +2.16 | 0.70 | 26 | 5 | 83.9 | -70.13 | 26h 06m |
| Oct 2024 | bullish choppy low vol | 25 | -0.19 | -0.08 | 17 | 8 | 68.0 | -69.49 | 38h 38m |
| Sep 2024 | bearish choppy low vol | 23 | +2.24 | 0.97 | 14 | 9 | 60.9 | -71.1 | 39h 42m |
| Aug 2024 | bearish choppy high vol | 21 | -3.97 | -1.89 | 14 | 7 | 66.7 | -70.15 | 35h 54m |
| Jul 2024 | bearish trending low vol | 19 | -4.04 | -2.12 | 11 | 8 | 57.9 | -66.44 | 35h 28m |
| Jun 2024 | bearish choppy low vol | 13 | -3.32 | -2.55 | 6 | 7 | 46.2 | -63.49 | 102h 37m |
| May 2024 | bullish choppy high vol | 26 | +0.98 | 0.38 | 18 | 8 | 69.2 | -61.73 | 26h 58m |
| Apr 2024 | bearish choppy high vol | 21 | -9.76 | -4.65 | 5 | 16 | 23.8 | -60.48 | 49h 11m |
| Mar 2024 | bullish trending high vol | 58 | +2.24 | 0.39 | 47 | 11 | 81.0 | -53.17 | 18h 00m |
| Feb 2024 | bullish trending low vol | 38 | +4.45 | 1.17 | 30 | 8 | 78.9 | -57.61 | 35h 52m |
| Jan 2024 | bearish choppy high vol | 23 | -4.74 | -2.06 | 13 | 10 | 56.5 | -57.83 | 44h 44m |
| Dec 2023 | bullish trending low vol | 46 | +4.73 | 1.03 | 37 | 9 | 80.4 | -57.32 | 29h 01m |
| Nov 2023 | bullish trending low vol | 41 | -2.60 | -0.63 | 26 | 15 | 63.4 | -58.05 | 29h 35m |
| Oct 2023 | bullish trending low vol | 21 | -1.37 | -0.65 | 14 | 7 | 66.7 | -56.14 | 39h 17m |
| Sep 2023 | bearish choppy low vol | 22 | +0.05 | 0.02 | 13 | 9 | 59.1 | -55.55 | 77h 22m |
| Aug 2023 | bearish choppy low vol | 14 | -4.75 | -3.39 | 4 | 10 | 28.6 | -54.14 | 109h 04m |
| Jul 2023 | bullish trending low vol | 42 | +0.36 | 0.09 | 31 | 11 | 73.8 | -51.15 | 29h 46m |
| Jun 2023 | bullish trending low vol | 30 | -3.64 | -1.21 | 16 | 14 | 53.3 | -52.04 | 32h 04m |
| May 2023 | bearish choppy low vol | 20 | -1.96 | -0.98 | 13 | 7 | 65.0 | -47.42 | 52h 21m |
| Apr 2023 | bullish trending low vol | 38 | -2.62 | -0.69 | 21 | 17 | 55.3 | -44.6 | 35h 35m |
| Mar 2023 | bullish trending high vol | 32 | +3.58 | 1.12 | 26 | 6 | 81.2 | -47.39 | 25h 00m |
| Feb 2023 | bullish trending low vol | 34 | -2.90 | -0.85 | 21 | 13 | 61.8 | -45.5 | 37h 18m |
| Jan 2023 | bullish trending low vol | 63 | +5.03 | 0.80 | 48 | 15 | 76.2 | -48.43 | 27h 19m |
| Dec 2022 | bearish trending low vol | 27 | -3.68 | -1.36 | 16 | 11 | 59.3 | -47.65 | 48h 42m |
| Nov 2022 | bearish trending high vol | 26 | -1.69 | -0.65 | 16 | 10 | 61.5 | -45.43 | 24h 30m |
| Oct 2022 | bullish choppy low vol | 28 | -4.08 | -1.46 | 16 | 12 | 57.1 | -42.69 | 43h 00m |
| Sep 2022 | bearish choppy high vol | 18 | -0.16 | -0.09 | 15 | 3 | 83.3 | -40.21 | 16h 10m |
| Aug 2022 | bullish choppy high vol | 36 | -0.92 | -0.26 | 25 | 11 | 69.4 | -38.51 | 26h 42m |
| Jul 2022 | bearish trending high vol | 32 | -7.41 | -2.31 | 18 | 14 | 56.2 | -37.94 | 28h 54m |
| Jun 2022 | bearish trending high vol | 21 | -5.68 | -2.70 | 13 | 8 | 61.9 | -30.74 | 21h 34m |
| May 2022 | bearish trending high vol | 9 | +2.12 | 2.36 | 9 | 0 | 100.0 | -26.93 | 8h 07m |
| Apr 2022 | bearish choppy high vol | 29 | -0.51 | -0.18 | 21 | 8 | 72.4 | -28.18 | 24h 48m |
| Mar 2022 | bullish choppy high vol | 38 | -1.05 | -0.28 | 29 | 9 | 76.3 | -32.61 | 22h 25m |
| Feb 2022 | bearish trending high vol | 30 | -5.18 | -1.73 | 18 | 12 | 60.0 | -26.07 | 26h 42m |
| Jan 2022 | bearish trending high vol | 17 | -3.21 | -1.89 | 12 | 5 | 70.6 | -21.12 | 42h 14m |
| Dec 2021 | bearish trending high vol | 31 | -6.80 | -2.19 | 20 | 11 | 64.5 | -18.13 | 21h 45m |
| Nov 2021 | bullish trending high vol | 27 | +1.87 | 0.69 | 23 | 4 | 85.2 | -13.25 | 15h 56m |
| Oct 2021 | bullish trending high vol | 63 | +4.90 | 0.78 | 50 | 13 | 79.4 | -17.94 | 21h 07m |
| Sep 2021 | bearish trending high vol | 32 | -5.82 | -1.82 | 19 | 13 | 59.4 | -19.79 | 12h 08m |
| Aug 2021 | bullish trending high vol | 75 | +9.29 | 1.24 | 59 | 16 | 78.7 | -21.21 | 17h 43m |
| Jul 2021 | bearish trending high vol | 32 | -2.41 | -0.75 | 22 | 10 | 68.8 | -25.14 | 23h 51m |
| Jun 2021 | bearish trending high vol | 17 | +0.46 | 0.27 | 14 | 3 | 82.4 | -19.56 | 10h 00m |
| May 2021 | bearish trending high vol | 38 | -6.18 | -1.63 | 26 | 12 | 68.4 | -19.52 | 10h 46m |
| Apr 2021 | bearish choppy high vol | 51 | -2.66 | -0.52 | 38 | 13 | 74.5 | -14.69 | 12h 36m |
| Mar 2021 | bullish choppy high vol | 33 | -3.66 | -1.11 | 18 | 15 | 54.5 | -11.55 | 24h 49m |
| Feb 2021 | bullish trending high vol | 46 | -1.82 | -0.39 | 33 | 13 | 71.7 | -9.08 | 12h 27m |
| Jan 2021 | bullish trending high vol | 57 | +0.48 | 0.08 | 47 | 10 | 82.5 | -6.43 | 10h 01m |
Yearly breakdown
| Year | Trades | Profit % | Avg % | Win | Loss | Win % | DD % | Avg dur |
|---|---|---|---|---|---|---|---|---|
| 2026 | 2 | -1.14 | -5.71 | 0 | 2 | 0.0 | -74.73 | 67h 00m |
| 2025 | 224 | -6.49 | -0.29 | 159 | 65 | 71.0 | -74.34 | 32h 05m |
| 2024 | 323 | -15.41 | -0.48 | 221 | 102 | 68.4 | -71.1 | 34h 14m |
| 2023 | 403 | -6.09 | -0.15 | 270 | 133 | 67.0 | -58.05 | 37h 14m |
| 2022 | 311 | -31.45 | -1.01 | 208 | 103 | 66.9 | -47.65 | 28h 46m |
| 2021 | 502 | -12.35 | -0.25 | 369 | 133 | 73.5 | -25.14 | 16h 08m |
Trade charts — best 2 and worst 2 performing pairs (full OHLC candles are expensive to render for every pair)
Backtests — over a market period
Backtest this strategy over a chosen crypto-cycle period. These don't affect the League ranking, and need that period's candle data downloaded.
Log in or sign up to run backtests.
| Period | Range | Total % | Win % | Max DD | Trades | |
|---|---|---|---|---|---|---|
| 2020 · DeFi Summer & Pre-Halving Rally | 20200101-20210101 | not run | ||||
| 2021 · Institutional Bull Market | 20210101-20220101 | not run | ||||
| 2022 · Post-Bull Crash & Macro Tightening | 20220101-20230101 | not run | ||||
| 2023–2024 · Recovery & ETF Anticipation | 20230101-20250101 | not run | ||||
| 2025–2026 · Current Cycle | 20250101-20260101 | not run | ||||
Walk forward
Out-of-sample backtest on recent data · 33 pairs · 20260101-20260701.
Backtest trust check
no lookahead patterns · 1 thing(s) worth reviewing before trusting the numbers
| Line | Pattern | Detail | |
|---|---|---|---|
| 37 | review | startup_candles_too_small | startup_candle_count is 200, but EMA(timeperiod=200) needing 3x warmup needs at least 600 candles -- so the first 400+ candles of every backtest use an indicator that hasn't warmed up. Recursive indicators (EMA/RSI/ADX/ATR) want several times their period, not exactly it |
ran by Ron · took s
Lookahead analysis
Freqtrade logsno lookahead bias detected
20 signal(s) analysed · 0 biased entries · 0 biased exits
ran by Ron · took 12.9s