This strategy is an adaptive mean-reversion trading system based on Bollinger Bands indicator. It captures overbought and oversold opportunities by monitoring price crossovers with Bollinger Bands, trading on mean reversion principle. The strategy incorporates dynamic position sizing and risk management mechanisms, suitable for multiple markets and timeframes.
The core logic is based on the following points: 1. Uses 20-period moving average as the middle band, with 2 standard deviations for upper and lower bands. 2. Opens long positions when price breaks below the lower band (oversold signal). 3. Opens short positions when price breaks above the upper band (overbought signal). 4. Takes profit when price reverts to the middle band. 5. Sets 1% stop loss and 2% take profit, achieving 2:1 risk-reward ratio. 6. Employs percentage-based position sizing, investing 1% of account equity per trade.
Consolidation Market Risk - May result in losses due to frequent trading in ranging markets. Solution: Add trend filters, only trade when trend is clear.
False Breakout Risk - Price may quickly reverse after breakout. Solution: Add confirmation signals like volume or other technical indicators.
Systematic Risk - May suffer larger losses in extreme market conditions. Solution: Implement maximum drawdown limits, automatically stop trading when threshold is reached.
This strategy captures price deviation using Bollinger Bands and trades on mean reversion principle. Its comprehensive risk management and clear trading rules provide good practicality. Through suggested optimizations, the strategyβs stability and profitability can be further enhanced. It is suitable for quantitative traders seeking steady returns.
/*backtest
start: 2025-01-09 00:00:00
end: 2025-01-16 00:00:00
period: 10m
basePeriod: 10m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/
//@version=5
strategy("Bollinger Bands Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=200)
// Inputs for Bollinger Bands
bbLength = input.int(20, title="Bollinger Bands Length")
bbStdDev = input.float(2.0, title="Bollinger Bands StdDev")
// Inputs for Risk Management
stopLossPerc = input.float(1.0, title="Stop Loss (%)", minval=0.1, step=0.1)
takeProfitPerc = input.float(2.0, title="Take Profit (%)", minval=0.1, step=0.1)
// Calculate Bollinger Bands
basis = ta.sma(close, bbLength)
bbStdev = ta.stdev(close, bbLength)
upper = basis + bbStdDev * bbStdev
lower = basis - bbStdDev * bbStdev
// Plot Bollinger Bands
plot(basis, color=color.blue, title="Middle Band")
plot(upper, color=color.red, title="Upper Band")
plot(lower, color=color.green, title="Lower Band")
// Entry Conditions
longCondition = ta.crossover(close, lower)
shortCondition = ta.crossunder(close, upper)
// Exit Conditions
exitLongCondition = ta.crossunder(close, basis)
exitShortCondition = ta.crossover(close, basis)
// Stop Loss and Take Profit Levels
longStopLoss = close * (1 - stopLossPerc / 100)
longTakeProfit = close * (1 + takeProfitPerc / 100)
shortStopLoss = close * (1 + stopLossPerc / 100)
shortTakeProfit = close * (1 - takeProfitPerc / 100)
// Execute Long Trades
if (longCondition)
strategy.entry("Long", strategy.long)
strategy.exit("Exit Long", from_entry="Long", stop=longStopLoss, limit=longTakeProfit)
if (shortCondition)
strategy.entry("Short", strategy.short)
strategy.exit("Exit Short", from_entry="Short", stop=shortStopLoss, limit=shortTakeProfit)
// Close Positions on Exit Conditions
if (exitLongCondition and strategy.position_size > 0)
strategy.close("Long")
if (exitShortCondition and strategy.position_size < 0)
strategy.close("Short")
// π SOUND ALERTS IN BROWSER π
if (longCondition)
alert("π Long Entry Signal!", alert.freq_once_per_bar_close)
if (shortCondition)
alert("π Short Entry Signal!", alert.freq_once_per_bar_close)
if (exitLongCondition)
alert("π Closing Long Trade!", alert.freq_once_per_bar_close)
if (exitShortCondition)
alert("π Closing Short Trade!", alert.freq_once_per_bar_close)