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 | from freqtrade.strategy import IStrategy, merge_informative_pair from pandas import DataFrame import talib.abstract as ta class TurtlePyramidingStrategy(IStrategy): INTERFACE_VERSION = 3 # Strategy Parameters entry_period = 20 exit_period = 10 atr_period = 20 atr_mult = 2.0 # For stop loss pyr_atr_mult = 0.5 # For pyramiding levels # Freqtrade Settings timeframe = '1d' startup_candle_count: int = entry_period + atr_period minimal_roi = {"0": 0.10} stoploss = -0.99 # Use custom stoploss trailing_stop = False def populate_indicators(self, df: DataFrame, metadata: dict) -> DataFrame: df['20d_high'] = df['high'].rolling(window=self.entry_period).max() df['10d_low'] = df['low'].rolling(window=self.exit_period).min() df['atr'] = ta.ATR(df, timeperiod=self.atr_period) return df def populate_entry_trend(self, df: DataFrame, metadata: dict) -> DataFrame: df['enter_long'] = 0 df.loc[ (df['close'] > df['20d_high'].shift(1)), 'enter_long' ] = 1 return df def populate_exit_trend(self, df: DataFrame, metadata: dict) -> DataFrame: df['exit_long'] = 0 df.loc[ (df['close'] < df['10d_low'].shift(1)), 'exit_long' ] = 1 return df def confirm_trade_entry(self, pair: str, order_type: str, amount: float, rate: float, time_in_force: str, exit_tag: str, **kwargs) -> bool: trade = kwargs.get("trade", None) if not trade: return True # Initial entry # Pyramiding logic data = self.dp.get_pair_dataframe(pair=pair, timeframe=self.timeframe) candle = data.iloc[-1] base_price = trade.open_rate atr = candle['atr'] position_size = trade.amount # Determine pyramid level based on price distance levels_crossed = int((candle['close'] - base_price) / (self.pyr_atr_mult * atr)) current_units = int(position_size / trade.open_trade_data.get('base_unit_size', 1.0)) # Max 4 units total if current_units < 4 and levels_crossed > current_units: trade.open_trade_data['base_unit_size'] = position_size if 'base_unit_size' not in trade.open_trade_data else trade.open_trade_data['base_unit_size'] return True return False def custom_stoploss(self, pair: str, trade, current_time, current_rate, current_profit, **kwargs): atr = self.dp.get_pair_dataframe(pair=pair, timeframe=self.timeframe).iloc[-1]['atr'] stoploss_price = trade.open_rate - self.atr_mult * atr if current_rate <= stoploss_price: return 0.0 return 1 |
Strategy League — fixed backtest that feeds the ranking
Export report Freqtrade logsRun finished · took 14.1s
ℹ️ This strategy uses custom_stoploss() — freqtrade only
re-checks these once per 1d 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 →
- did not beat simply holding the market
- statistically significant edge (p=0.00)
- 100% of resampled runs stayed profitable
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 | 1 | -0.42 | -4.23 | 0 | 1 | 0.0 | -13.29 | 288h 00m |
| Dec 2025 | bearish trending low vol | 3 | -3.31 | -11.04 | 0 | 3 | 0.0 | -13.2 | 320h 00m |
| Nov 2025 | bearish trending high vol | 14 | -17.56 | -12.55 | 6 | 8 | 42.9 | -12.49 | 226h 17m |
| Oct 2025 | bearish trending low vol | 10 | -11.07 | -11.05 | 5 | 5 | 50.0 | -8.7 | 148h 48m |
| Sep 2025 | bullish choppy low vol | 20 | -6.00 | -3.00 | 9 | 11 | 45.0 | -6.75 | 320h 24m |
| Aug 2025 | bullish choppy low vol | 22 | -12.60 | -5.73 | 8 | 14 | 36.4 | -5.33 | 214h 55m |
| Jul 2025 | bullish choppy low vol | 33 | +32.99 | 10.00 | 33 | 0 | 100.0 | -9.2 | 112h 00m |
| Jun 2025 | bearish choppy low vol | 11 | -9.43 | -8.56 | 3 | 8 | 27.3 | -9.63 | 327h 16m |
| May 2025 | bullish trending low vol | 28 | +8.05 | 2.87 | 19 | 9 | 67.9 | -10.03 | 248h 34m |
| Apr 2025 | bullish choppy low vol | 8 | +1.09 | 1.36 | 6 | 2 | 75.0 | -10.41 | 132h 00m |
| Mar 2025 | bearish trending high vol | 5 | -6.76 | -13.52 | 2 | 3 | 40.0 | -9.36 | 364h 48m |
| Feb 2025 | bearish trending low vol | 5 | -11.25 | -22.49 | 0 | 5 | 0.0 | -7.9 | 499h 12m |
| Jan 2025 | bearish choppy low vol | 12 | -14.32 | -11.94 | 4 | 8 | 33.3 | -5.48 | 578h 00m |
| Dec 2024 | bullish trending low vol | 24 | +8.90 | 3.71 | 20 | 4 | 83.3 | -2.39 | 182h 00m |
| Nov 2024 | bullish trending low vol | 60 | +51.48 | 8.58 | 56 | 4 | 93.3 | -11.96 | 104h 48m |
| Oct 2024 | bullish choppy low vol | 17 | -8.60 | -5.06 | 5 | 12 | 29.4 | -11.46 | 240h 00m |
| Sep 2024 | bearish choppy low vol | 24 | +4.39 | 1.83 | 16 | 8 | 66.7 | -12.69 | 140h 00m |
| Aug 2024 | bearish choppy high vol | 14 | -3.86 | -2.76 | 7 | 7 | 50.0 | -11.18 | 219h 26m |
| Jul 2024 | bearish trending low vol | 12 | -0.22 | -0.19 | 7 | 5 | 58.3 | -9.78 | 232h 00m |
| Jun 2024 | bearish choppy low vol | 10 | -11.49 | -11.49 | 1 | 9 | 10.0 | -9.13 | 415h 12m |
| May 2024 | bullish choppy high vol | 7 | -1.84 | -2.62 | 3 | 4 | 42.9 | -6.89 | 212h 34m |
| Apr 2024 | bearish choppy high vol | 10 | -18.54 | -18.55 | 1 | 9 | 10.0 | -6.33 | 261h 36m |
| Mar 2024 | bullish trending high vol | 40 | +14.42 | 3.61 | 31 | 9 | 77.5 | -3.49 | 197h 24m |
| Feb 2024 | bullish trending low vol | 28 | +23.87 | 8.52 | 26 | 2 | 92.9 | -3.2 | 162h 00m |
| Jan 2024 | bearish choppy high vol | 14 | -12.87 | -9.19 | 5 | 9 | 35.7 | -3.69 | 498h 51m |
| Dec 2023 | bullish trending low vol | 27 | +27.01 | 10.00 | 27 | 0 | 100.0 | -0.3 | 198h 13m |
| Nov 2023 | bullish trending low vol | 35 | +25.89 | 7.39 | 31 | 4 | 88.6 | -1.14 | 153h 36m |
| Oct 2023 | bullish trending low vol | 27 | +13.88 | 5.14 | 20 | 7 | 74.1 | -5.87 | 173h 20m |
| Sep 2023 | bearish choppy low vol | 5 | +2.66 | 5.32 | 4 | 1 | 80.0 | -6.39 | 187h 12m |
| Aug 2023 | bearish choppy low vol | 10 | -9.42 | -9.41 | 2 | 8 | 20.0 | -6.02 | 405h 36m |
| Jul 2023 | bullish trending low vol | 20 | +8.56 | 4.27 | 15 | 5 | 75.0 | -5.5 | 229h 12m |
| Jun 2023 | bullish trending low vol | 22 | -2.64 | -1.20 | 12 | 10 | 54.5 | -8.56 | 147h 16m |
| May 2023 | bearish choppy low vol | 1 | +1.00 | 10.00 | 1 | 0 | 100.0 | -5.04 | 504h 00m |
| Apr 2023 | bullish trending low vol | 19 | -3.46 | -1.82 | 9 | 10 | 47.4 | -5.32 | 258h 57m |
| Mar 2023 | bullish trending high vol | 20 | -15.67 | -7.83 | 7 | 13 | 35.0 | -6.03 | 244h 48m |
| Feb 2023 | bullish trending low vol | 20 | +9.31 | 4.65 | 15 | 5 | 75.0 | -0.98 | 259h 12m |
| Jan 2023 | bullish trending low vol | 53 | +53.05 | 10.00 | 53 | 0 | 100.0 | -12.78 | 62h 02m |
| Dec 2022 | bearish trending low vol | 8 | -12.26 | -15.31 | 0 | 8 | 0.0 | -13.07 | 291h 00m |
| Nov 2022 | bearish trending high vol | 17 | -13.45 | -7.90 | 7 | 10 | 41.2 | -9.49 | 336h 00m |
| Oct 2022 | bullish choppy low vol | 10 | +2.27 | 2.27 | 7 | 3 | 70.0 | -7.61 | 122h 24m |
| Sep 2022 | bearish choppy high vol | 13 | -4.62 | -3.56 | 7 | 6 | 53.8 | -7.39 | 166h 09m |
| Aug 2022 | bullish choppy high vol | 23 | -4.66 | -2.02 | 12 | 11 | 52.2 | -4.87 | 225h 23m |
| Jul 2022 | bearish trending high vol | 31 | +28.32 | 9.13 | 30 | 1 | 96.8 | -8.63 | 100h 39m |
| Jun 2022 | bearish trending high vol | 3 | -3.45 | -11.50 | 1 | 2 | 33.3 | -8.94 | 336h 00m |
| Apr 2022 | bearish choppy high vol | 13 | -8.26 | -6.34 | 4 | 9 | 30.8 | -7.89 | 243h 42m |
| Mar 2022 | bullish choppy high vol | 15 | +11.69 | 7.79 | 14 | 1 | 93.3 | -9.63 | 84h 48m |
| Feb 2022 | bearish trending high vol | 5 | +0.74 | 1.48 | 3 | 2 | 60.0 | -9.0 | 110h 24m |
| Jan 2022 | bearish trending high vol | 15 | -15.08 | -10.08 | 6 | 9 | 40.0 | -9.16 | 156h 48m |
| Dec 2021 | bearish trending high vol | 5 | -2.40 | -4.81 | 3 | 2 | 60.0 | -4.96 | 96h 00m |
| Nov 2021 | bullish trending high vol | 26 | +1.14 | 0.45 | 17 | 9 | 65.4 | -4.78 | 186h 28m |
| Oct 2021 | bullish trending high vol | 24 | +5.77 | 2.41 | 17 | 7 | 70.8 | -6.38 | 176h 00m |
| Sep 2021 | bearish trending high vol | 34 | +4.09 | 1.19 | 26 | 8 | 76.5 | -5.4 | 175h 04m |
| Aug 2021 | bullish trending high vol | 55 | +47.25 | 8.59 | 52 | 3 | 94.5 | -7.58 | 83h 47m |
| Jul 2021 | bearish trending high vol | 7 | -1.20 | -1.70 | 5 | 2 | 71.4 | -8.64 | 92h 34m |
| May 2021 | bearish trending high vol | 29 | -3.26 | -1.15 | 21 | 8 | 72.4 | -7.51 | 200h 17m |
| Apr 2021 | bearish choppy high vol | 52 | +36.50 | 7.02 | 48 | 4 | 92.3 | -7.05 | 74h 46m |
| Mar 2021 | bullish choppy high vol | 25 | -12.38 | -4.95 | 14 | 11 | 56.0 | -9.06 | 263h 02m |
| Feb 2021 | bullish trending high vol | 75 | +74.98 | 10.00 | 75 | 0 | 100.0 | 0.0 | 82h 53m |
| Jan 2021 | bullish trending high vol | 70 | +65.57 | 9.36 | 69 | 1 | 98.6 | -2.13 | 50h 45m |
Yearly breakdown
| Year | Trades | Profit % | Avg % | Win | Loss | Win % | DD % | Avg dur |
|---|---|---|---|---|---|---|---|---|
| 2026 | 1 | -0.42 | -4.23 | 0 | 1 | 0.0 | -13.29 | 288h 00m |
| 2025 | 171 | -50.17 | -2.93 | 95 | 76 | 55.6 | -13.2 | 253h 20m |
| 2024 | 260 | +45.64 | 1.76 | 178 | 82 | 68.5 | -12.69 | 198h 33m |
| 2023 | 259 | +110.17 | 4.25 | 196 | 63 | 75.7 | -12.78 | 181h 32m |
| 2022 | 153 | -18.76 | -1.23 | 91 | 62 | 59.5 | -13.07 | 183h 32m |
| 2021 | 402 | +216.06 | 5.37 | 347 | 55 | 86.3 | -9.06 | 116h 25m |
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 | |
|---|---|---|---|
| 6 | review | missing_startup_candles | uses recursive indicators (ATR) 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` |
| 69 | review | dead_callback | custom_stoploss() is defined but use_custom_stoploss isn't True, and freqtrade only calls it when that flag is set -- the method never runs and every trade uses the static stoploss |
ran by Ron · took s
Lookahead analysis
freqtrade lookahead-analysis: detects strategies peeking at future candles.