This strategy buys whenever Bollinger Bands is squeezed into Kelther Channel. This normally indicates that the market is going sideways. This strategy then sells whenever price goes below the Bollinger Bands middle line. The idea is to buy during the obviously sideways market, hoping for it to burst.
Backtest covers 12.6 months of SPY • 10 Minutes (SPDR S&P 500) data, from June 28, 2024 to July 11, 2025.
Equity curve is the strategy's performance over time. You should compare it to the asset's Buy & Hold performance. In general, you want the blue area to be well above the gray area.
Drawdown is how much losses (realized or unrealized) the strategy has had if compared to the highest equity peak. Compare this to the asset's drawdown to see whether your strategy does a decent job of isolating you from downside volatility. In general, the red area must be well within the gray area.
So, we have backtested Bollinger/Keltner squeeze on 12.6 months of SPY • 10 Minutes candles. This backtest resulted in 144 positions, with the average win rate of 38% and reward-risk ratio of 1.61. If you assume that 1.61 reward-to-risk ratio holds, you need a minimum win rate of 38.3 to be profitable. So you're screwed! The key metrics are as follows:
With that exposure in mind, you can tell that for 26% time-in-market, you get -2.10% of the asset upside potential, and 27.05% of the asset downside potential.
All of the following: # Whiskey 10min Chart(close) (2 candles ago) < 10min Bollinger Bands ® (20, 2, 2, 0, close), Up (2 candles ago) 10min Chart(close) (1 candles ago) > 10min Bollinger Bands ® (20, 2, 2, 0, close), Up (1 candles ago) 10min Bollinger Bands ® (20, 2, 2, 0, close), Up (1 candles ago) < 10min Keltner Channel (20, SMA, 10, 2, 0, close), Up (1 candles ago) 10min BB (20, 2, 2, 0, close) (1 candles ago) > 10min Keltner (20, SMA, 10, 2, 0, close) (1 candles ago)
Any of the following: # Papa 10min Chart(close) < 10min Bollinger Bands ® (20, 2, 2, 0, close), Middle
The strategy shows some concerning patterns that I must point out. The negative net profit of -0.3% compared to buy & hold profit of 14.3% is already a red flag. Even though the Risk/Reward ratio of 1.61 looks okay on paper, the low win rate of 38% makes it problematic.
What catches my attention most is the high number of trades - 144 trades in about 12 months means relatively high trading activity. This could lead to significant transaction costs in real trading, which would make the already negative performance even worse. The market exposure of 26.2% suggests the strategy is quite selective about when it enters the market, which is good, but it's not catching the major moves as evidenced by the underperformance versus buy & hold.
The negative Sharpe ratio (-0.41) and Sortino ratio (-0.11) are clear indicators that this strategy is not delivering risk-adjusted returns. While the maximum drawdown of -5.6% might seem acceptable compared to the asset's -20.7%, we must remember that this is achieved through lower market exposure, not through superior trading decisions. I would strongly suggest to either modify the entry conditions or look for a completely different approach.
Total Trades | 144 | Net Profit | -0.3% | Buy & Hold Profit | 14.3% |
Win Rate | 38% | Reward/Risk Ratio | 1.61 | Max Drawdown | -5.6% |
Asset Max Drawdown | -20.7% | Exposure | 26.2% | Avg Candles in Position | 17.2 |
Sharpe Ratio | -0.41 | Sortino Ratio | -0.11 | Realized Volatility | 6.66% |
Max Winning Streak | 5 | Avg Winning Streak | 1.7 | Max Losing Streak | 7 |
Avg Losing Streak | 2.7 | Avg Trades per Month | 22.9 | Avg Trades per Day | 0.8 |
Return Std Dev | 0.5 | Loss Std Dev | 0.3 | Win Std Dev | 0.3 |
Expectancy | -0.0 | Beta | 0.12 |
backtest | exposure | peformance vs asset | drawdown vs asset | win% | reward/risk |
---|---|---|---|---|---|
BTCUSD • 1 Minute | 13% | (0.2%/9.8%) 0.02x | (-0.4%/-1.6%) 0.25x | 49 | 1.2 |
EURUSD • 1 Minute | 17% | (-0.1%/-0.9%) 0.11x | (-0.5%/-1.2%) 0.42x | 28 | 2.4 |
GLD • 1 Minute | 18% | (3.6%/0.0%) Infinityx | (-1.0%/-5.5%) 0.18x | 35 | 4.0 |
NVDA • 1 Minute | 24% | (8.1%/16.7%) 0.49x | (-1.8%/-4.4%) 0.41x | 43 | 2.4 |
SPY • 1 Minute | 23% | (1.0%/4.6%) 0.22x | (-1.6%/-2.1%) 0.76x | 33 | 2.4 |
TSLA • 1 Minute | 23% | (-14.5%/-10.3%) 1.41x | (-15.5%/-21.4%) 0.72x | 28 | 1.3 |
WMT • 1 Minute | 18% | (-3.8%/-5.4%) 0.70x | (-3.9%/-6.4%) 0.61x | 31 | 1.4 |
BTCUSD • 10 Minutes | 19% | (1.0%/27.2%) 0.04x | (-6.3%/-12.1%) 0.52x | 35 | 1.9 |
EURUSD • 10 Minutes | 24% | (-0.3%/6.5%) -0.05x | (-4.3%/-4.3%) 1.00x | 30 | 2.3 |
GLD • 10 Minutes | 19% | (-4.0%/43.7%) -0.09x | (-8.0%/-8.3%) 0.96x | 37 | 1.4 |
NVDA • 10 Minutes | 25% | (-12.1%/32.9%) -0.37x | (-24.9%/-42.8%) 0.58x | 36 | 1.6 |
SPY • 10 Minutes | 26% | (-0.3%/14.3%) -0.02x | (-5.6%/-20.7%) 0.27x | 38 | 1.6 |
TSLA • 10 Minutes | 24% | (4.7%/59.0%) 0.08x | (-32.8%/-55.3%) 0.59x | 40 | 1.6 |
WMT • 10 Minutes | 27% | (17.3%/40.1%) 0.43x | (-6.2%/-23.8%) 0.26x | 44 | 1.9 |
BTCUSD • 1 Hour | 25% | (19.1%/71.4%) 0.27x | (-21.5%/-31.0%) 0.69x | 42 | 1.7 |
EURUSD • 1 Hour | 26% | (4.9%/8.2%) 0.60x | (-2.8%/-9.0%) 0.31x | 41 | 1.9 |
GLD • 1 Hour | 16% | (6.2%/117.6%) 0.05x | (-18.6%/-22.2%) 0.84x | 42 | 1.6 |
NVDA • 1 Hour | 26% | (364.4%/3126.3%) 0.12x | (-34.2%/-68.0%) 0.50x | 49 | 2.5 |
SPY • 1 Hour | 22% | (8.9%/106.7%) 0.08x | (-12.4%/-35.1%) 0.35x | 41 | 1.7 |
TSLA • 1 Hour | 21% | (505.6%/1395.5%) 0.36x | (-34.5%/-75.1%) 0.46x | 43 | 3.1 |
WMT • 1 Hour | 25% | (25.8%/138.2%) 0.19x | (-9.3%/-26.9%) 0.35x | 46 | 1.6 |
BTCUSD • Daily | 28% | (2515.4%/67440.2%) 0.04x | (-51.5%/-83.8%) 0.61x | 45 | 4.2 |
EURUSD • Daily | 25% | (5.2%/10.8%) 0.48x | (-9.1%/-23.3%) 0.39x | 39 | 1.9 |
GLD • Daily | 17% | (13.2%/595.1%) 0.02x | (-21.1%/-45.3%) 0.47x | 39 | 1.9 |
NVDA • Daily | 26% | (577.6%/373678.5%) 0.00x | (-51.4%/-90.0%) 0.57x | 43 | 2.5 |
SPY • Daily | 22% | (14.1%/1316.3%) 0.01x | (-39.4%/-56.7%) 0.69x | 39 | 1.9 |
TSLA • Daily | 24% | (1451.6%/24185.2%) 0.06x | (-38.8%/-75.0%) 0.52x | 47 | 3.9 |
WMT • Daily | 26% | (-44.0%/9978.0%) -0.00x | (-74.7%/-50.6%) 1.48x | 36 | 1.6 |