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 | # --- Do not remove these libs --- from freqtrade.strategy.interface import IStrategy from functools import reduce from pandas import DataFrame # -------------------------------- import talib.abstract as ta import freqtrade.vendor.qtpylib.indicators as qtpylib from freqtrade.strategy import DecimalParameter, IntParameter def EWO(dataframe, ema_length=5, ema2_length=35): df = dataframe.copy() ema1 = ta.EMA(df, timeperiod=ema_length) ema2 = ta.EMA(df, timeperiod=ema2_length) emadif = (ema1 - ema2) / df['close'] * 100 return emadif class ElliotV8HO(IStrategy): INTERFACE_VERSION = 3 # Sell hyperspace params: v1 # sell_params = { # "base_nb_candles_sell": 24, # "high_offset": 0.991, # "high_offset_2": 0.997 # } # Sell hyperspace params: v5 # sell_params = { # "base_nb_candles_sell": 30, # "high_offset": 0.973, # "high_offset_2": 1.121, # } # Sell hyperspace params: v6 sell_params = {'base_nb_candles_sell': 24, 'high_offset': 1.011, 'high_offset_2': 0.997} # Buy hyperspace params: v1 buy_params = {'base_nb_candles_buy': 19, 'ewo_high': 5.417, 'ewo_low': -17.251, 'low_offset': 0.983, 'rsi_buy': 61} # ROI table: minimal_roi = {'0': 0.08, '40': 0.032, '87': 0.016} # Stoploss: stoploss = -0.189 # SMAOffset base_nb_candles_buy = IntParameter(15, 60, default=buy_params['base_nb_candles_buy'], space='buy', optimize=True) base_nb_candles_sell = IntParameter(15, 60, default=sell_params['base_nb_candles_sell'], space='sell', optimize=True) low_offset = DecimalParameter(0.9, 0.99, default=buy_params['low_offset'], space='buy', optimize=True) high_offset = DecimalParameter(0.9, 1.1, default=sell_params['high_offset'], space='sell', optimize=True) high_offset_2 = DecimalParameter(0.99, 1.2, default=sell_params['high_offset_2'], space='sell', optimize=True) # Protection fast_ewo = 50 slow_ewo = 200 ewo_low = DecimalParameter(-20.0, -15.0, default=buy_params['ewo_low'], space='buy', optimize=True) ewo_high = DecimalParameter(1.0, 8.0, default=buy_params['ewo_high'], space='buy', optimize=True) rsi_buy = IntParameter(25, 75, default=buy_params['rsi_buy'], space='buy', optimize=True) # Trailing stop: trailing_stop = True trailing_stop_positive = 0.005 trailing_stop_positive_offset = 0.02 trailing_only_offset_is_reached = True # Sell signal use_exit_signal = True exit_profit_only = True exit_profit_offset = 0.01 ignore_roi_if_entry_signal = False # Optional order time in force. # 'sell': 'ioc' order_time_in_force = {'entry': 'gtc', 'exit': 'gtc'} # Optimal timeframe for the strategy timeframe = '5m' informative_timeframe = '1h' process_only_new_candles = True startup_candle_count = 400 plot_config = {'main_plot': {'ma_buy': {'color': 'orange'}, 'ma_sell': {'color': 'orange'}}} use_custom_stoploss = False def informative_pairs(self): pairs = self.dp.current_whitelist() informative_pairs = [(pair, self.informative_timeframe) for pair in pairs] return informative_pairs def get_informative_indicators(self, metadata: dict): dataframe = self.dp.get_pair_dataframe(pair=metadata['pair'], timeframe=self.informative_timeframe) return dataframe def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame: if self.config['runmode'].value == 'hyperopt': # Calculate all ma_buy values for val in self.base_nb_candles_buy.range: dataframe[f'ma_buy_{val}'] = ta.EMA(dataframe, timeperiod=val) # Calculate all ma_sell values for val in self.base_nb_candles_sell.range: dataframe[f'ma_sell_{val}'] = ta.EMA(dataframe, timeperiod=val) else: dataframe[f'ma_buy_{self.base_nb_candles_buy.value}'] = ta.EMA(dataframe, timeperiod=self.base_nb_candles_buy.value) dataframe[f'ma_sell_{self.base_nb_candles_sell.value}'] = ta.EMA(dataframe, timeperiod=self.base_nb_candles_sell.value) dataframe['hma_50'] = qtpylib.hull_moving_average(dataframe['close'], window=50) dataframe['sma_9'] = ta.SMA(dataframe, timeperiod=9) # Elliot dataframe['EWO'] = EWO(dataframe, self.fast_ewo, self.slow_ewo) # RSI dataframe['rsi'] = ta.RSI(dataframe, timeperiod=14) dataframe['rsi_fast'] = ta.RSI(dataframe, timeperiod=4) dataframe['rsi_slow'] = ta.RSI(dataframe, timeperiod=20) return dataframe def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame: conditions = [] conditions.append((dataframe['rsi_fast'] < 35) & (dataframe['close'] < dataframe[f'ma_buy_{self.base_nb_candles_buy.value}'] * self.low_offset.value) & (dataframe['EWO'] > self.ewo_high.value) & (dataframe['rsi'] < self.rsi_buy.value) & (dataframe['volume'] > 0) & (dataframe['close'] < dataframe[f'ma_sell_{self.base_nb_candles_sell.value}'] * self.high_offset.value)) conditions.append((dataframe['rsi_fast'] < 35) & (dataframe['close'] < dataframe[f'ma_buy_{self.base_nb_candles_buy.value}'] * self.low_offset.value) & (dataframe['EWO'] < self.ewo_low.value) & (dataframe['volume'] > 0) & (dataframe['close'] < dataframe[f'ma_sell_{self.base_nb_candles_sell.value}'] * self.high_offset.value)) if conditions: dataframe.loc[reduce(lambda x, y: x | y, conditions), 'enter_long'] = 1 return dataframe def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame: conditions = [] conditions.append((dataframe['close'] > dataframe['hma_50']) & (dataframe['close'] > dataframe[f'ma_sell_{self.base_nb_candles_sell.value}'] * self.high_offset_2.value) & (dataframe['rsi'] > 50) & (dataframe['volume'] > 0) & (dataframe['rsi_fast'] > dataframe['rsi_slow']) | (dataframe['close'] < dataframe['hma_50']) & (dataframe['close'] > dataframe[f'ma_sell_{self.base_nb_candles_sell.value}'] * self.high_offset.value) & (dataframe['volume'] > 0) & (dataframe['rsi_fast'] > dataframe['rsi_slow'])) if conditions: dataframe.loc[reduce(lambda x, y: x | y, conditions), 'exit_long'] = 1 return dataframe |
Strategy League — fixed backtest that feeds the ranking
Export report Freqtrade logsRun finished · took 279.2s
ℹ️ 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 →
- did not beat simply holding the market
- statistically significant edge (p=0.00)
- 100% of resampled runs stayed profitable
- profitable across 75% 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 | 1 | -1.91 | -19.05 | 0 | 1 | 0.0 | -1.37 | 255h 55m |
| Nov 2025 | bearish trending high vol | 41 | +4.33 | 1.05 | 39 | 2 | 95.1 | -1.06 | 4h 24m |
| Oct 2025 | bearish trending low vol | 41 | +3.99 | 0.97 | 37 | 4 | 90.2 | -4.22 | 5h 27m |
| Sep 2025 | bullish choppy low vol | 7 | +1.20 | 1.72 | 7 | 0 | 100.0 | -2.87 | 6h 19m |
| Jul 2025 | bullish choppy low vol | 6 | +0.90 | 1.50 | 6 | 0 | 100.0 | -3.22 | 2h 14m |
| Jun 2025 | bearish choppy low vol | 7 | -0.91 | -1.30 | 6 | 1 | 85.7 | -3.28 | 5h 31m |
| May 2025 | bullish trending low vol | 2 | +0.36 | 1.78 | 2 | 0 | 100.0 | -2.99 | 0h 58m |
| Apr 2025 | bullish choppy low vol | 3 | -1.60 | -5.34 | 2 | 1 | 66.7 | -3.1 | 44h 27m |
| Mar 2025 | bearish trending high vol | 6 | -3.12 | -5.20 | 4 | 2 | 66.7 | -2.52 | 7h 17m |
| Feb 2025 | bearish trending low vol | 2 | +0.42 | 2.11 | 2 | 0 | 100.0 | -1.34 | 0h 58m |
| Jan 2025 | bearish choppy low vol | 1 | +0.17 | 1.74 | 1 | 0 | 100.0 | -1.41 | 0h 55m |
| Dec 2024 | bullish trending low vol | 46 | +1.61 | 0.35 | 43 | 3 | 93.5 | -1.74 | 7h 45m |
| Nov 2024 | bullish trending low vol | 85 | +11.93 | 1.40 | 84 | 1 | 98.8 | -0.94 | 4h 38m |
| Sep 2024 | bearish choppy low vol | 1 | +0.20 | 2.03 | 1 | 0 | 100.0 | -1.0 | 1h 05m |
| Aug 2024 | bearish choppy high vol | 4 | +0.58 | 1.44 | 4 | 0 | 100.0 | -1.26 | 1h 14m |
| Jun 2024 | bearish choppy low vol | 5 | +0.90 | 1.80 | 5 | 0 | 100.0 | -1.62 | 0h 23m |
| May 2024 | bullish choppy high vol | 1 | +0.10 | 1.00 | 1 | 0 | 100.0 | -1.69 | 8h 55m |
| Apr 2024 | bearish choppy high vol | 7 | -0.79 | -1.12 | 6 | 1 | 85.7 | -2.08 | 0h 48m |
| Mar 2024 | bullish trending high vol | 22 | -2.29 | -1.04 | 19 | 3 | 86.4 | -2.33 | 4h 36m |
| Feb 2024 | bullish trending low vol | 9 | +1.58 | 1.75 | 9 | 0 | 100.0 | -0.07 | 1h 04m |
| Jan 2024 | bearish choppy high vol | 14 | +0.38 | 0.27 | 13 | 1 | 92.9 | -0.78 | 16h 20m |
| Dec 2023 | bullish trending low vol | 23 | +3.66 | 1.59 | 23 | 0 | 100.0 | 0.0 | 11h 42m |
| Nov 2023 | bullish trending low vol | 10 | +1.49 | 1.49 | 10 | 0 | 100.0 | 0.0 | 11h 20m |
| Oct 2023 | bullish trending low vol | 2 | +0.34 | 1.71 | 2 | 0 | 100.0 | 0.0 | 10h 20m |
| Aug 2023 | bearish choppy low vol | 2 | +0.32 | 1.61 | 2 | 0 | 100.0 | 0.0 | 7h 00m |
| Jul 2023 | bullish trending low vol | 12 | +2.15 | 1.79 | 12 | 0 | 100.0 | -0.3 | 15h 07m |
| Jun 2023 | bullish trending low vol | 18 | +1.56 | 0.87 | 17 | 1 | 94.4 | -1.08 | 7h 04m |
| Apr 2023 | bullish trending low vol | 3 | +0.49 | 1.63 | 3 | 0 | 100.0 | -1.15 | 2h 42m |
| Mar 2023 | bullish trending high vol | 6 | -0.98 | -1.64 | 5 | 1 | 83.3 | -1.28 | 26h 29m |
| Feb 2023 | bullish trending low vol | 4 | +0.55 | 1.37 | 4 | 0 | 100.0 | -0.99 | 16h 41m |
| Jan 2023 | bullish trending low vol | 31 | +6.26 | 2.02 | 31 | 0 | 100.0 | -3.6 | 3h 21m |
| Nov 2022 | bearish trending high vol | 26 | +2.88 | 1.11 | 25 | 1 | 96.2 | -5.52 | 6h 18m |
| Oct 2022 | bullish choppy low vol | 6 | -0.97 | -1.61 | 5 | 1 | 83.3 | -5.11 | 24h 16m |
| Sep 2022 | bearish choppy high vol | 2 | -1.75 | -8.72 | 1 | 1 | 50.0 | -4.5 | 58h 02m |
| Aug 2022 | bullish choppy high vol | 11 | -5.96 | -5.42 | 7 | 4 | 63.6 | -3.91 | 29h 43m |
| Jul 2022 | bearish trending high vol | 27 | +4.58 | 1.70 | 27 | 0 | 100.0 | -3.13 | 3h 02m |
| Jun 2022 | bearish trending high vol | 26 | -5.72 | -2.20 | 21 | 5 | 80.8 | -4.15 | 26h 10m |
| May 2022 | bearish trending high vol | 26 | +2.28 | 0.88 | 25 | 1 | 96.2 | -0.81 | 14h 08m |
| Apr 2022 | bearish choppy high vol | 4 | +0.64 | 1.61 | 4 | 0 | 100.0 | 0.0 | 7h 06m |
| Mar 2022 | bullish choppy high vol | 4 | +0.59 | 1.47 | 4 | 0 | 100.0 | -0.14 | 3h 12m |
| Feb 2022 | bearish trending high vol | 21 | +3.88 | 1.85 | 20 | 1 | 95.2 | -1.8 | 1h 22m |
| Jan 2022 | bearish trending high vol | 5 | -1.30 | -2.60 | 4 | 1 | 80.0 | -2.08 | 108h 22m |
| Dec 2021 | bearish trending high vol | 12 | +0.37 | 0.32 | 11 | 1 | 91.7 | -1.79 | 7h 22m |
| Nov 2021 | bullish trending high vol | 5 | +0.75 | 1.51 | 5 | 0 | 100.0 | -1.76 | 13h 10m |
| Oct 2021 | bullish trending high vol | 8 | -2.88 | -3.61 | 6 | 2 | 75.0 | -1.81 | 12h 11m |
| Sep 2021 | bearish trending high vol | 39 | +5.34 | 1.37 | 38 | 1 | 97.4 | -1.39 | 5h 02m |
| Aug 2021 | bullish trending high vol | 30 | +1.93 | 0.64 | 28 | 2 | 93.3 | -1.51 | 5h 26m |
| Jul 2021 | bearish trending high vol | 18 | +0.71 | 0.39 | 17 | 1 | 94.4 | -1.4 | 28h 34m |
| Jun 2021 | bearish trending high vol | 20 | -0.59 | -0.30 | 18 | 2 | 90.0 | -0.92 | 6h 41m |
| May 2021 | bearish trending high vol | 238 | +55.25 | 2.32 | 233 | 5 | 97.9 | -1.62 | 1h 40m |
| Apr 2021 | bearish choppy high vol | 124 | +14.10 | 1.14 | 120 | 4 | 96.8 | -2.04 | 2h 59m |
| Mar 2021 | bullish choppy high vol | 48 | +2.54 | 0.53 | 45 | 3 | 93.8 | -1.75 | 4h 22m |
| Feb 2021 | bullish trending high vol | 171 | +13.69 | 0.80 | 163 | 8 | 95.3 | -2.69 | 3h 54m |
| Jan 2021 | bullish trending high vol | 257 | +36.38 | 1.42 | 248 | 9 | 96.5 | -3.08 | 2h 21m |
Yearly breakdown
| Year | Trades | Profit % | Avg % | Win | Loss | Win % | DD % | Avg dur |
|---|---|---|---|---|---|---|---|---|
| 2025 | 117 | +3.83 | 0.32 | 106 | 11 | 90.6 | -4.22 | 8h 01m |
| 2024 | 194 | +14.20 | 0.73 | 185 | 9 | 95.4 | -2.33 | 5h 44m |
| 2023 | 111 | +15.84 | 1.43 | 109 | 2 | 98.2 | -3.6 | 9h 35m |
| 2022 | 158 | -0.85 | -0.05 | 143 | 15 | 90.5 | -5.52 | 15h 47m |
| 2021 | 970 | +127.59 | 1.32 | 932 | 38 | 96.1 | -3.08 | 3h 37m |
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 | |
|---|---|---|---|
| 72 | review | unused_informative | informative_pairs() declares an extra timeframe, but nothing merges it into the dataframe (no merge_informative_pair, no @informative) -- that data is fetched and discarded, and any higher-timeframe filter you think is running isn't |
ran by Ron · took s
Lookahead analysis
freqtrade lookahead-analysis: detects strategies peeking at future candles.