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 | import freqtrade.vendor.qtpylib.indicators as qtpylib import numpy as np import talib.abstract as ta from freqtrade.strategy.interface import IStrategy from pandas import DataFrame from datetime import datetime, timedelta ########################################################################################################### ## CombinedBinHAndClucV5 by iterativ ## ## ## ## Fretrade https://github.com/freqtrade/freqtrade ## ## The authors of the original CombinedBinHAndCluc https://github.com/freqtrade/freqtrade-strategies ## ## V5 by iterativ. ## ## ## ########################################################################################################### ## GENERAL RECOMMENDATIONS ## ## ## ## For optimal performance, suggested to use between 4 and 6 open trades, with unlimited stake. ## ## A pairlist with 20 to 40 pairs. Volume pairlist works well. ## ## Prefer stable coin (USDT, BUSDT etc) pairs, instead of BTC or ETH pairs. ## ## Ensure that you don't override any variables in you config.json. Especially ## ## the timeframe (must be 5m) & exit_profit_only (must be true). ## ## ## ########################################################################################################### ## DONATIONS ## ## ## ## Absolutely not required. However, will be accepted as a token of appreciation. ## ## ## ## BTC: bc1qvflsvddkmxh7eqhc4jyu5z5k6xcw3ay8jl49sk ## ## ETH: 0x83D3cFb8001BDC5d2211cBeBB8cB3461E5f7Ec91 ## ## ## ########################################################################################################### class CombinedBinHAndClucV5(IStrategy): INTERFACE_VERSION = 3 minimal_roi = {'0': 0.018} stoploss = -0.99 # effectively disabled. timeframe = '5m' # Sell signal use_exit_signal = True exit_profit_only = True exit_profit_offset = 0.001 # it doesn't meant anything, just to guarantee there is a minimal profit. ignore_roi_if_entry_signal = True # Trailing stoploss trailing_stop = True trailing_only_offset_is_reached = True trailing_stop_positive = 0.01 trailing_stop_positive_offset = 0.025 # Custom stoploss use_custom_stoploss = True # Run "populate_indicators()" only for new candle. process_only_new_candles = False # Number of candles the strategy requires before producing valid signals startup_candle_count: int = 50 # Optional order type mapping. order_types = {'entry': 'limit', 'exit': 'limit', 'stoploss': 'market', 'stoploss_on_exchange': False} def custom_stoploss(self, pair: str, trade: 'Trade', current_time: datetime, current_rate: float, current_profit: float, **kwargs) -> float: # Manage losing trades and open room for better ones. if (current_profit < 0) & (current_time - timedelta(minutes=300) > trade.open_date_utc): return 0.01 return 0.99 def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame: # strategy BinHV45 bb_40 = qtpylib.bollinger_bands(dataframe['close'], window=40, stds=2) dataframe['lower'] = bb_40['lower'] dataframe['mid'] = bb_40['mid'] dataframe['bbdelta'] = (bb_40['mid'] - dataframe['lower']).abs() dataframe['closedelta'] = (dataframe['close'] - dataframe['close'].shift()).abs() dataframe['tail'] = (dataframe['close'] - dataframe['low']).abs() # strategy ClucMay72018 bollinger = qtpylib.bollinger_bands(qtpylib.typical_price(dataframe), window=20, stds=2) dataframe['bb_lowerband'] = bollinger['lower'] dataframe['bb_middleband'] = bollinger['mid'] dataframe['bb_upperband'] = bollinger['upper'] dataframe['ema_slow'] = ta.EMA(dataframe, timeperiod=50) dataframe['volume_mean_slow'] = dataframe['volume'].rolling(window=30).mean() return dataframe def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame: # strategy BinHV45 # Make sure Volume is not 0 # strategy ClucMay72018 # Make sure Volume is not 0 dataframe.loc[dataframe['lower'].shift().gt(0) & dataframe['bbdelta'].gt(dataframe['close'] * 0.008) & dataframe['closedelta'].gt(dataframe['close'] * 0.0175) & dataframe['tail'].lt(dataframe['bbdelta'] * 0.25) & dataframe['close'].lt(dataframe['lower'].shift()) & dataframe['close'].le(dataframe['close'].shift()) & (dataframe['volume'] > 0) | (dataframe['close'] < dataframe['ema_slow']) & (dataframe['close'] < 0.985 * dataframe['bb_lowerband']) & (dataframe['volume'] < dataframe['volume_mean_slow'].shift(1) * 20) & (dataframe['volume'] > 0), 'enter_long'] = 1 return dataframe def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame: # Improves the profit slightly. # Make sure Volume is not 0 dataframe.loc[(dataframe['close'] > dataframe['bb_upperband']) & (dataframe['close'].shift(1) > dataframe['bb_upperband'].shift(1)) & (dataframe['volume'] > 0), 'exit_long'] = 1 return dataframe |
Strategy League — fixed backtest that feeds the ranking
Export report Freqtrade logsRun finished · took 315.0s
ℹ️ This strategy uses a trailing stop / custom_stoploss() — 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 →
- did not beat simply holding the market
- statistically significant edge (p=0.00)
- 100% of resampled runs stayed profitable
- profitable across 72% of rolling 3-month windows
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 |
|---|---|---|---|---|---|---|---|---|---|
| Dec 2025 | bearish trending low vol | 36 | -6.12 | -1.70 | 14 | 22 | 38.9 | -3.38 | 4h 37m |
| Nov 2025 | bearish trending high vol | 78 | +5.08 | 0.65 | 60 | 18 | 76.9 | -3.12 | 1h 37m |
| Oct 2025 | bearish trending low vol | 113 | -6.62 | -0.58 | 59 | 54 | 52.2 | -5.13 | 0h 49m |
| Sep 2025 | bullish choppy low vol | 16 | +1.23 | 0.77 | 12 | 4 | 75.0 | -0.65 | 2h 32m |
| Aug 2025 | bullish choppy low vol | 25 | +0.73 | 0.29 | 14 | 11 | 56.0 | -1.15 | 2h 24m |
| Jul 2025 | bullish choppy low vol | 41 | +5.06 | 1.23 | 35 | 6 | 85.4 | -2.58 | 1h 45m |
| Jun 2025 | bearish choppy low vol | 37 | -1.58 | -0.43 | 20 | 17 | 54.1 | -2.68 | 4h 06m |
| May 2025 | bullish trending low vol | 50 | +1.84 | 0.37 | 34 | 16 | 68.0 | -2.51 | 2h 56m |
| Apr 2025 | bullish choppy low vol | 39 | +2.72 | 0.70 | 33 | 6 | 84.6 | -3.38 | 3h 05m |
| Mar 2025 | bearish trending high vol | 79 | +0.15 | 0.02 | 56 | 23 | 70.9 | -4.36 | 3h 00m |
| Feb 2025 | bearish trending low vol | 117 | -6.92 | -0.59 | 75 | 42 | 64.1 | -3.45 | 2h 29m |
| Jan 2025 | bearish choppy low vol | 79 | -4.02 | -0.51 | 50 | 29 | 63.3 | -1.88 | 2h 24m |
| Dec 2024 | bullish trending low vol | 173 | +3.78 | 0.22 | 106 | 67 | 61.3 | -1.84 | 1h 43m |
| Nov 2024 | bullish trending low vol | 117 | +3.47 | 0.30 | 84 | 33 | 71.8 | -1.32 | 2h 18m |
| Oct 2024 | bullish choppy low vol | 37 | +1.88 | 0.51 | 29 | 8 | 78.4 | -1.22 | 3h 04m |
| Sep 2024 | bearish choppy low vol | 16 | +1.62 | 1.02 | 13 | 3 | 81.2 | -1.37 | 1h 21m |
| Aug 2024 | bearish choppy high vol | 86 | +2.54 | 0.29 | 60 | 26 | 69.8 | -3.13 | 1h 43m |
| Jul 2024 | bearish trending low vol | 43 | -3.78 | -0.88 | 25 | 18 | 58.1 | -2.77 | 4h 02m |
| Jun 2024 | bearish choppy low vol | 72 | +1.57 | 0.22 | 47 | 25 | 65.3 | -1.79 | 2h 15m |
| May 2024 | bullish choppy high vol | 7 | +0.63 | 0.90 | 6 | 1 | 85.7 | -1.72 | 2h 43m |
| Apr 2024 | bearish choppy high vol | 89 | -1.83 | -0.21 | 65 | 24 | 73.0 | -1.92 | 2h 31m |
| Mar 2024 | bullish trending high vol | 86 | -0.18 | -0.02 | 64 | 22 | 74.4 | -1.75 | 2h 00m |
| Feb 2024 | bullish trending low vol | 36 | +4.03 | 1.12 | 31 | 5 | 86.1 | -0.24 | 1h 31m |
| Jan 2024 | bearish choppy high vol | 70 | +0.89 | 0.13 | 50 | 20 | 71.4 | -1.24 | 2h 44m |
| Dec 2023 | bullish trending low vol | 78 | +9.43 | 1.21 | 63 | 15 | 80.8 | -0.2 | 1h 18m |
| Nov 2023 | bullish trending low vol | 76 | +7.73 | 1.02 | 65 | 11 | 85.5 | -0.41 | 1h 57m |
| Oct 2023 | bullish trending low vol | 59 | +4.54 | 0.77 | 50 | 9 | 84.7 | -1.22 | 4h 06m |
| Sep 2023 | bearish choppy low vol | 9 | -0.08 | -0.09 | 6 | 3 | 66.7 | -1.31 | 3h 55m |
| Aug 2023 | bearish choppy low vol | 60 | -0.34 | -0.06 | 32 | 28 | 53.3 | -1.31 | 1h 34m |
| Jul 2023 | bullish trending low vol | 41 | +2.13 | 0.52 | 33 | 8 | 80.5 | -2.05 | 2h 49m |
| Jun 2023 | bullish trending low vol | 79 | +0.30 | 0.04 | 59 | 20 | 74.7 | -3.33 | 2h 36m |
| May 2023 | bearish choppy low vol | 37 | +3.26 | 0.88 | 30 | 7 | 81.1 | -3.0 | 3h 51m |
| Apr 2023 | bullish trending low vol | 46 | +0.55 | 0.12 | 32 | 14 | 69.6 | -3.51 | 4h 59m |
| Mar 2023 | bullish trending high vol | 97 | -1.11 | -0.11 | 61 | 36 | 62.9 | -3.98 | 3h 50m |
| Feb 2023 | bullish trending low vol | 75 | +3.59 | 0.48 | 58 | 17 | 77.3 | -4.77 | 2h 42m |
| Jan 2023 | bullish trending low vol | 114 | +9.41 | 0.82 | 89 | 25 | 78.1 | -7.24 | 2h 48m |
| Dec 2022 | bearish trending low vol | 36 | -1.92 | -0.53 | 20 | 16 | 55.6 | -7.46 | 4h 35m |
| Nov 2022 | bearish trending high vol | 179 | -11.71 | -0.65 | 116 | 63 | 64.8 | -8.93 | 2h 54m |
| Oct 2022 | bullish choppy low vol | 40 | +3.28 | 0.82 | 32 | 8 | 80.0 | -3.74 | 2h 30m |
| Sep 2022 | bearish choppy high vol | 59 | -7.12 | -1.21 | 28 | 31 | 47.5 | -4.29 | 4h 10m |
| Aug 2022 | bullish choppy high vol | 97 | -2.95 | -0.30 | 54 | 43 | 55.7 | -1.5 | 3h 49m |
| Jul 2022 | bearish trending high vol | 98 | +6.45 | 0.66 | 79 | 19 | 80.6 | -0.46 | 2h 48m |
| Jun 2022 | bearish trending high vol | 245 | +2.73 | 0.11 | 168 | 77 | 68.6 | -1.64 | 2h 27m |
| May 2022 | bearish trending high vol | 317 | +19.07 | 0.60 | 221 | 96 | 69.7 | -1.31 | 1h 32m |
| Apr 2022 | bearish choppy high vol | 59 | +4.37 | 0.74 | 48 | 11 | 81.4 | -1.21 | 3h 12m |
| Mar 2022 | bullish choppy high vol | 64 | +8.28 | 1.29 | 59 | 5 | 92.2 | -4.33 | 2h 01m |
| Feb 2022 | bearish trending high vol | 87 | -1.60 | -0.18 | 67 | 20 | 77.0 | -4.68 | 2h 24m |
| Jan 2022 | bearish trending high vol | 148 | -6.90 | -0.47 | 83 | 65 | 56.1 | -3.88 | 2h 51m |
| Dec 2021 | bearish trending high vol | 106 | +0.75 | 0.07 | 74 | 32 | 69.8 | -2.47 | 2h 42m |
| Nov 2021 | bullish trending high vol | 70 | -0.63 | -0.09 | 47 | 23 | 67.1 | -1.77 | 2h 44m |
| Oct 2021 | bullish trending high vol | 68 | +4.01 | 0.59 | 51 | 17 | 75.0 | -0.66 | 2h 49m |
| Sep 2021 | bearish trending high vol | 259 | +1.38 | 0.05 | 172 | 87 | 66.4 | -4.49 | 2h 08m |
| Aug 2021 | bullish trending high vol | 119 | +12.41 | 1.04 | 105 | 14 | 88.2 | -4.85 | 1h 55m |
| Jul 2021 | bearish trending high vol | 108 | -2.46 | -0.23 | 69 | 39 | 63.9 | -4.82 | 3h 42m |
| Jun 2021 | bearish trending high vol | 241 | +0.28 | 0.01 | 177 | 64 | 73.4 | -5.62 | 2h 20m |
| May 2021 | bearish trending high vol | 660 | +6.98 | 0.11 | 483 | 177 | 73.2 | -8.48 | 1h 50m |
| Apr 2021 | bearish choppy high vol | 395 | +22.79 | 0.58 | 321 | 74 | 81.3 | -4.83 | 1h 17m |
| Mar 2021 | bullish choppy high vol | 170 | +14.16 | 0.83 | 138 | 32 | 81.2 | -2.47 | 2h 21m |
| Feb 2021 | bullish trending high vol | 533 | +47.57 | 0.89 | 438 | 95 | 82.2 | -1.86 | 1h 22m |
| Jan 2021 | bullish trending high vol | 547 | +50.99 | 0.93 | 451 | 96 | 82.4 | -4.35 | 1h 17m |
Yearly breakdown
| Year | Trades | Profit % | Avg % | Win | Loss | Win % | DD % | Avg dur |
|---|---|---|---|---|---|---|---|---|
| 2025 | 710 | -8.45 | -0.12 | 462 | 248 | 65.1 | -5.13 | 2h 23m |
| 2024 | 832 | +14.62 | 0.18 | 580 | 252 | 69.7 | -3.13 | 2h 13m |
| 2023 | 771 | +39.41 | 0.51 | 578 | 193 | 75.0 | -7.24 | 2h 52m |
| 2022 | 1429 | +11.98 | 0.08 | 975 | 454 | 68.2 | -8.93 | 2h 36m |
| 2021 | 3276 | +158.23 | 0.48 | 2526 | 750 | 77.1 | -8.48 | 1h 49m |
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 | |
|---|---|---|---|
| 53 | review | startup_candles_too_small | startup_candle_count is 50, but EMA(timeperiod=50) needing 3x warmup needs at least 150 candles -- so the first 100+ 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 |
| 51 | review | unthrottled_candle_processing | process_only_new_candles is False, so populate_indicators/populate_entry_trend/populate_exit_trend re-run every throttle_secs (default 5s) even though their inputs -- closed candles -- haven't changed since the last run. This wastes CPU without changing any value; if the goal is order-book-level checks, put that logic in confirm_trade_entry/custom_exit instead, which already run every loop |
ran by Ron · took s
Lookahead analysis
freqtrade lookahead-analysis: detects strategies peeking at future candles.