0bps

Strategy vault / Breakout

Bollinger Bands Momentum Breakout Adaptive Trend Following Strategy

This strategy is a momentum breakout trading system based on Bollinger Bands, primarily capturing trend opportunities through the relationship between price and the upper Bollinger Band. The strategy employs an…

Author
ChaoZhang
Complexity
Starter · 64 lines
Parameters
0
Backtest bar
1d · swing
Tested on
BTC/USDT · futures

IMG

Overview

This strategy is a momentum breakout trading system based on Bollinger Bands, primarily capturing trend opportunities through the relationship between price and the upper Bollinger Band. The strategy employs an adaptive moving average type selection mechanism, combined with standard deviation channels to identify market volatility characteristics, particularly suitable for markets with high volatility.

Strategy Principle

The core logic of the strategy is based on the following key elements:

  1. Uses customizable moving averages (including SMA, EMA, SMMA, WMA, VWMA) to calculate the middle band of Bollinger Bands.
  2. Dynamically determines upper and lower band positions through standard deviation multiplier (default 2.0).
  3. Enters long positions when price breaks above the upper band, indicating formation of strong breakout trends.
  4. Exits positions when price falls below the lower band, suggesting potential end of uptrend.
  5. Incorporates trading costs (0.1%) and slippage (3 points), better reflecting real trading conditions.

Strategy Advantages

  1. High Adaptability: Through multiple moving average type options, the strategy can adapt to different market conditions.
  2. Robust Risk Control: Uses Bollinger Bands lower band as stop loss, providing clear risk control.
  3. Rational Money Management: Employs position sizing based on equity percentage, avoiding risks of fixed position sizes.
  4. Comprehensive Cost Consideration: Includes commission and slippage factors, making backtesting results more realistic.
  5. Flexible Time Framework: Allows selection of specific trading time ranges through parameter settings.

Strategy Risks

  1. False Breakout Risk: Frequent false breakout signals may occur in ranging markets. Solution: Add confirmation indicators or delayed entry mechanisms.
  2. Trend Reversal Risk: Sudden reversals in strong trend markets may cause significant losses. Solution: Implement trend strength filters.
  3. Parameter Sensitivity: Different parameter combinations may lead to varying strategy performance. Solution: Requires thorough parameter optimization and robustness testing.

Strategy Optimization Directions

  1. Introduce Trend Strength Indicators:
  • Add ADX or similar indicators to filter signals in weak trend markets
  • This can reduce losses from false breakouts
  1. Optimize Stop Loss Mechanism:
  • Implement dynamic stop loss, such as trailing stops
  • Helps capture larger profits in continuing trends
  1. Add Trading Filters:
  • Volume-based confirmation signals
  • Avoid trading in low liquidity environments
  1. Enhance Entry Mechanism:
  • Add pullback entry mechanisms
  • Helps achieve better entry prices

Summary

This is a well-designed trend following strategy with clear logic. It captures market momentum through the dynamic nature of Bollinger Bands and includes good risk control mechanisms. The strategy is highly customizable and can adapt to different market environments through parameter adjustments. For live trading implementation, it is recommended to conduct thorough parameter optimization and backtesting validation, while incorporating the suggested optimization directions for strategy improvement.

Source Pine Script

/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-11 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Demo GPT - Bollinger Bands", overlay=true, initial_capital=10000, commission_type=strategy.commission.percent, commission_value=0.1, slippage=3, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Inputs
length = input.int(20, minval=1, title="Length")
maType = input.string("SMA", "Basis MA Type", options = ["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])
src = input(close, title="Source")
mult = input.float(2.0, minval=0.001, maxval=50, title="StdDev")
offset = input.int(0, "Offset", minval=-500, maxval=500)

// Date range inputs
startYear = input.int(2018, "Start Year", minval=1970, maxval=2100)
startMonth = input.int(1, "Start Month", minval=1, maxval=12)
startDay = input.int(1, "Start Day", minval=1, maxval=31)
endYear = input.int(2069, "End Year", minval=1970, maxval=2100)
endMonth = input.int(12, "End Month", minval=1, maxval=12)
endDay = input.int(31, "End Day", minval=1, maxval=31)

// Time range
startTime = timestamp("GMT+0", startYear, startMonth, startDay, 0, 0)
endTime = timestamp("GMT+0", endYear, endMonth, endDay, 23, 59)

// Moving average function
ma(source, length, _type) =>
    switch _type
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "SMMA (RMA)" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)

// Calculate Bollinger Bands
basis = ma(src, length, maType)
dev = mult * ta.stdev(src, length)
upper = basis + dev
lower = basis - dev

// Plot
plot(basis, "Basis", color=#2962FF, offset=offset)
p1 = plot(upper, "Upper", color=#F23645, offset=offset)
p2 = plot(lower, "Lower", color=#089981, offset=offset)
fill(p1, p2, title="Background", color=color.rgb(33, 150, 243, 95))

// Strategy logic: Only go long and flat
inDateRange = time >= startTime and time <= endTime
noPosition = strategy.position_size == 0
longPosition = strategy.position_size > 0

// Buy if close is above upper band
if inDateRange and noPosition and close > upper
    strategy.entry("Long", strategy.long)

// Sell/Exit if close is below lower band
if inDateRange and longPosition and close < lower
    strategy.close("Long")

Published by ChaoZhang on the FMZ strategy square · last modified 2024-12-13. Collected in the Quant Trading Vault. Unvalidated research: re-test with your own data and costs before trusting it.

Build this with AgenKit

A spec is not a trading system. Paste this into your coding agent and AgenKit runs a specialist team — architecture, test-first build, risk gates, review — with paper trading on by default.

in Claude Code, Cursor, Codex & 4 more
/agenkit build a production-grade trading bot with a backtest engine, risk controls and paper trading by default from strategies/Bollinger-Bands-Momentum-Breakout-Adaptive-Trend-Following-Strategy.md
  1. npx agenkit install engineering-kit in your project
  2. Paste the command into your agent and approve each phase
  3. Get tests, backtest, risk controls and a paper-trading switch

Understand it first

Before you run this, read the lesson behind the idea and how to backtest it honestly. Specs like this one are the survivors of an unknown number of trials; deflate their results accordingly.

Related specs

esc

Try , , or .

↑↓ move↵ open