2 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 | """ BtcTrendPassive — Sprint 7 winning strategy The simplest strategy that empirically beat 7 sprint of complex alternatives: ENTRY: Long when BTC daily MA200 trending up AND coin's own trend bullish EXIT: When BTC regime ends OR coin's trend breaks OR -10% stop loss Validated: - Sprint 7 Test 1 (4y full): Sharpe 0.3-0.6 on top 5 coins - Beats single-coin + complex strategies - Mütevazı edge but robust + understandable Universe: BTC, ETH, SOL, BNB, XRP (top 5 by Sharpe in Sprint 7) Timeframe: 4h (daily-equivalent response, intra-candle granularity) Position sizing: equal weight 20% per coin (5 coins → 100% when full bull) Risk overlay: - Stop loss: -10% per trade - ROI exits: avoid premature, let trends run (15%/10%/5%) - Trailing stop: lock gains after +10% """ from datetime import datetime from typing import Optional import numpy as np import pandas as pd import talib.abstract as ta from pandas import DataFrame from freqtrade.strategy import IStrategy class BtcTrendPassive(IStrategy): INTERFACE_VERSION = 3 timeframe = '4h' can_short = False # spot for paper trade, can enable futures later process_only_new_candles = True use_exit_signal = True exit_profit_only = False ignore_roi_if_entry_signal = False startup_candle_count = 200 # need MA200 # ---- Risk parameters (let trends run, hard stop) ---- minimal_roi = { "0": 0.15, # take 15% if available immediately "1440": 0.10, # 10% after 1 day "4320": 0.05, # 5% after 3 days "10080": 0, # break even after 1 week } stoploss = -0.10 # -10% hard stop trailing_stop = True trailing_stop_positive = 0.03 # trail at +3% drawdown from peak trailing_stop_positive_offset = 0.10 # only after +10% profit trailing_only_offset_is_reached = True # ---- Inform pairs (BTC trend regime) ---- def informative_pairs(self): return [("BTC/USDT", self.timeframe)] def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame: # Own coin's indicators dataframe['ma_50'] = ta.SMA(dataframe, timeperiod=50) dataframe['ma_100'] = ta.SMA(dataframe, timeperiod=100) dataframe['rsi'] = ta.RSI(dataframe, timeperiod=14) # Volume sanity (24h average) dataframe['vol_avg_24'] = dataframe['volume'].rolling(24).mean() # BTC regime indicator (informative pair) try: from freqtrade.data.dataprovider import DataProvider btc = self.dp.get_pair_dataframe(pair="BTC/USDT", timeframe=self.timeframe) btc['btc_ma_200'] = ta.SMA(btc, timeperiod=200) btc['btc_bull_regime'] = (btc['close'] > btc['btc_ma_200']).astype(int) # Merge BTC regime onto our dataframe (latest known) btc_lite = btc[['date', 'btc_bull_regime', 'close', 'btc_ma_200']].rename( columns={'close': 'btc_close', 'btc_ma_200': 'btc_ma_200'} ) dataframe = dataframe.merge(btc_lite, on='date', how='left') dataframe['btc_bull_regime'] = dataframe['btc_bull_regime'].ffill().fillna(0) except Exception: # Fallback: assume bull (skip regime filter — not ideal but graceful) dataframe['btc_bull_regime'] = 1 return dataframe def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame: dataframe.loc[ ( (dataframe['btc_bull_regime'] == 1) # BTC > MA(200): bull regime & (dataframe['close'] > dataframe['ma_50']) # coin's own trend up & (dataframe['rsi'] < 70) # not overbought & (dataframe['volume'] > 0) # liquidity check & (dataframe['vol_avg_24'] > 0) ), 'enter_long' ] = 1 return dataframe def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame: dataframe.loc[ ( (dataframe['btc_bull_regime'] == 0) # BTC dropped below MA(200): regime exit | (dataframe['close'] < dataframe['ma_100']) # coin trend break ), 'exit_long' ] = 1 return dataframe |
Strategy League — fixed backtest that feeds the ranking
Export report Freqtrade logsRun finished · took 23.0s
ℹ️ 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 →
- did not beat simply holding the market
- 96% 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 |
|---|---|---|---|---|---|---|---|---|---|
| Dec 2025 | bearish trending low vol | 24 | -4.97 | -2.07 | 0 | 24 | 0.0 | -29.19 | 6h 20m |
| Oct 2025 | bearish trending low vol | 54 | -7.83 | -1.45 | 15 | 39 | 27.8 | -27.19 | 50h 31m |
| Sep 2025 | bullish choppy low vol | 53 | -3.32 | -0.62 | 19 | 34 | 35.8 | -24.03 | 52h 54m |
| Aug 2025 | bullish choppy low vol | 78 | -4.51 | -0.58 | 31 | 47 | 39.7 | -22.69 | 33h 05m |
| Jul 2025 | bullish choppy low vol | 105 | +18.07 | 1.72 | 61 | 44 | 58.1 | -29.54 | 74h 33m |
| Jun 2025 | bearish choppy low vol | 58 | -4.85 | -0.84 | 13 | 45 | 22.4 | -28.97 | 31h 23m |
| May 2025 | bullish trending low vol | 100 | -1.05 | -0.10 | 39 | 61 | 39.0 | -28.16 | 74h 26m |
| Apr 2025 | bullish choppy low vol | 70 | +7.28 | 1.04 | 35 | 35 | 50.0 | -31.69 | 50h 38m |
| Mar 2025 | bearish trending high vol | 23 | -6.58 | -2.86 | 3 | 20 | 13.0 | -28.72 | 36h 31m |
| Feb 2025 | bearish trending low vol | 7 | -2.84 | -4.06 | 0 | 7 | 0.0 | -26.07 | 38h 51m |
| Jan 2025 | bearish choppy low vol | 114 | -33.94 | -2.98 | 18 | 96 | 15.8 | -24.92 | 29h 22m |
| Dec 2024 | bullish trending low vol | 104 | -4.70 | -0.45 | 45 | 59 | 43.3 | -11.23 | 40h 30m |
| Nov 2024 | bullish trending low vol | 133 | +56.86 | 4.27 | 98 | 35 | 73.7 | -28.75 | 45h 39m |
| Oct 2024 | bullish choppy low vol | 92 | -10.44 | -1.13 | 30 | 62 | 32.6 | -26.65 | 66h 52m |
| Sep 2024 | bearish choppy low vol | 44 | +6.25 | 1.42 | 22 | 22 | 50.0 | -27.96 | 63h 55m |
| Aug 2024 | bearish choppy high vol | 29 | -12.62 | -4.35 | 2 | 27 | 6.9 | -24.82 | 49h 39m |
| Jul 2024 | bearish trending low vol | 46 | -5.37 | -1.17 | 15 | 31 | 32.6 | -19.3 | 74h 26m |
| Jun 2024 | bearish choppy low vol | 53 | -13.77 | -2.60 | 11 | 42 | 20.8 | -16.96 | 37h 53m |
| May 2024 | bullish choppy high vol | 52 | +6.48 | 1.25 | 24 | 28 | 46.2 | -13.9 | 66h 14m |
| Apr 2024 | bearish choppy high vol | 47 | -14.14 | -3.01 | 7 | 40 | 14.9 | -13.78 | 49h 47m |
| Mar 2024 | bullish trending high vol | 156 | -4.85 | -0.31 | 81 | 75 | 51.9 | -13.77 | 37h 12m |
| Feb 2024 | bullish trending low vol | 123 | +21.94 | 1.78 | 65 | 58 | 52.8 | -17.28 | 50h 07m |
| Jan 2024 | bearish choppy high vol | 88 | -28.74 | -3.27 | 19 | 69 | 21.6 | -15.06 | 35h 14m |
| Dec 2023 | bullish trending low vol | 138 | +21.18 | 1.53 | 80 | 58 | 58.0 | -6.16 | 52h 17m |
| Nov 2023 | bullish trending low vol | 136 | +2.57 | 0.19 | 64 | 72 | 47.1 | -7.14 | 51h 00m |
| Oct 2023 | bullish trending low vol | 74 | +19.17 | 2.59 | 44 | 30 | 59.5 | -4.36 | 76h 32m |
| Sep 2023 | bearish choppy low vol | 66 | -3.84 | -0.58 | 13 | 53 | 19.7 | -4.54 | 36h 58m |
| Aug 2023 | bearish choppy low vol | 18 | -1.98 | -1.10 | 4 | 14 | 22.2 | -1.67 | 9h 20m |
| Jul 2023 | bullish trending low vol | 97 | +11.61 | 1.20 | 47 | 50 | 48.5 | -5.66 | 51h 53m |
| Jun 2023 | bullish trending low vol | 30 | +12.06 | 4.02 | 22 | 8 | 73.3 | -12.52 | 64h 16m |
| May 2023 | bearish choppy low vol | 60 | -9.20 | -1.53 | 8 | 52 | 13.3 | -12.45 | 21h 08m |
| Apr 2023 | bullish trending low vol | 76 | -4.83 | -0.64 | 28 | 48 | 36.8 | -7.49 | 70h 41m |
| Mar 2023 | bullish trending high vol | 54 | +7.09 | 1.31 | 26 | 28 | 48.1 | -7.1 | 71h 42m |
| Feb 2023 | bullish trending low vol | 93 | +2.48 | 0.27 | 36 | 57 | 38.7 | -4.8 | 52h 23m |
| Jan 2023 | bullish trending low vol | 65 | +27.87 | 4.29 | 54 | 11 | 83.1 | -17.16 | 84h 55m |
| Dec 2022 | bearish trending low vol | 37 | -9.23 | -2.49 | 3 | 34 | 8.1 | -17.76 | 41h 37m |
| Nov 2022 | bearish trending high vol | 32 | -4.77 | -1.49 | 15 | 17 | 46.9 | -12.36 | 76h 00m |
| Oct 2022 | bullish choppy low vol | 72 | +7.37 | 1.02 | 27 | 45 | 37.5 | -15.94 | 27h 57m |
| Sep 2022 | bearish choppy high vol | 21 | -6.07 | -2.89 | 3 | 18 | 14.3 | -13.84 | 37h 54m |
| Aug 2022 | bullish choppy high vol | 73 | -0.35 | -0.05 | 31 | 42 | 42.5 | -12.85 | 65h 02m |
| Jul 2022 | bearish trending high vol | 67 | +21.78 | 3.25 | 39 | 28 | 58.2 | -24.27 | 45h 33m |
| Jun 2022 | bearish trending high vol | 36 | -9.02 | -2.50 | 5 | 31 | 13.9 | -22.93 | 9h 40m |
| Apr 2022 | bearish choppy high vol | 24 | -8.84 | -3.68 | 5 | 19 | 20.8 | -17.59 | 78h 50m |
| Mar 2022 | bullish choppy high vol | 79 | +19.25 | 2.44 | 50 | 29 | 63.3 | -26.92 | 56h 18m |
| Feb 2022 | bearish trending high vol | 52 | -9.97 | -1.92 | 19 | 33 | 36.5 | -23.76 | 54h 55m |
| Dec 2021 | bearish trending high vol | 10 | -2.12 | -2.12 | 1 | 9 | 10.0 | -17.86 | 8h 00m |
| Nov 2021 | bullish trending high vol | 69 | -4.33 | -0.63 | 30 | 39 | 43.5 | -16.6 | 57h 20m |
| Oct 2021 | bullish trending high vol | 110 | +6.56 | 0.60 | 58 | 52 | 52.7 | -18.13 | 61h 19m |
| Sep 2021 | bearish trending high vol | 91 | -13.18 | -1.45 | 32 | 59 | 35.2 | -17.92 | 28h 26m |
| Aug 2021 | bullish trending high vol | 134 | +40.29 | 3.01 | 91 | 43 | 67.9 | -30.64 | 53h 53m |
| Jul 2021 | bearish trending high vol | 42 | +12.83 | 3.05 | 23 | 19 | 54.8 | -39.79 | 34h 40m |
| Jun 2021 | bearish trending high vol | 33 | -10.37 | -3.14 | 3 | 30 | 9.1 | -38.88 | 19h 09m |
| May 2021 | bearish trending high vol | 90 | -17.56 | -1.95 | 26 | 64 | 28.9 | -32.47 | 17h 15m |
| Apr 2021 | bearish choppy high vol | 134 | +7.87 | 0.58 | 73 | 61 | 54.5 | -26.8 | 33h 19m |
| Mar 2021 | bullish choppy high vol | 152 | +4.25 | 0.28 | 74 | 78 | 48.7 | -33.21 | 38h 02m |
| Feb 2021 | bullish trending high vol | 217 | +1.23 | 0.05 | 114 | 103 | 52.5 | -30.54 | 23h 45m |
| Jan 2021 | bullish trending high vol | 360 | +13.36 | 0.37 | 166 | 194 | 46.1 | -32.66 | 15h 35m |
Yearly breakdown
| Year | Trades | Profit % | Avg % | Win | Loss | Win % | DD % | Avg dur |
|---|---|---|---|---|---|---|---|---|
| 2025 | 686 | -44.54 | -0.65 | 234 | 452 | 34.1 | -31.69 | 48h 38m |
| 2024 | 967 | -3.10 | -0.03 | 419 | 548 | 43.3 | -28.75 | 48h 34m |
| 2023 | 907 | +84.18 | 0.93 | 426 | 481 | 47.0 | -17.16 | 55h 27m |
| 2022 | 493 | +0.15 | 0.00 | 197 | 296 | 40.0 | -26.92 | 48h 56m |
| 2021 | 1442 | +38.83 | 0.27 | 691 | 751 | 47.9 | -39.79 | 31h 22m |
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.