Basics
mode: spot
timeframe: 1h
interface version: 3
4h
1d
Settings
stoploss: -0.99
has minimal roi
process only new candles
startup candle count: 250
Indicators
Bollinger_Bands
EMA
SMA
talib
Concepts
breakout
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 | """ VolBBSqueeze — 4h Bollinger-Band squeeze breakout, 1h entry on confirmation Paradigm: volatility Hypothesis: v0.2.0's VolSqueezeBreak was killed at Sharpe 0.17 — agent noted squeeze paradigm needs lower frequency than 1h. v0.3.0 affordance: move squeeze detection to 4h, then enter on 1h once break confirms. BB squeeze = 4h BB-width in bottom quartile of last 50 4h bars. Break = 4h close > 4h upper band after squeeze. Direction is implicitly long (we don't short on this universe). 1d EMA200 regime gate to avoid bear-market squeeze releases that fail. Parent: root (paradigm-inspired by v0.2.0's killed VolSqueezeBreak, restructured to MTF) Created: pending — fill in after first commit Status: active Uses MTF: yes """ from pandas import DataFrame import talib.abstract as ta from freqtrade.strategy import IStrategy, informative class VolBBSqueeze(IStrategy): INTERFACE_VERSION = 3 timeframe = "1h" can_short = False minimal_roi = {"0": 100} stoploss = -0.99 trailing_stop = False process_only_new_candles = True use_exit_signal = True exit_profit_only = False ignore_roi_if_entry_signal = False # 4h indicators with 50-bar window need ~250 hourly bars warmup; 1d EMA200 dominates startup_candle_count: int = 250 @informative("4h") def populate_indicators_4h(self, dataframe: DataFrame, metadata: dict) -> DataFrame: upper, middle, lower = ta.BBANDS( dataframe["close"], timeperiod=20, nbdevup=2.0, nbdevdn=2.0, matype=0 ) dataframe["bb_upper"] = upper dataframe["bb_middle"] = middle dataframe["bb_lower"] = lower # BB width relative to its own 50-bar history — squeeze when width is in bottom quartile dataframe["bb_width"] = (upper - lower) / middle # q33 squeeze threshold (peak via r23 / r32 — tighter q20 hurts compounding, looser q50 over-trades) dataframe["bb_width_q33"] = dataframe["bb_width"].rolling(50).quantile(0.33) return dataframe @informative("1d") def populate_indicators_1d(self, dataframe: DataFrame, metadata: dict) -> DataFrame: dataframe["ema200"] = ta.EMA(dataframe, timeperiod=200) return dataframe def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame: dataframe["sma50"] = ta.SMA(dataframe, timeperiod=50) return dataframe def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame: squeeze_then_break = ( (dataframe["bb_width_4h"].shift(1) <= dataframe["bb_width_q33_4h"].shift(1)) # was squeezed & (dataframe["close_4h"] > dataframe["bb_upper_4h"]) # now breaking upper band ) dataframe.loc[ squeeze_then_break & (dataframe["close"] > dataframe["ema200_1d"]), # 1d bull regime "enter_long", ] = 1 return dataframe def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame: dataframe.loc[ dataframe["close"] < dataframe["sma50"], # 1h trend break — patient exit "exit_long", ] = 1 return dataframe |
Strategy League — fixed backtest that feeds the ranking
Export report Freqtrade logsRun finished · took 38.7s
pairs 33 pairs
timerange 20210101-20260101
mode spot
timeframe 1h
stake 100 USDT
wallet 1000 USDT
max open trades 10
fee exchange lowest tier
total profit+62.15%
final wallet1622 USDT
win rate33.6%
max drawdown-35.13%
market change+431.79%
vs market-369.64%
timeframe1h
profit factor1.15
expectancy ratio0.098
sharpe0.73
sortino2.82
CAGR+10.2%
calmar1.852
avg MFE+7.02%
avg MAE-3.74%
avg profit/trade0.32%
avg duration34h 36m
best trade+112.75%
worst trade-14.50%
positive months22/59
consistent (3-mo)36.8%
worst 3-mo-20.86%
trades1939
revision1
likely annual return+10%
range (5th–95th)+0% … +21%
chance of profit95.3%
worst-5% outcome-2%
significance (p)0.062
risk of ruin0.0%
- profitable in only 37% of rolling 3-month windows
- did not beat simply holding the market
- 95% 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 | 3 | -0.52 | -1.73 | 1 | 2 | 33.3 | -14.66 | 28h 20m |
| Nov 2025 | bearish trending high vol | 8 | -2.75 | -3.44 | 2 | 6 | 25.0 | -14.34 | 35h 08m |
| Oct 2025 | bearish trending low vol | 38 | -4.01 | -1.06 | 14 | 24 | 36.8 | -13.22 | 33h 36m |
| Sep 2025 | bullish choppy low vol | 57 | +0.39 | 0.07 | 20 | 37 | 35.1 | -12.09 | 36h 39m |
| Aug 2025 | bullish choppy low vol | 50 | +0.84 | 0.17 | 22 | 28 | 44.0 | -13.02 | 38h 07m |
| Jul 2025 | bullish choppy low vol | 51 | +0.74 | 0.15 | 20 | 31 | 39.2 | -12.65 | 38h 29m |
| Jun 2025 | bearish choppy low vol | 27 | +0.97 | 0.36 | 11 | 16 | 40.7 | -12.57 | 31h 38m |
| May 2025 | bullish trending low vol | 32 | -5.84 | -1.83 | 6 | 26 | 18.8 | -12.33 | 25h 34m |
| Apr 2025 | bullish choppy low vol | 11 | -2.25 | -2.04 | 2 | 9 | 18.2 | -9.35 | 23h 27m |
| Mar 2025 | bearish trending high vol | 15 | -1.52 | -1.02 | 6 | 9 | 40.0 | -8.18 | 33h 40m |
| Feb 2025 | bearish trending low vol | 30 | -4.01 | -1.34 | 8 | 22 | 26.7 | -7.27 | 24h 34m |
| Jan 2025 | bearish choppy low vol | 42 | +0.90 | 0.21 | 12 | 30 | 28.6 | -5.6 | 33h 46m |
| Dec 2024 | bullish trending low vol | 62 | +28.82 | 4.64 | 15 | 47 | 24.2 | -9.37 | 35h 27m |
| Nov 2024 | bullish trending low vol | 51 | +42.66 | 8.36 | 35 | 16 | 68.6 | -33.16 | 50h 46m |
| Oct 2024 | bullish choppy low vol | 35 | -3.42 | -0.98 | 11 | 24 | 31.4 | -34.06 | 34h 27m |
| Sep 2024 | bearish choppy low vol | 33 | +3.12 | 0.95 | 14 | 19 | 42.4 | -33.71 | 41h 42m |
| Aug 2024 | bearish choppy high vol | 15 | +0.91 | 0.60 | 6 | 9 | 40.0 | -35.13 | 44h 36m |
| Jul 2024 | bearish trending low vol | 25 | -3.22 | -1.29 | 4 | 21 | 16.0 | -34.01 | 27h 12m |
| Jun 2024 | bearish choppy low vol | 21 | -1.94 | -0.93 | 8 | 13 | 38.1 | -32.04 | 35h 51m |
| May 2024 | bullish choppy high vol | 45 | -3.08 | -0.68 | 13 | 32 | 28.9 | -32.13 | 29h 09m |
| Apr 2024 | bearish choppy high vol | 49 | -6.45 | -1.32 | 14 | 35 | 28.6 | -30.5 | 30h 39m |
| Mar 2024 | bullish trending high vol | 73 | -6.10 | -0.84 | 23 | 50 | 31.5 | -28.49 | 29h 36m |
| Feb 2024 | bullish trending low vol | 70 | +14.18 | 2.03 | 37 | 33 | 52.9 | -30.43 | 45h 58m |
| Jan 2024 | bearish choppy high vol | 63 | -2.91 | -0.46 | 17 | 46 | 27.0 | -30.21 | 34h 30m |
| Dec 2023 | bullish trending low vol | 75 | -2.07 | -0.28 | 29 | 46 | 38.7 | -28.64 | 36h 42m |
| Nov 2023 | bullish trending low vol | 70 | -9.90 | -1.41 | 12 | 58 | 17.1 | -26.87 | 29h 03m |
| Oct 2023 | bullish trending low vol | 35 | +3.97 | 1.13 | 15 | 20 | 42.9 | -23.79 | 37h 24m |
| Sep 2023 | bearish choppy low vol | 15 | -0.65 | -0.43 | 2 | 13 | 13.3 | -23.81 | 30h 32m |
| Aug 2023 | bearish choppy low vol | 27 | -1.47 | -0.55 | 8 | 19 | 29.6 | -22.82 | 31h 27m |
| Jul 2023 | bullish trending low vol | 40 | +0.50 | 0.12 | 12 | 28 | 30.0 | -21.91 | 33h 16m |
| Jun 2023 | bullish trending low vol | 14 | +0.40 | 0.29 | 4 | 10 | 28.6 | -23.86 | 38h 47m |
| May 2023 | bearish choppy low vol | 19 | -1.06 | -0.56 | 4 | 15 | 21.1 | -23.4 | 30h 13m |
| Apr 2023 | bullish trending low vol | 44 | -7.18 | -1.63 | 10 | 34 | 22.7 | -22.16 | 28h 37m |
| Mar 2023 | bullish trending high vol | 21 | -3.71 | -1.77 | 3 | 18 | 14.3 | -17.52 | 24h 29m |
| Feb 2023 | bullish trending low vol | 26 | -2.27 | -0.87 | 5 | 21 | 19.2 | -15.1 | 32h 30m |
| Jan 2023 | bullish trending low vol | 25 | +1.97 | 0.79 | 8 | 17 | 32.0 | -14.75 | 34h 22m |
| Dec 2022 | bearish trending low vol | 3 | -0.94 | -3.14 | 0 | 3 | 0.0 | -14.91 | 24h 00m |
| Nov 2022 | bearish trending high vol | 2 | +0.21 | 1.06 | 1 | 1 | 50.0 | -14.33 | 40h 30m |
| Oct 2022 | bullish choppy low vol | 1 | -0.10 | -0.97 | 0 | 1 | 0.0 | -14.46 | 61h 00m |
| Sep 2022 | bearish choppy high vol | 1 | -0.17 | -1.73 | 0 | 1 | 0.0 | -14.4 | 28h 00m |
| Aug 2022 | bullish choppy high vol | 12 | -3.66 | -3.05 | 0 | 12 | 0.0 | -14.3 | 16h 40m |
| Jun 2022 | bearish trending high vol | 1 | -0.29 | -2.90 | 0 | 1 | 0.0 | -12.04 | 25h 00m |
| May 2022 | bearish trending high vol | 4 | -1.17 | -2.93 | 0 | 4 | 0.0 | -11.86 | 23h 30m |
| Apr 2022 | bearish choppy high vol | 1 | -0.25 | -2.50 | 0 | 1 | 0.0 | -11.14 | 20h 00m |
| Mar 2022 | bullish choppy high vol | 19 | -2.27 | -1.20 | 6 | 13 | 31.6 | -11.5 | 32h 13m |
| Feb 2022 | bearish trending high vol | 4 | -0.12 | -0.30 | 2 | 2 | 50.0 | -9.89 | 37h 45m |
| Jan 2022 | bearish trending high vol | 13 | -1.78 | -1.37 | 2 | 11 | 15.4 | -9.52 | 31h 51m |
| Dec 2021 | bearish trending high vol | 26 | -2.12 | -0.81 | 4 | 22 | 15.4 | -9.96 | 29h 30m |
| Nov 2021 | bullish trending high vol | 42 | +6.19 | 1.47 | 20 | 22 | 47.6 | -11.94 | 39h 17m |
| Oct 2021 | bullish trending high vol | 69 | -2.40 | -0.35 | 22 | 47 | 31.9 | -10.93 | 34h 49m |
| Sep 2021 | bearish trending high vol | 44 | +10.71 | 2.43 | 22 | 22 | 50.0 | -16.24 | 39h 53m |
| Aug 2021 | bullish trending high vol | 70 | -4.91 | -0.70 | 24 | 46 | 34.3 | -16.04 | 32h 16m |
| Jul 2021 | bearish trending high vol | 18 | -8.63 | -4.79 | 0 | 18 | 0.0 | -13.02 | 19h 47m |
| Jun 2021 | bearish trending high vol | 36 | -7.32 | -2.03 | 7 | 29 | 19.4 | -8.97 | 31h 27m |
| May 2021 | bearish trending high vol | 35 | +4.65 | 1.34 | 14 | 21 | 40.0 | -3.2 | 35h 24m |
| Apr 2021 | bearish choppy high vol | 57 | +18.26 | 3.20 | 38 | 19 | 66.7 | -3.05 | 44h 06m |
| Mar 2021 | bullish choppy high vol | 68 | +0.93 | 0.14 | 23 | 45 | 33.8 | -5.74 | 35h 05m |
| Feb 2021 | bullish trending high vol | 53 | +27.97 | 5.27 | 22 | 31 | 41.5 | -7.79 | 40h 50m |
| Jan 2021 | bullish trending high vol | 43 | +5.34 | 1.24 | 12 | 31 | 27.9 | -6.97 | 31h 31m |
Yearly breakdown
| Year | Trades | Profit % | Avg % | Win | Loss | Win % | DD % | Avg dur |
|---|---|---|---|---|---|---|---|---|
| 2025 | 364 | -17.06 | -0.47 | 124 | 240 | 34.1 | -14.66 | 33h 29m |
| 2024 | 542 | +62.57 | 1.15 | 197 | 345 | 36.3 | -35.13 | 36h 36m |
| 2023 | 411 | -21.47 | -0.52 | 112 | 299 | 27.3 | -28.64 | 32h 26m |
| 2022 | 61 | -10.54 | -1.73 | 11 | 50 | 18.0 | -14.91 | 28h 49m |
| 2021 | 561 | +48.67 | 0.87 | 208 | 353 | 37.1 | -16.24 | 35h 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-bias patterns detected
ran by Ron · took s
Lookahead analysis
freqtrade lookahead-analysis: detects strategies peeking at future candles.