ボリンジャーバンドのブレイクアウト戦略は,長時間のみのモメンタムを追求する戦略である.ボリンジャーバンドの上下帯を使用して価格のモメンタムを判断し,価格が上部帯を超えるとロングになり,価格が下部帯または移動平均を下回るとポジションを閉じる.
戦略は,まずベースラインとしてN日移動平均を計算し,その後,ベースライン上の標準偏差をK倍加減し,上下帯を構成し,ボリンジャー帯を形成する.価格が上帯を超えると,上向きのブレイクをシグナルします.これはゴールデンクロス信号です.戦略はこの信号でロングポジションを開きます.価格が下帯または移動平均を下回ると,これはダウン逆転をシグナルします.この戦略はこの信号でポジションを閉じる.
ボリンジャー帯の上下帯は,価格データの分布の大半を動的に含めることができるため,現在の市場価格の合理的な変動範囲を表しています.価格がこの合理的な変動範囲を突破すると,それは市場で異常な何かが起こっていることを意味し,それに応じてポジションを調整する必要があります.これは戦略の基本的な論理です.
この戦略には以下の利点があります.
この戦略にはいくつかのリスクもあります:
このリスクを制御するために MACD のようなトレンドインジケーターを組み込むか 悪い信号を減らすために ボリンジャー帯を狭めるようにパラメータを適切に調整することができます
戦略は,次の側面からも最適化できます.
上記の最適化によって 戦略の安定性をさらに向上させ 取引リスクを削減できます
概要すると,ボリンジャーバンドブレイクアウト戦略は,かなり古典的なトレンド追いかける戦略です. 明確な論理と簡単な自動化があります. しかし,まだいくつかの欠陥があり,複雑な変化する市場環境に適応するためにさらなる最適化が必要です. 他の指標とメカニズムと適切に組み合わせると,結果は大幅に改善できます.
/*backtest start: 2023-01-22 00:00:00 end: 2024-01-28 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © Senthaamizh //@version=4 strategy(title="Bollinger Band Breakout", shorttitle = "BB-BO", overlay=true) source = close length = input(20, minval=1, title = "Period") //Length of the Bollinger Band mult = input(1.5, minval=0.001, maxval=50, title = "Standard Deviation") // Use 1.5 SD for 20 period MA; Use 2 SD for 10 period MA exit = input(1, minval=1, maxval=2,title = "Exit Option") // Use Option 1 to exit using lower band; Use Option 2 to exit using moving average basis = sma(source, length) dev = mult * stdev(source, length) upper = basis + dev lower = basis - dev if (crossover(source, upper)) strategy.entry("Long", strategy.long, qty=1) if(exit==1) if (crossunder(source, lower)) strategy.close("Long") if(exit==2) //basis is good for N50 but lower is good for BN (High volatility) if (crossunder(source, basis)) strategy.close("Long") plot(basis, color=color.red,title= "SMA") p1 = plot(upper, color=color.blue,title= "UB") p2 = plot(lower, color=color.blue,title= "LB") fill(p1, p2)