5 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 | # --- Do not remove these libs --- from freqtrade.strategy.interface import IStrategy from typing import Dict, List from functools import reduce from pandas import DataFrame # -------------------------------- import talib.abstract as ta import numpy as np import freqtrade.vendor.qtpylib.indicators as qtpylib import datetime from technical.util import resample_to_interval, resampled_merge from datetime import datetime, timedelta from freqtrade.persistence import Trade from freqtrade.strategy import stoploss_from_open, merge_informative_pair, DecimalParameter, IntParameter, CategoricalParameter import technical.indicators as ftt # - Credits - # tirail: SMAOffset idea # rextea: EWO idea # Lambo 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 MultiOffsetLamboV0(IStrategy): INTERFACE_VERSION = 3 # Hyperopt Result # Buy hyperspace params: buy_params = {'base_nb_candles_buy': 16, 'ewo_high': 5.638, 'ewo_low': -19.993} # Sell hyperspace params: sell_params = {'base_nb_candles_sell': 49} # ROI table: minimal_roi = {'0': 0.01} # Stoploss: stoploss = -0.5 # Offset base_nb_candles_buy = IntParameter(5, 80, default=20, load=True, space='buy', optimize=True) base_nb_candles_sell = IntParameter(5, 80, default=20, load=True, space='sell', optimize=True) low_offset_sma = DecimalParameter(0.9, 0.99, default=0.958, load=True, space='buy', optimize=True) high_offset_sma = DecimalParameter(0.99, 1.1, default=1.012, load=True, space='sell', optimize=True) low_offset_ema = DecimalParameter(0.9, 0.99, default=0.958, load=True, space='buy', optimize=True) high_offset_ema = DecimalParameter(0.99, 1.1, default=1.012, load=True, space='sell', optimize=True) low_offset_trima = DecimalParameter(0.9, 0.99, default=0.958, load=True, space='buy', optimize=True) high_offset_trima = DecimalParameter(0.99, 1.1, default=1.012, load=True, space='sell', optimize=True) low_offset_t3 = DecimalParameter(0.9, 0.99, default=0.958, load=True, space='buy', optimize=True) high_offset_t3 = DecimalParameter(0.99, 1.1, default=1.012, load=True, space='sell', optimize=True) low_offset_kama = DecimalParameter(0.9, 0.99, default=0.958, load=True, space='buy', optimize=True) high_offset_kama = DecimalParameter(0.99, 1.1, default=1.012, load=True, space='sell', optimize=True) # Protection ewo_low = DecimalParameter(-20.0, -8.0, default=-20.0, load=True, space='buy', optimize=True) ewo_high = DecimalParameter(2.0, 12.0, default=6.0, load=True, space='buy', optimize=True) fast_ewo = IntParameter(10, 50, default=50, load=True, space='buy', optimize=False) slow_ewo = IntParameter(100, 200, default=200, load=True, space='buy', optimize=False) # MA list ma_types = ['sma', 'ema', 'trima', 't3', 'kama'] ma_map = {'sma': {'low_offset': low_offset_sma.value, 'high_offset': high_offset_sma.value, 'calculate': ta.SMA}, 'ema': {'low_offset': low_offset_ema.value, 'high_offset': high_offset_ema.value, 'calculate': ta.EMA}, 'trima': {'low_offset': low_offset_trima.value, 'high_offset': high_offset_trima.value, 'calculate': ta.TRIMA}, 't3': {'low_offset': low_offset_t3.value, 'high_offset': high_offset_t3.value, 'calculate': ta.T3}, 'kama': {'low_offset': low_offset_kama.value, 'high_offset': high_offset_kama.value, 'calculate': ta.KAMA}} # Trailing stop: trailing_stop = False trailing_stop_positive = 0.001 trailing_stop_positive_offset = 0.01 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 = True # Optimal timeframe for the strategy timeframe = '5m' informative_timeframe = '1h' use_exit_signal = True exit_profit_only = False process_only_new_candles = True startup_candle_count = 30 plot_config = {'main_plot': {'ma_offset_buy': {'color': 'orange'}, 'ma_offset_sell': {'color': 'orange'}}} use_custom_stoploss = False def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame: # Offset for i in self.ma_types: dataframe[f'{i}_offset_buy'] = self.ma_map[f'{i}']['calculate'](dataframe, self.base_nb_candles_buy.value) * self.ma_map[f'{i}']['low_offset'] dataframe[f'{i}_offset_sell'] = self.ma_map[f'{i}']['calculate'](dataframe, self.base_nb_candles_sell.value) * self.ma_map[f'{i}']['high_offset'] # Elliot dataframe['EWO'] = EWO(dataframe, self.fast_ewo.value, self.slow_ewo.value) return dataframe def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame: conditions = [] for i in self.ma_types: conditions.append((dataframe['close'] < dataframe[f'{i}_offset_buy']) & ((dataframe['EWO'] < self.ewo_low.value) | (dataframe['EWO'] > self.ewo_high.value)) & (dataframe['volume'] > 0)) 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 = [] for i in self.ma_types: conditions.append((dataframe['close'] > dataframe[f'{i}_offset_sell']) & (dataframe['volume'] > 0)) 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 270.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 →
- did not beat simply holding the market
- statistically significant edge (p=0.00)
- 100% of resampled runs stayed profitable
- profitable across 73% 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 |
|---|---|---|---|---|---|---|---|---|---|
| Nov 2025 | bearish trending high vol | 26 | +0.93 | 0.36 | 23 | 3 | 88.5 | -0.31 | 0h 47m |
| Oct 2025 | bearish trending low vol | 21 | +16.87 | 8.03 | 21 | 0 | 100.0 | -0.12 | 0h 28m |
| Sep 2025 | bullish choppy low vol | 2 | +0.25 | 1.23 | 2 | 0 | 100.0 | -0.23 | 0h 42m |
| Jun 2025 | bearish choppy low vol | 1 | -0.19 | -1.85 | 0 | 1 | 0.0 | -0.3 | 7h 35m |
| May 2025 | bullish trending low vol | 1 | +0.10 | 1.00 | 1 | 0 | 100.0 | -0.2 | 0h 05m |
| Apr 2025 | bullish choppy low vol | 1 | -0.46 | -4.60 | 0 | 1 | 0.0 | -0.26 | 4h 40m |
| Mar 2025 | bearish trending high vol | 2 | +0.20 | 1.00 | 2 | 0 | 100.0 | -0.06 | 0h 12m |
| Dec 2024 | bullish trending low vol | 18 | +1.33 | 0.74 | 15 | 3 | 83.3 | -0.28 | 1h 11m |
| Nov 2024 | bullish trending low vol | 41 | +3.26 | 0.80 | 36 | 5 | 87.8 | -1.98 | 1h 04m |
| Apr 2024 | bearish choppy high vol | 1 | -2.07 | -20.70 | 0 | 1 | 0.0 | -2.03 | 5h 00m |
| Mar 2024 | bullish trending high vol | 3 | +0.03 | 0.09 | 2 | 1 | 66.7 | -0.96 | 2h 03m |
| Feb 2024 | bullish trending low vol | 1 | +0.03 | 0.33 | 1 | 0 | 100.0 | -0.92 | 0h 05m |
| Jan 2024 | bearish choppy high vol | 3 | -0.39 | -1.29 | 1 | 2 | 33.3 | -0.99 | 2h 45m |
| Dec 2023 | bullish trending low vol | 8 | +0.87 | 1.09 | 8 | 0 | 100.0 | -1.15 | 0h 14m |
| Nov 2023 | bullish trending low vol | 2 | +0.09 | 0.44 | 1 | 1 | 50.0 | -1.2 | 2h 40m |
| Aug 2023 | bearish choppy low vol | 6 | -1.23 | -2.05 | 5 | 1 | 83.3 | -1.32 | 1h 42m |
| Jul 2023 | bullish trending low vol | 8 | +1.03 | 1.29 | 8 | 0 | 100.0 | 0.0 | 0h 58m |
| Jun 2023 | bullish trending low vol | 7 | +0.79 | 1.13 | 7 | 0 | 100.0 | 0.0 | 0h 11m |
| Apr 2023 | bullish trending low vol | 2 | +0.20 | 1.00 | 2 | 0 | 100.0 | 0.0 | 0h 25m |
| Mar 2023 | bullish trending high vol | 2 | +0.20 | 1.00 | 2 | 0 | 100.0 | -0.03 | 0h 32m |
| Feb 2023 | bullish trending low vol | 1 | +0.10 | 1.00 | 1 | 0 | 100.0 | -0.09 | 0h 40m |
| Jan 2023 | bullish trending low vol | 14 | +1.07 | 0.77 | 10 | 4 | 71.4 | -0.25 | 1h 38m |
| Nov 2022 | bearish trending high vol | 12 | +1.10 | 0.92 | 11 | 1 | 91.7 | -0.44 | 0h 48m |
| Oct 2022 | bullish choppy low vol | 9 | +1.22 | 1.36 | 9 | 0 | 100.0 | -0.9 | 0h 43m |
| Sep 2022 | bearish choppy high vol | 1 | -0.34 | -3.39 | 0 | 1 | 0.0 | -0.96 | 7h 05m |
| Aug 2022 | bullish choppy high vol | 4 | -1.19 | -2.97 | 2 | 2 | 50.0 | -0.77 | 4h 11m |
| Jul 2022 | bearish trending high vol | 7 | +0.10 | 0.15 | 5 | 2 | 71.4 | -0.15 | 1h 41m |
| Jun 2022 | bearish trending high vol | 11 | +0.61 | 0.56 | 9 | 2 | 81.8 | -0.27 | 1h 23m |
| May 2022 | bearish trending high vol | 11 | +0.85 | 0.78 | 10 | 1 | 90.9 | -0.35 | 0h 48m |
| Feb 2022 | bearish trending high vol | 11 | +1.74 | 1.58 | 11 | 0 | 100.0 | -0.48 | 0h 35m |
| Jan 2022 | bearish trending high vol | 1 | +0.10 | 0.99 | 1 | 0 | 100.0 | -0.9 | 0h 10m |
| Dec 2021 | bearish trending high vol | 3 | -0.88 | -2.93 | 1 | 2 | 33.3 | -0.96 | 4h 12m |
| Nov 2021 | bullish trending high vol | 3 | +0.29 | 0.96 | 3 | 0 | 100.0 | -0.58 | 0h 08m |
| Oct 2021 | bullish trending high vol | 3 | -1.09 | -3.62 | 1 | 2 | 33.3 | -0.63 | 4h 25m |
| Sep 2021 | bearish trending high vol | 11 | +0.89 | 0.81 | 10 | 1 | 90.9 | -0.07 | 0h 36m |
| Aug 2021 | bullish trending high vol | 10 | +1.03 | 1.03 | 10 | 0 | 100.0 | -0.02 | 0h 26m |
| Jul 2021 | bearish trending high vol | 4 | +0.04 | 0.11 | 2 | 2 | 50.0 | -0.08 | 3h 09m |
| Jun 2021 | bearish trending high vol | 10 | +1.08 | 1.08 | 10 | 0 | 100.0 | 0.0 | 0h 18m |
| May 2021 | bearish trending high vol | 119 | +48.09 | 4.04 | 115 | 4 | 96.6 | -0.56 | 0h 29m |
| Apr 2021 | bearish choppy high vol | 65 | +6.95 | 1.07 | 58 | 7 | 89.2 | -0.67 | 0h 51m |
| Mar 2021 | bullish choppy high vol | 24 | +2.12 | 0.88 | 22 | 2 | 91.7 | -0.2 | 0h 37m |
| Feb 2021 | bullish trending high vol | 81 | +5.52 | 0.68 | 74 | 7 | 91.4 | -3.13 | 0h 44m |
| Jan 2021 | bullish trending high vol | 133 | +11.44 | 0.86 | 122 | 11 | 91.7 | -3.52 | 0h 46m |
Yearly breakdown
| Year | Trades | Profit % | Avg % | Win | Loss | Win % | DD % | Avg dur |
|---|---|---|---|---|---|---|---|---|
| 2025 | 54 | +17.70 | 3.28 | 49 | 5 | 90.7 | -0.31 | 0h 49m |
| 2024 | 67 | +2.19 | 0.33 | 55 | 12 | 82.1 | -2.03 | 1h 16m |
| 2023 | 50 | +3.12 | 0.63 | 44 | 6 | 88.0 | -1.32 | 1h 02m |
| 2022 | 67 | +4.19 | 0.63 | 58 | 9 | 86.6 | -0.96 | 1h 14m |
| 2021 | 466 | +75.48 | 1.62 | 428 | 38 | 91.8 | -3.52 | 0h 44m |
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-bias patterns detected
ran by Ron · took s
Lookahead analysis
freqtrade lookahead-analysis: detects strategies peeking at future candles.