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 | # pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement # flake8: noqa: F401 # isort: skip_file # --- Do not remove these imports --- from freqtrade.strategy import IStrategy, Trade, IntParameter from datetime import datetime from pandas import DataFrame from typing import Dict, List import talib.abstract as ta from technical import qtpylib class ZaratustraV23(IStrategy): # Parameters INTERFACE_VERSION = 3 timeframe = '5m' can_short = True use_exit_signal = True exit_profit_only = True # ROI table: minimal_roi = {} # Stoploss: stoploss = -0.2 # Trailing stop: trailing_stop = True trailing_stop_positive = 0.012 trailing_stop_positive_offset = 0.080 trailing_only_offset_is_reached = True # Max Open Trades: max_open_trades = -1 @property def plot_config(self): plot_config = {} plot_config['main_plot'] = { 'EMA' : {} } plot_config['subplots'] = { 'DI': { 'DX' : { 'color': 'yellow' }, 'ADX': { 'color': 'orange' }, 'PDI': { 'color': 'green' }, 'MDI': { 'color': 'red' }, }, } return plot_config def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame: dataframe['EMA'] = ta.EMA(dataframe) dataframe['LRS'] = ta.LINEARREG_SLOPE(dataframe) dataframe['DX'] = ta.DX(dataframe) # ta.SMA( ta.DX(dataframe) * dataframe['volume']) / ta.SMA(dataframe['volume']) dataframe['ADX'] = ta.ADX(dataframe) # ta.SMA( ta.ADX(dataframe) * dataframe['volume']) / ta.SMA(dataframe['volume']) dataframe['PDI'] = ta.PLUS_DI(dataframe) # ta.SMA( ta.PLUS_DI(dataframe) * dataframe['volume']) / ta.SMA(dataframe['volume']) dataframe['MDI'] = ta.MINUS_DI(dataframe) # ta.SMA(ta.MINUS_DI(dataframe) * dataframe['volume']) / ta.SMA(dataframe['volume']) return dataframe def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame: dataframe.loc[ ( (qtpylib.crossed_above(dataframe['DX'], dataframe['PDI'])) & (dataframe['PDI'] > dataframe['MDI']) & (dataframe['LRS'] > dataframe['LRS'].shift(1)) ), ['enter_long', 'enter_tag'] ] = (1, 'Long DI enter') dataframe.loc[ ( (qtpylib.crossed_above(dataframe['DX'], dataframe['MDI'])) & (dataframe['MDI'] > dataframe['PDI']) & (dataframe['LRS'] < dataframe['LRS'].shift(1)) ), ['enter_short', 'enter_tag'] ] = (1, 'Short DI enter') return dataframe def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame: dataframe.loc[ ( (qtpylib.crossed_below(dataframe['DX'], dataframe['ADX'])) | (qtpylib.crossed_below(dataframe['DX'], dataframe['PDI'])) | (dataframe['DX'] < dataframe['PDI']) ), ['exit_long', 'exit_tag'] ] = (1, 'Long DI exit') dataframe.loc[ ( (qtpylib.crossed_below(dataframe['DX'], dataframe['ADX'])) | (qtpylib.crossed_below(dataframe['DX'], dataframe['MDI'])) | (dataframe['DX'] < dataframe['MDI']) ), ['exit_short', 'exit_tag'] ] = (1, 'Short DI exit') return dataframe def leverage(self, pair: str, current_time: datetime, current_rate: float, proposed_leverage: float, max_leverage: float, side: str, **kwargs,) -> float: return 10 |
Strategy League — fixed backtest that feeds the ranking
Export report Freqtrade logsRun finished · took 1219.7s
ℹ️ 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 92% 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 | -5.47 | -5.48 | 1 | 9 | 10.0 | -1.53 | 4h 26m |
| Dec 2025 | bearish trending low vol | 2659 | +105.24 | 0.39 | 2179 | 480 | 81.9 | -3.33 | 2h 30m |
| Nov 2025 | bearish trending high vol | 4064 | -8.74 | -0.02 | 3143 | 921 | 77.3 | -3.41 | 1h 30m |
| Oct 2025 | bearish trending low vol | 3378 | +100.82 | 0.30 | 2714 | 664 | 80.3 | -2.28 | 1h 50m |
| Sep 2025 | bullish choppy low vol | 2355 | -49.15 | -0.21 | 1960 | 395 | 83.2 | -3.01 | 2h 47m |
| Aug 2025 | bearish choppy low vol | 3238 | -35.86 | -0.11 | 2598 | 640 | 80.2 | -1.44 | 1h 59m |
| Jul 2025 | bullish choppy low vol | 3718 | +66.02 | 0.17 | 3000 | 718 | 80.7 | -1.98 | 1h 44m |
| Jun 2025 | bearish choppy low vol | 2851 | +47.62 | 0.17 | 2364 | 487 | 82.9 | -3.03 | 2h 16m |
| May 2025 | bullish trending low vol | 3586 | -102.41 | -0.29 | 2838 | 748 | 79.1 | -3.16 | 1h 47m |
| Apr 2025 | bullish choppy low vol | 3676 | +104.63 | 0.28 | 2972 | 704 | 80.8 | -2.65 | 1h 42m |
| Mar 2025 | bearish trending high vol | 4268 | -33.83 | -0.08 | 3366 | 902 | 78.9 | -2.24 | 1h 30m |
| Feb 2025 | bearish trending low vol | 4212 | +393.59 | 0.94 | 3370 | 842 | 80.0 | -1.43 | 1h 15m |
| Jan 2025 | bearish choppy low vol | 4307 | +191.47 | 0.45 | 3447 | 860 | 80.0 | -1.79 | 1h 25m |
| Dec 2024 | bullish trending low vol | 5719 | +150.21 | 0.26 | 4388 | 1331 | 76.7 | -4.83 | 1h 02m |
| Nov 2024 | bullish trending low vol | 5511 | +167.05 | 0.30 | 4185 | 1326 | 75.9 | -5.95 | 1h 05m |
| Oct 2024 | bullish choppy low vol | 2635 | -83.80 | -0.32 | 2146 | 489 | 81.4 | -6.34 | 2h 35m |
| Sep 2024 | bearish choppy low vol | 2730 | -73.38 | -0.27 | 2213 | 517 | 81.1 | -4.49 | 2h 27m |
| Aug 2024 | bearish choppy high vol | 3510 | +34.93 | 0.10 | 2771 | 739 | 78.9 | -3.54 | 1h 48m |
| Jul 2024 | bearish trending low vol | 3362 | +240.19 | 0.71 | 2761 | 601 | 82.1 | -3.24 | 1h 57m |
| Jun 2024 | bearish choppy low vol | 2522 | +12.82 | 0.05 | 2048 | 474 | 81.2 | -4.09 | 2h 42m |
| May 2024 | bullish choppy high vol | 2676 | -122.58 | -0.46 | 2127 | 549 | 79.5 | -3.33 | 2h 30m |
| Apr 2024 | bearish choppy high vol | 3811 | +61.93 | 0.16 | 2985 | 826 | 78.3 | -2.17 | 1h 35m |
| Mar 2024 | bullish trending high vol | 5068 | +147.41 | 0.29 | 3912 | 1156 | 77.2 | -3.86 | 1h 12m |
| Feb 2024 | bullish trending low vol | 2807 | -89.84 | -0.32 | 2216 | 591 | 78.9 | -3.53 | 2h 18m |
| Jan 2024 | bearish choppy high vol | 3577 | +191.48 | 0.54 | 2830 | 747 | 79.1 | -1.51 | 1h 50m |
| Dec 2023 | bullish trending low vol | 3998 | +263.86 | 0.66 | 3158 | 840 | 79.0 | -1.56 | 1h 41m |
| Nov 2023 | bullish trending low vol | 3486 | +249.95 | 0.72 | 2775 | 711 | 79.6 | -1.25 | 1h 48m |
| Oct 2023 | bullish trending low vol | 2158 | +196.73 | 0.91 | 1779 | 379 | 82.4 | -1.74 | 3h 16m |
| Sep 2023 | bearish choppy low vol | 1535 | -40.65 | -0.27 | 1243 | 292 | 81.0 | -1.94 | 4h 21m |
| Aug 2023 | bearish choppy low vol | 1778 | +82.07 | 0.46 | 1456 | 322 | 81.9 | -2.63 | 3h 58m |
| Jul 2023 | bullish trending low vol | 2398 | +44.73 | 0.19 | 1915 | 483 | 79.9 | -1.61 | 2h 52m |
| Jun 2023 | bullish trending low vol | 2623 | +336.09 | 1.28 | 2166 | 457 | 82.6 | -1.9 | 2h 31m |
| May 2023 | bearish choppy low vol | 1783 | +53.58 | 0.30 | 1485 | 298 | 83.3 | -1.83 | 3h 50m |
| Apr 2023 | bullish trending low vol | 2124 | +57.35 | 0.27 | 1698 | 426 | 79.9 | -1.95 | 3h 03m |
| Mar 2023 | bullish trending high vol | 3033 | +65.28 | 0.22 | 2330 | 703 | 76.8 | -2.42 | 2h 05m |
| Feb 2023 | bullish trending low vol | 2749 | +72.63 | 0.26 | 2172 | 577 | 79.0 | -3.98 | 2h 08m |
| Jan 2023 | bullish trending low vol | 3028 | -1.84 | -0.01 | 2254 | 774 | 74.4 | -3.96 | 2h 13m |
| Dec 2022 | bearish trending low vol | 1847 | +111.11 | 0.60 | 1516 | 331 | 82.1 | -2.08 | 3h 40m |
| Nov 2022 | bearish trending high vol | 3975 | +204.95 | 0.52 | 2960 | 1015 | 74.5 | -2.67 | 1h 30m |
| Oct 2022 | bullish choppy low vol | 2330 | +98.33 | 0.42 | 1893 | 437 | 81.2 | -1.77 | 2h 54m |
| Sep 2022 | bearish choppy high vol | 3209 | +74.61 | 0.23 | 2495 | 714 | 77.8 | -2.82 | 1h 55m |
| Aug 2022 | bullish choppy high vol | 3340 | +70.86 | 0.21 | 2582 | 758 | 77.3 | -5.65 | 1h 50m |
| Jul 2022 | bullish trending high vol | 4143 | -44.18 | -0.11 | 3105 | 1038 | 74.9 | -4.85 | 1h 26m |
| Jun 2022 | bearish trending high vol | 5205 | +375.55 | 0.72 | 3860 | 1345 | 74.2 | -4.04 | 0h 58m |
| May 2022 | bearish trending high vol | 5256 | +300.18 | 0.57 | 3907 | 1349 | 74.3 | -6.83 | 0h 59m |
| Apr 2022 | bearish choppy high vol | 3085 | +57.09 | 0.19 | 2425 | 660 | 78.6 | -7.58 | 1h 55m |
| Mar 2022 | bullish choppy high vol | 3348 | -92.90 | -0.27 | 2561 | 787 | 76.5 | -7.33 | 1h 51m |
| Feb 2022 | bearish trending high vol | 3823 | +173.24 | 0.45 | 2937 | 886 | 76.8 | -6.05 | 1h 20m |
| Jan 2022 | bearish trending high vol | 4402 | +196.84 | 0.45 | 3388 | 1014 | 77.0 | -5.92 | 1h 16m |
| Dec 2021 | bearish trending high vol | 4312 | +77.96 | 0.18 | 3259 | 1053 | 75.6 | -11.27 | 1h 20m |
| Nov 2021 | bearish trending high vol | 3821 | -129.05 | -0.34 | 2938 | 883 | 76.9 | -13.45 | 1h 32m |
| Oct 2021 | bullish trending high vol | 3960 | +64.07 | 0.16 | 3084 | 876 | 77.9 | -4.1 | 1h 34m |
| Sep 2021 | bearish trending high vol | 5158 | +122.13 | 0.24 | 3858 | 1300 | 74.8 | -9.64 | 1h 03m |
| Aug 2021 | bullish trending high vol | 5091 | -52.58 | -0.10 | 3832 | 1259 | 75.3 | -10.44 | 1h 06m |
| Jul 2021 | bullish trending high vol | 4313 | +3.89 | 0.01 | 3305 | 1008 | 76.6 | -7.98 | 1h 20m |
| Jun 2021 | bearish trending high vol | 5580 | +19.74 | 0.03 | 4100 | 1480 | 73.5 | -7.7 | 0h 51m |
| May 2021 | bearish trending high vol | 7761 | +448.36 | 0.58 | 5497 | 2264 | 70.8 | -12.84 | 0h 31m |
| Apr 2021 | bearish choppy high vol | 6683 | +228.91 | 0.34 | 4879 | 1804 | 73.0 | -11.36 | 0h 44m |
| Mar 2021 | bullish choppy high vol | 5246 | -7.22 | -0.01 | 3950 | 1296 | 75.3 | -9.8 | 1h 06m |
| Feb 2021 | bullish trending high vol | 6724 | +576.40 | 0.86 | 4851 | 1873 | 72.1 | -12.17 | 0h 35m |
| Jan 2021 | bullish trending high vol | 7382 | +614.83 | 0.83 | 5308 | 2074 | 71.9 | -14.53 | 0h 37m |
Yearly breakdown
| Year | Trades | Profit % | Avg % | Win | Loss | Win % | DD % | Avg dur |
|---|---|---|---|---|---|---|---|---|
| 2026 | 10 | -5.47 | -5.48 | 1 | 9 | 10.0 | -1.53 | 4h 26m |
| 2025 | 42312 | +779.40 | 0.18 | 33951 | 8361 | 80.2 | -3.41 | 1h 47m |
| 2024 | 43928 | +636.42 | 0.14 | 34582 | 9346 | 78.7 | -6.34 | 1h 45m |
| 2023 | 30693 | +1379.78 | 0.45 | 24431 | 6262 | 79.6 | -3.98 | 2h 35m |
| 2022 | 43963 | +1525.68 | 0.35 | 33629 | 10334 | 76.5 | -7.58 | 1h 36m |
| 2021 | 66031 | +1967.44 | 0.30 | 48861 | 17170 | 74.0 | -14.53 | 0h 57m |
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 · 2 thing(s) worth reviewing before trusting the numbers
| Line | Pattern | Detail | |
|---|---|---|---|
| 14 | review | missing_startup_candles | uses recursive indicators (ADX, DX, EMA, MINUS_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. Set it to a few times the longest period and confirm with `freqtrade recursive-analysis` |
| 66 | review | enter_tag_overwrite | enter_tag/exit_tag is written by 4 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 428.2s