
This strategy is a quantitative trading system based on Bollinger Bands dynamic breakout. It combines various types of moving averages (including SMA, EMA, SMMA, WMA, VWMA) to construct Bollinger Bands and makes trading decisions based on the relationship between price and the upper and lower bands. The core idea is to capture upward trends when price breaks above the upper band and exit when it falls below the lower band.
The strategy operates on several key elements: 1. Calculates the middle band using selectable moving average types (SMA, EMA, etc.). 2. Computes upper and lower bands using standard deviation multiplier (default 2.0). 3. Opens long positions when closing price breaks above the upper band. 4. Closes positions when closing price falls below the lower band. The strategy includes date range filtering and slippage control mechanisms to enhance trading stability and reliability.
This is a complete trading system based on Bollinger Bands with good adaptability and scalability. Through the selection of various moving average types and flexible parameter settings, it can adapt to different market environments. While the strategy’s risk management mechanisms are relatively comprehensive, there is still room for optimization. It is recommended to focus on enhancing signal confirmation mechanisms and optimizing risk management to improve strategy stability and profitability.
/*backtest
start: 2024-06-30 00:00:00
end: 2025-02-18 08:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Binance","currency":"DOGE_USDT"}]
*/
//@version=6
strategy(shorttitle="BB Demo", title="Demo GPT - Bollinger Bands", overlay=true, commission_type=strategy.commission.percent, commission_value=0.1, slippage=0, 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.source(close, title="Source")
mult = input.float(2.0, minval=0.001, maxval=50, title="StdDev")
offset = input.int(0, "Offset", minval=-500, maxval=500)
// MA Calculation 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)
// Indicator Calculations
basis = ma(src, length, maType)
dev = mult * ta.stdev(src, length)
upper = basis + dev
lower = basis - dev
// Visual Plots
plot(basis, "Basis", color=color.new(#2962FF, 0), offset=offset)
p1 = plot(upper, "Upper", color=color.new(#F23645, 0), offset=offset)
p2 = plot(lower, "Lower", color=color.new(#089981, 0), offset=offset)
fill(p1, p2, color=color.rgb(33, 150, 243, 95), title="Background")
// Strategy Logic
longCondition = close > upper
exitCondition = close < lower
if longCondition
strategy.entry("Long", strategy.long)
if exitCondition
strategy.close("Long")