この戦略は,ボリンジャーバンドをベースとした二重トレード戦略である.ボリンジャーバンドの上下両レールを買い売り信号として利用し,リスクを制御するためにストップ・ロスを設定する.
この戦略はボリンジャーバンドの上部と下部レールを使用する.ボリンジャーバンドは移動平均値とそれに対応する2つの標準偏差チャネルで構成される.価格はボリンジャーバンドの上部レールに触れたり破ったときに販売信号が生成される.価格はボリンジャーバンドの下部レールに触れたり破ったときに購入信号が生成される.また,戦略はストップ・ロスのポイントも設定する.価格は移動平均値の一定パーセントを下回ると,ストップ・ロスは識別される.
戦略は,波リンジャー帯をプロットするために,指定されたサイクル (例えば20日) の移動平均と標準偏差の2倍を計算する.上列は移動平均プラス標準偏差の2倍,下列は移動平均マイナス標準偏差の2倍である.閉値が上列よりも大きいまたはそれと同等であるとき,販売信号が発行される.閉値が下列よりも小さいまたはそれと同等であるとき,購入信号が発行される.また,価格が移動平均の一定パーセント (例えば1%) 未満である場合,ストップ損失信号が発行される.
この戦略は,ボリンジャー帯の特徴を利用し,異常な価格変動が発生したときに取引信号を発行し,それによって価格逆転の機会を把握する.単純な移動平均追跡戦略と比較して,この戦略は変動が増加するときに取引信号を生成し,誤ったブレイクアウトのリスクを一定程度回避することができます.
この戦略は,シンプルなダブルトラックブレークスルー戦略と比較して,ストップ・ロスのメカニズムを追加している.これは個々の誤った信号によって引き起こされる損失を効果的に制御することができる.ストップ・ロスのポイントの設定も比較的合理的で,移動平均に近いもので,過剰なストップ・ロスを避けるため,損失が多すぎる.
この戦略の最大のリスクは,ボリンジャーバンド自身で取引信号の有効性を保証できないことである. 市場で特別な状況が発生すると,価格は急激で異常な変動を起こし,この場合,ボリンジャーバンドによって発行された取引信号が間違っている可能性があります. これはかなりの損失を引き起こす可能性があります.
さらに,ストップ損失ポイントの設定はあまりにも攻撃的または保守的であり,最終利益に影響を与える可能性があります.ストップ損失範囲が大きすぎると,有効な信号は頻繁にストップ損失を停止することがあります.ストップ損失範囲が小さすぎると,損失を効果的に制御することはできません.
戦略は以下の側面で最適化できます.
移動平均周期,標準偏差倍数,ストップ損失百分比等などの異なるパラメータの組み合わせを試験し,最適なパラメータを特定する.
誤った信号を避けるため,他の指標を判断し,複数のフィルター条件を形成する.
ストップ・ロスの戦略を最適化する.例えば,シンプルなストップ・ロスの代わりに移動型ストップ・ロスの利用やバッチ・ストップ・ロスの利用など.
トレーディング信号を確認するには 異なる周期のボリンジャー帯を組み合わせて 罠にはまりないようにします
この戦略は,トレンドトラッキングとダブルトラックブレークスルー戦略の実用的な組み合わせである.価格変動が増加すると逆転の機会を掴み,リスクを制御するためにストップ損失を設定することができる.パラメータ最適化,シグナルフィルタリングの増加,最適化されたストップ損失戦略などによって,戦略の安定性と収益性がさらに向上することができる.
/*backtest start: 2024-01-28 00:00:00 end: 2024-02-04 00:00:00 period: 30m basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Bollinger Bands Strategy by Royce Mars", overlay=true) length = input.int(20, minval=1) 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") stopLossPercent = input.float(1.0, title="Stop Loss Percent", minval=0.1, maxval=10, step=0.1) 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) basis = ma(src, length, maType) dev = mult * ta.stdev(src, length) upper = basis + dev lower = basis - dev // Buy and Sell Conditions buyCondition = close <= lower sellCondition = close >= upper // Stop Loss Condition stopLossCondition = close < basis * (1 - stopLossPercent / 100) // Strategy Execution strategy.entry("Buy", strategy.long, when=buyCondition) strategy.close("Buy", when=sellCondition or stopLossCondition) strategy.entry("Sell", strategy.short, when=sellCondition) strategy.close("Sell", when=buyCondition) // Plotting on the Chart plotshape(buyCondition, title="Buy Signal", color=color.green, style=shape.labelup, location=location.belowbar) plotshape(sellCondition or stopLossCondition, title="Sell Signal", color=color.red, style=shape.labeldown, location=location.abovebar) // Plotting the Bollinger Bands plot(basis, "Basis", color=color.orange) p1 = plot(upper, "Upper Band", color=color.blue) p2 = plot(lower, "Lower Band", color=color.blue) fill(p1, p2, title="Background", color=color.rgb(33, 150, 243, 95))