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 | # pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement # flake8: noqa: F401 # isort: skip_file # --- Do not remove these imports --- from datetime import datetime from pandas import DataFrame from freqtrade.strategy import IStrategy, informative, IntParameter import talib.abstract as ta from technical import qtpylib class ZaratustraV11(IStrategy): INTERFACE_VERSION = 3 timeframe = '5m' can_short = True use_exit_signal = False exit_profit_only = True exit_profit_offset = 0.5 # ROI table: # value loaded from strategy minimal_roi = { "0": 1.0 } # Stoploss: stoploss = -0.3 # Trailing stop: trailing_stop = True trailing_stop_positive = 0.01 trailing_stop_positive_offset = 0.1 trailing_only_offset_is_reached = True # Max Open Trades: max_open_trades = 10 def leverage(self, pair: str, current_time: "datetime", current_rate: float, proposed_leverage: float, max_leverage: float, side: str, **kwargs,) -> float: return 10 @informative('5m') @informative('15m') @informative('30m') def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame: dataframe['adx'] = ta.ADX(dataframe) dataframe['pdi'] = ta.PLUS_DI(dataframe) dataframe['mdi'] = ta.MINUS_DI(dataframe) dataframe[['bbl', 'bbm', 'bbu']] = qtpylib.bollinger_bands(qtpylib.typical_price(dataframe), window=20, stds=2)[['lower', 'mid', 'upper']] return dataframe def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame: dataframe.loc[ ( (dataframe['close_30m'] > dataframe['bbm_30m']) & (dataframe['close_15m'] > dataframe['bbm_15m']) & (dataframe['close_5m'] > dataframe['bbm_5m']) & (dataframe['adx_30m'] > dataframe['mdi_30m']) & (dataframe['adx_15m'] > dataframe['mdi_15m']) & (dataframe['adx_5m'] > dataframe['mdi_5m']) & (dataframe['pdi_30m'] > dataframe['mdi_30m']) & (dataframe['pdi_15m'] > dataframe['mdi_15m']) & (dataframe['pdi_5m'] > dataframe['mdi_5m']) ), ['enter_long', 'enter_tag'] ] = (1, 'Bullish trend') dataframe.loc[ ( (dataframe['close_30m'] < dataframe['bbm_30m']) & (dataframe['close_15m'] < dataframe['bbm_15m']) & (dataframe['close_5m'] < dataframe['bbm_5m']) & (dataframe['adx_30m'] > dataframe['pdi_30m']) & (dataframe['adx_15m'] > dataframe['pdi_15m']) & (dataframe['adx_5m'] > dataframe['pdi_5m']) & (dataframe['mdi_30m'] > dataframe['pdi_30m']) & (dataframe['mdi_15m'] > dataframe['pdi_15m']) & (dataframe['mdi_5m'] > dataframe['pdi_5m']) ), ['enter_short', 'enter_tag'] ] = (1, 'Bearish trend') return dataframe def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame: return dataframe |
Strategy League — fixed backtest that feeds the ranking
Export report Freqtrade logsRun finished · took 1033.1s
ℹ️ This strategy uses a trailing stop — freqtrade only
re-checks these once per 5m candle by default, not against the price movement within it.
For a more accurate read, re-run this backtest locally with --timeframe-detail 1m. 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 →
- statistically significant edge (p=0.00)
- 100% of resampled runs stayed profitable
- profitable across 100% of rolling 3-month windows
- comfortably beat buy-and-hold
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 | 10 | -4.42 | -4.43 | 2 | 8 | 20.0 | -0.05 | 20h 16m |
| Dec 2025 | bearish trending low vol | 1215 | +376.47 | 3.10 | 963 | 252 | 79.3 | -0.12 | 6h 03m |
| Nov 2025 | bearish trending high vol | 1964 | +559.96 | 2.86 | 1510 | 454 | 76.9 | -0.24 | 3h 34m |
| Oct 2025 | bearish trending low vol | 2141 | +845.94 | 3.97 | 1573 | 568 | 73.5 | -0.85 | 3h 23m |
| Sep 2025 | bullish choppy low vol | 749 | +201.74 | 2.71 | 581 | 168 | 77.6 | -0.22 | 9h 49m |
| Aug 2025 | bearish choppy low vol | 1358 | +413.06 | 3.06 | 1076 | 282 | 79.2 | -0.11 | 5h 17m |
| Jul 2025 | bullish choppy low vol | 1633 | +403.70 | 2.48 | 1271 | 362 | 77.8 | -0.19 | 4h 40m |
| Jun 2025 | bearish choppy low vol | 1107 | +458.56 | 4.16 | 895 | 212 | 80.8 | -0.16 | 6h 20m |
| May 2025 | bullish trending low vol | 1634 | +555.22 | 3.40 | 1299 | 335 | 79.5 | -0.15 | 4h 37m |
| Apr 2025 | bullish choppy low vol | 1780 | +442.20 | 2.49 | 1365 | 415 | 76.7 | -0.19 | 3h 52m |
| Mar 2025 | bearish trending high vol | 2222 | +626.50 | 2.82 | 1715 | 507 | 77.2 | -0.47 | 3h 16m |
| Feb 2025 | bearish trending low vol | 2701 | +1300.44 | 4.83 | 2121 | 580 | 78.5 | -0.5 | 2h 24m |
| Jan 2025 | bearish choppy low vol | 2246 | +560.04 | 2.50 | 1715 | 531 | 76.4 | -0.26 | 3h 17m |
| Dec 2024 | bullish trending low vol | 3483 | +899.46 | 2.59 | 2568 | 915 | 73.7 | -0.39 | 2h 04m |
| Nov 2024 | bullish trending low vol | 3258 | +610.68 | 1.88 | 2413 | 845 | 74.1 | -0.29 | 2h 09m |
| Oct 2024 | bullish choppy low vol | 978 | +135.88 | 1.40 | 730 | 248 | 74.6 | -0.22 | 7h 35m |
| Sep 2024 | bearish choppy low vol | 860 | +174.84 | 2.03 | 663 | 197 | 77.1 | -0.23 | 8h 38m |
| Aug 2024 | bearish choppy high vol | 2053 | +683.00 | 3.34 | 1565 | 488 | 76.2 | -0.28 | 3h 27m |
| Jul 2024 | bearish trending low vol | 1571 | +690.56 | 4.40 | 1258 | 313 | 80.1 | -0.24 | 4h 53m |
| Jun 2024 | bearish choppy low vol | 955 | +523.67 | 5.50 | 710 | 245 | 74.3 | -0.28 | 7h 23m |
| May 2024 | bullish choppy high vol | 1047 | +221.75 | 2.13 | 802 | 245 | 76.6 | -0.25 | 6h 56m |
| Apr 2024 | bearish choppy high vol | 2188 | +1119.35 | 5.13 | 1653 | 535 | 75.5 | -0.55 | 3h 20m |
| Mar 2024 | bullish trending high vol | 2817 | +761.51 | 2.71 | 2084 | 733 | 74.0 | -0.25 | 2h 26m |
| Feb 2024 | bullish trending low vol | 1069 | +234.35 | 2.20 | 811 | 258 | 75.9 | -0.17 | 6h 40m |
| Jan 2024 | bearish choppy high vol | 1693 | +688.88 | 4.08 | 1290 | 403 | 76.2 | -0.58 | 4h 19m |
| Dec 2023 | bullish trending low vol | 1662 | +453.87 | 2.74 | 1263 | 399 | 76.0 | -0.15 | 4h 35m |
| Nov 2023 | bullish trending low vol | 1658 | +454.01 | 2.74 | 1258 | 400 | 75.9 | -0.18 | 4h 16m |
| Oct 2023 | bullish trending low vol | 928 | +293.82 | 3.17 | 704 | 224 | 75.9 | -0.21 | 8h 04m |
| Sep 2023 | bearish choppy low vol | 413 | +169.81 | 4.12 | 332 | 81 | 80.4 | -0.07 | 17h 21m |
| Aug 2023 | bearish choppy low vol | 802 | +543.26 | 6.78 | 613 | 189 | 76.4 | -0.52 | 9h 32m |
| Jul 2023 | bullish trending low vol | 905 | +403.84 | 4.47 | 694 | 211 | 76.7 | -0.32 | 7h 46m |
| Jun 2023 | bullish trending low vol | 1297 | +605.02 | 4.67 | 973 | 324 | 75.0 | -0.29 | 5h 36m |
| May 2023 | bearish choppy low vol | 603 | +139.43 | 2.31 | 448 | 155 | 74.3 | -0.31 | 12h 29m |
| Apr 2023 | bullish trending low vol | 962 | +261.42 | 2.72 | 712 | 250 | 74.0 | -0.32 | 7h 19m |
| Mar 2023 | bullish trending high vol | 1702 | +614.04 | 3.62 | 1333 | 369 | 78.3 | -0.2 | 4h 25m |
| Feb 2023 | bullish trending low vol | 1216 | +531.86 | 4.38 | 967 | 249 | 79.5 | -0.14 | 5h 29m |
| Jan 2023 | bullish trending low vol | 1572 | +466.42 | 2.97 | 1155 | 417 | 73.5 | -0.38 | 4h 50m |
| Dec 2022 | bearish trending low vol | 713 | +325.94 | 4.58 | 547 | 166 | 76.7 | -0.13 | 9h 58m |
| Nov 2022 | bearish trending high vol | 2931 | +1169.24 | 3.99 | 2189 | 742 | 74.7 | -0.5 | 2h 25m |
| Oct 2022 | bullish choppy low vol | 963 | +457.42 | 4.75 | 790 | 173 | 82.0 | -0.2 | 7h 43m |
| Sep 2022 | bearish choppy high vol | 1546 | +412.23 | 2.67 | 1184 | 362 | 76.6 | -0.44 | 4h 36m |
| Aug 2022 | bullish choppy high vol | 1687 | +463.23 | 2.75 | 1293 | 394 | 76.6 | -0.66 | 4h 22m |
| Jul 2022 | bullish trending high vol | 2480 | +752.31 | 3.04 | 1912 | 568 | 77.1 | -0.5 | 2h 56m |
| Jun 2022 | bearish trending high vol | 4183 | +1445.99 | 3.46 | 3193 | 990 | 76.3 | -0.88 | 1h 37m |
| May 2022 | bearish trending high vol | 4619 | +1294.60 | 2.81 | 3409 | 1210 | 73.8 | -1.34 | 1h 28m |
| Apr 2022 | bearish choppy high vol | 1644 | +757.04 | 4.62 | 1327 | 317 | 80.7 | -0.29 | 4h 23m |
| Mar 2022 | bullish choppy high vol | 1685 | +339.93 | 2.03 | 1273 | 412 | 75.5 | -0.48 | 4h 19m |
| Feb 2022 | bearish trending high vol | 2465 | +1036.45 | 4.22 | 1970 | 495 | 79.9 | -0.53 | 2h 41m |
| Jan 2022 | bearish trending high vol | 3107 | +928.70 | 3.00 | 2349 | 758 | 75.6 | -1.35 | 2h 17m |
| Dec 2021 | bearish trending high vol | 2838 | +1082.06 | 3.83 | 2150 | 688 | 75.8 | -1.74 | 2h 34m |
| Nov 2021 | bearish trending high vol | 2308 | +724.49 | 3.15 | 1738 | 570 | 75.3 | -0.85 | 3h 04m |
| Oct 2021 | bullish trending high vol | 1944 | +452.24 | 2.34 | 1429 | 515 | 73.5 | -0.71 | 3h 49m |
| Sep 2021 | bearish trending high vol | 3662 | +1247.19 | 3.43 | 2674 | 988 | 73.0 | -1.91 | 1h 50m |
| Aug 2021 | bullish trending high vol | 2974 | +656.59 | 2.22 | 2236 | 738 | 75.2 | -0.73 | 2h 29m |
| Jul 2021 | bullish trending high vol | 2417 | +878.31 | 3.64 | 1907 | 510 | 78.9 | -0.74 | 2h 58m |
| Jun 2021 | bearish trending high vol | 4566 | +1627.16 | 3.57 | 3571 | 995 | 78.2 | -1.42 | 1h 27m |
| May 2021 | bearish trending high vol | 9901 | +2937.69 | 2.98 | 6926 | 2975 | 70.0 | -7.51 | 0h 38m |
| Apr 2021 | bearish choppy high vol | 6103 | +1438.12 | 2.36 | 4291 | 1812 | 70.3 | -3.67 | 1h 04m |
| Mar 2021 | bullish choppy high vol | 3115 | +556.38 | 1.80 | 2287 | 828 | 73.4 | -3.72 | 2h 20m |
| Feb 2021 | bullish trending high vol | 7352 | +1847.54 | 2.52 | 5154 | 2198 | 70.1 | -6.24 | 0h 50m |
| Jan 2021 | bullish trending high vol | 7273 | +1359.43 | 1.87 | 5039 | 2234 | 69.3 | -28.76 | 0h 54m |
Yearly breakdown
| Year | Trades | Profit % | Avg % | Win | Loss | Win % | DD % | Avg dur |
|---|---|---|---|---|---|---|---|---|
| 2026 | 10 | -4.42 | -4.43 | 2 | 8 | 20.0 | -0.05 | 20h 16m |
| 2025 | 20750 | +6743.83 | 3.26 | 16084 | 4666 | 77.5 | -0.85 | 4h 10m |
| 2024 | 21972 | +6743.93 | 3.08 | 16547 | 5425 | 75.3 | -0.58 | 3h 57m |
| 2023 | 13720 | +4936.80 | 3.60 | 10452 | 3268 | 76.2 | -0.52 | 6h 23m |
| 2022 | 28023 | +9383.08 | 3.36 | 21436 | 6587 | 76.5 | -1.35 | 3h 02m |
| 2021 | 54453 | +14807.20 | 2.73 | 39402 | 15051 | 72.4 | -28.76 | 1h 31m |
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 · 3 thing(s) worth reviewing before trusting the numbers
| Line | Pattern | Detail | |
|---|---|---|---|
| 18 | review | dead_exit_config | exit_profit_only only applies to exit SIGNALS, but use_exit_signal is False -- this setting has no effect |
| 13 | review | missing_startup_candles | uses recursive indicators (ADX, MINUS_DI, PLUS_DI) but startup_candle_count is not set (default 0). Their value at a bar depends on all bars before it, so freqtrade trims no warmup and the backtest opens with unwarmed values that can't occur live. The longest lookback visible here is bollinger_bands(window=20), so it needs at least that many. Set it to a few times the longest period and confirm with `freqtrade recursive-analysis` |
| 53 | review | enter_tag_overwrite | enter_tag/exit_tag is written by 2 separate assignments -- they share one column and run in source order, so a row matching more than one condition keeps only the LAST tag. Per-tag statistics won't mean what they appear to |
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 435.2s