
Strategi ini ialah sistem mengikut aliran yang menggabungkan Bollinger Bands, turun naik dan pengurusan risiko. Ia terutamanya menangkap peluang aliran dengan memantau cara harga menembusi trek atas dan bawah Bollinger Bands, dan pada masa yang sama melaraskan saiz kedudukan secara dinamik dalam kombinasi dengan ATR untuk mencapai kawalan risiko yang tepat. Strategi ini juga menggabungkan mekanisme untuk mengenal pasti tempoh penyatuan pasaran untuk menapis isyarat palsu secara berkesan dalam pasaran yang tidak menentu.
Strategi ini beroperasi berdasarkan logik teras berikut:
Strategi ini menangkap arah aliran melalui penembusan Bollinger Band dan menggabungkannya dengan sistem kawalan risiko yang kukuh. Kelebihannya ialah kebolehsuaian yang kuat dan risiko yang boleh dikawal, tetapi kita masih perlu memberi perhatian kepada risiko penemuan palsu dan pembalikan arah aliran. Masih terdapat ruang untuk menambah baik strategi dengan menambah penunjuk pengesahan arah aliran, mengoptimumkan mekanisme pelarasan parameter, dsb. Secara keseluruhan, ini adalah strategi mengikut arah aliran dengan logik yang jelas dan praktikal yang kukuh.
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-08 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Bollinger Bands Breakout Strategy", overlay=true)
// Input parameters
length = input(20, title="Bollinger Bands Length")
stdDev = input(2.0, title="Standard Deviation")
riskRewardRatio = input(2.0, title="Risk/Reward Ratio")
atrLength = input(14, title="ATR Length")
riskPercentage = input(1.0, title="Risk Percentage per Trade")
// Calculate Bollinger Bands
basis = ta.sma(close, length)
dev = stdDev * ta.stdev(close, length)
upperBand = basis + dev
lowerBand = basis - dev
// Calculate ATR for position sizing
atr = ta.atr(atrLength)
// Plot Bollinger Bands
plot(basis, color=color.blue, title="Basis")
plot(upperBand, color=color.red, title="Upper Band")
plot(lowerBand, color=color.green, title="Lower Band")
// Market Consolidation Detection
isConsolidating = (upperBand - lowerBand) < ta.sma(upperBand - lowerBand, length) * 0.5
// Breakout Conditions
longCondition = ta.crossover(close, upperBand) and not isConsolidating
shortCondition = ta.crossunder(close, lowerBand) and not isConsolidating
// Risk Management: Calculate position size
equity = strategy.equity
riskAmount = equity * (riskPercentage / 100)
positionSize = riskAmount / (atr * riskRewardRatio)
// Execute trades with risk management
if (longCondition)
strategy.entry("Long", strategy.long, qty=positionSize)
strategy.exit("Take Profit", from_entry="Long", limit=close + atr * riskRewardRatio, stop=close - atr)
if (shortCondition)
strategy.entry("Short", strategy.short, qty=positionSize)
strategy.exit("Take Profit", from_entry="Short", limit=close - atr * riskRewardRatio, stop=close + atr)
// Alert conditions for breakouts
alertcondition(longCondition, title="Long Breakout", message="Long breakout detected!")
alertcondition(shortCondition, title="Short Breakout", message="Short breakout detected!")