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 | """EMA Crossover Strategy (9/21). Developed 2021, updated 2025.""" import logging from functools import reduce import pandas_ta as ta from pandas import DataFrame from freqtrade.strategy import IntParameter, IStrategy logger = logging.getLogger(__name__) class EMAStrategy(IStrategy): INTERFACE_VERSION = 3 timeframe = "4h" can_short = False startup_candle_count: int = 60 minimal_roi = {"0": 0.12, "60": 0.08, "120": 0.04, "240": 0.02} stoploss = -0.07 trailing_stop = True trailing_stop_positive = 0.03 trailing_stop_positive_offset = 0.05 trailing_only_offset_is_reached = True ema_fast = IntParameter(5, 15, default=9, space="buy", optimize=True) ema_slow = IntParameter(15, 30, default=21, space="buy", optimize=True) ema_trend = IntParameter(40, 100, default=50, space="buy", optimize=True) def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame: dataframe["ema_fast"] = ta.ema(dataframe["close"], length=self.ema_fast.value) dataframe["ema_slow"] = ta.ema(dataframe["close"], length=self.ema_slow.value) dataframe["ema_trend"] = ta.ema(dataframe["close"], length=self.ema_trend.value) dataframe["ema_cross_up"] = ( (dataframe["ema_fast"] > dataframe["ema_slow"]) & (dataframe["ema_fast"].shift(1) <= dataframe["ema_slow"].shift(1)) ) dataframe["ema_cross_down"] = ( (dataframe["ema_fast"] < dataframe["ema_slow"]) & (dataframe["ema_fast"].shift(1) >= dataframe["ema_slow"].shift(1)) ) dataframe["volume_sma"] = dataframe["volume"].rolling(window=20).mean() return dataframe def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame: conditions = [ dataframe["ema_cross_up"], dataframe["close"] > dataframe["ema_trend"], dataframe["volume"] > dataframe["volume_sma"], ] dataframe.loc[reduce(lambda x, y: x & y, conditions), "enter_long"] = 1 return dataframe def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame: dataframe.loc[dataframe["ema_cross_down"], "exit_long"] = 1 return dataframe |
Strategy League — fixed backtest that feeds the ranking
Export report Freqtrade logsRun finished · took 23.6s
ℹ️ This strategy uses a trailing stop — freqtrade only
re-checks these once per 4h 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 →
- profit isn't statistically significant (p=1.00) — hard to tell apart from luck
- only 0% of resampled runs were profitable
- profitable in only 34% of rolling 3-month windows
- did not beat simply holding the market
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 | 3 | -0.46 | -1.53 | 0 | 3 | 0.0 | -58.52 | 65h 20m |
| Dec 2025 | bearish trending low vol | 45 | -3.99 | -0.89 | 24 | 21 | 53.3 | -58.78 | 23h 23m |
| Nov 2025 | bearish trending high vol | 35 | -3.55 | -1.01 | 20 | 15 | 57.1 | -54.21 | 18h 45m |
| Oct 2025 | bearish trending low vol | 40 | -5.21 | -1.30 | 21 | 19 | 52.5 | -50.78 | 16h 24m |
| Sep 2025 | bullish choppy low vol | 40 | -1.63 | -0.41 | 24 | 16 | 60.0 | -47.11 | 20h 48m |
| Aug 2025 | bullish choppy low vol | 54 | +3.08 | 0.57 | 41 | 13 | 75.9 | -48.33 | 18h 36m |
| Jul 2025 | bullish choppy low vol | 40 | +2.23 | 0.56 | 28 | 12 | 70.0 | -49.53 | 22h 12m |
| Jun 2025 | bearish choppy low vol | 28 | +0.21 | 0.07 | 19 | 9 | 67.9 | -49.88 | 22h 00m |
| May 2025 | bullish trending low vol | 64 | -2.76 | -0.43 | 37 | 27 | 57.8 | -49.49 | 13h 30m |
| Apr 2025 | bullish choppy low vol | 42 | -4.14 | -0.99 | 24 | 18 | 57.1 | -48.46 | 17h 26m |
| Mar 2025 | bearish trending high vol | 49 | -5.35 | -1.09 | 28 | 21 | 57.1 | -44.54 | 16h 49m |
| Feb 2025 | bearish trending low vol | 42 | -7.44 | -1.77 | 21 | 21 | 50.0 | -37.85 | 19h 31m |
| Jan 2025 | bearish choppy low vol | 60 | +2.46 | 0.41 | 46 | 14 | 76.7 | -32.99 | 12h 12m |
| Dec 2024 | bullish trending low vol | 46 | -10.92 | -2.38 | 20 | 26 | 43.5 | -32.87 | 17h 13m |
| Nov 2024 | bullish trending low vol | 52 | +5.69 | 1.09 | 43 | 9 | 82.7 | -27.58 | 12h 14m |
| Oct 2024 | bullish choppy low vol | 67 | +2.50 | 0.37 | 48 | 19 | 71.6 | -30.13 | 20h 25m |
| Sep 2024 | bearish choppy low vol | 34 | +1.95 | 0.57 | 25 | 9 | 73.5 | -33.01 | 23h 11m |
| Aug 2024 | bearish choppy high vol | 36 | +1.69 | 0.47 | 27 | 9 | 75.0 | -34.85 | 24h 47m |
| Jul 2024 | bearish trending low vol | 48 | -4.86 | -1.01 | 23 | 25 | 47.9 | -34.09 | 26h 15m |
| Jun 2024 | bearish choppy low vol | 39 | -3.69 | -0.95 | 21 | 18 | 53.8 | -29.17 | 25h 51m |
| May 2024 | bullish choppy high vol | 60 | -1.49 | -0.25 | 39 | 21 | 65.0 | -25.44 | 25h 24m |
| Apr 2024 | bearish choppy high vol | 25 | -4.92 | -1.97 | 13 | 12 | 52.0 | -24.17 | 18h 05m |
| Mar 2024 | bullish trending high vol | 50 | +2.94 | 0.59 | 40 | 10 | 80.0 | -22.69 | 8h 29m |
| Feb 2024 | bullish trending low vol | 54 | +4.88 | 0.90 | 42 | 12 | 77.8 | -27.97 | 18h 18m |
| Jan 2024 | bearish choppy high vol | 64 | -0.67 | -0.11 | 44 | 20 | 68.8 | -30.83 | 12h 49m |
| Dec 2023 | bullish trending low vol | 76 | +5.05 | 0.66 | 55 | 21 | 72.4 | -30.83 | 18h 57m |
| Nov 2023 | bullish trending low vol | 51 | -0.14 | -0.03 | 34 | 17 | 66.7 | -31.9 | 14h 35m |
| Oct 2023 | bullish trending low vol | 34 | +2.86 | 0.84 | 26 | 8 | 76.5 | -34.52 | 19h 39m |
| Sep 2023 | bearish choppy low vol | 60 | -0.66 | -0.11 | 32 | 28 | 53.3 | -36.09 | 26h 44m |
| Aug 2023 | bearish choppy low vol | 48 | -3.99 | -0.83 | 19 | 29 | 39.6 | -33.02 | 30h 40m |
| Jul 2023 | bullish trending low vol | 67 | +5.67 | 0.85 | 46 | 21 | 68.7 | -34.94 | 22h 30m |
| Jun 2023 | bullish trending low vol | 42 | -1.74 | -0.41 | 27 | 15 | 64.3 | -34.65 | 20h 51m |
| May 2023 | bearish choppy low vol | 45 | -6.76 | -1.50 | 15 | 30 | 33.3 | -33.82 | 32h 32m |
| Apr 2023 | bullish trending low vol | 87 | -8.22 | -0.94 | 50 | 37 | 57.5 | -27.23 | 19h 27m |
| Mar 2023 | bullish trending high vol | 47 | -2.12 | -0.45 | 31 | 16 | 66.0 | -19.11 | 14h 59m |
| Feb 2023 | bullish trending low vol | 57 | +1.88 | 0.33 | 42 | 15 | 73.7 | -18.54 | 13h 58m |
| Jan 2023 | bullish trending low vol | 48 | +6.48 | 1.35 | 42 | 6 | 87.5 | -24.33 | 23h 00m |
| Dec 2022 | bearish trending low vol | 31 | -2.82 | -0.91 | 12 | 19 | 38.7 | -24.53 | 27h 06m |
| Nov 2022 | bearish trending high vol | 45 | +5.26 | 1.17 | 38 | 7 | 84.4 | -26.72 | 11h 33m |
| Oct 2022 | bullish choppy low vol | 60 | -0.15 | -0.03 | 35 | 25 | 58.3 | -30.12 | 22h 20m |
| Sep 2022 | bearish choppy high vol | 58 | -5.74 | -0.99 | 34 | 24 | 58.6 | -27.33 | 13h 35m |
| Aug 2022 | bullish choppy high vol | 46 | -4.48 | -0.97 | 27 | 19 | 58.7 | -21.35 | 12h 00m |
| Jul 2022 | bearish trending high vol | 53 | +7.53 | 1.42 | 49 | 4 | 92.5 | -23.95 | 8h 54m |
| Jun 2022 | bearish trending high vol | 30 | -4.65 | -1.55 | 16 | 14 | 53.3 | -24.53 | 15h 52m |
| May 2022 | bearish trending high vol | 34 | +0.63 | 0.19 | 25 | 9 | 73.5 | -21.62 | 9h 11m |
| Apr 2022 | bearish choppy high vol | 39 | -5.93 | -1.52 | 19 | 20 | 48.7 | -20.25 | 20h 55m |
| Mar 2022 | bullish choppy high vol | 54 | -0.49 | -0.09 | 38 | 16 | 70.4 | -18.15 | 14h 18m |
| Feb 2022 | bearish trending high vol | 51 | +4.36 | 0.86 | 43 | 8 | 84.3 | -18.08 | 10h 54m |
| Jan 2022 | bearish trending high vol | 20 | -0.14 | -0.07 | 14 | 6 | 70.0 | -18.46 | 12h 24m |
| Dec 2021 | bearish trending high vol | 37 | -2.74 | -0.74 | 24 | 13 | 64.9 | -18.74 | 16h 45m |
| Nov 2021 | bullish trending high vol | 63 | -2.56 | -0.41 | 41 | 22 | 65.1 | -17.8 | 13h 31m |
| Oct 2021 | bullish trending high vol | 72 | +4.56 | 0.63 | 54 | 18 | 75.0 | -16.98 | 16h 13m |
| Sep 2021 | bearish trending high vol | 47 | -0.15 | -0.03 | 35 | 12 | 74.5 | -17.81 | 9h 47m |
| Aug 2021 | bullish trending high vol | 56 | +1.41 | 0.25 | 43 | 13 | 76.8 | -18.44 | 12h 26m |
| Jul 2021 | bearish trending high vol | 31 | -2.17 | -0.70 | 19 | 12 | 61.3 | -20.5 | 9h 10m |
| Jun 2021 | bearish trending high vol | 28 | -4.45 | -1.59 | 16 | 12 | 57.1 | -17.48 | 15h 34m |
| May 2021 | bearish trending high vol | 43 | -3.57 | -0.83 | 27 | 16 | 62.8 | -14.16 | 4h 45m |
| Apr 2021 | bearish choppy high vol | 38 | -2.76 | -0.73 | 25 | 13 | 65.8 | -9.71 | 8h 13m |
| Mar 2021 | bullish choppy high vol | 64 | -0.02 | -0.00 | 45 | 19 | 70.3 | -8.26 | 17h 08m |
| Feb 2021 | bullish trending high vol | 32 | -0.76 | -0.24 | 22 | 10 | 68.8 | -6.43 | 7h 38m |
| Jan 2021 | bullish trending high vol | 57 | -2.13 | -0.37 | 34 | 23 | 59.6 | -6.01 | 7h 26m |
Yearly breakdown
| Year | Trades | Profit % | Avg % | Win | Loss | Win % | DD % | Avg dur |
|---|---|---|---|---|---|---|---|---|
| 2026 | 3 | -0.46 | -1.53 | 0 | 3 | 0.0 | -58.52 | 65h 20m |
| 2025 | 539 | -26.09 | -0.48 | 333 | 206 | 61.8 | -58.78 | 17h 57m |
| 2024 | 575 | -6.90 | -0.12 | 385 | 190 | 67.0 | -34.85 | 19h 03m |
| 2023 | 662 | -1.69 | -0.02 | 419 | 243 | 63.3 | -36.09 | 21h 15m |
| 2022 | 521 | -6.62 | -0.13 | 350 | 171 | 67.2 | -30.12 | 14h 46m |
| 2021 | 568 | -15.34 | -0.27 | 385 | 183 | 67.8 | -20.5 | 11h 58m |
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.