Bollinger Bands (ボリンジャーバンド) をベースとしたトレンドフォロー戦略である.Bollinger Bandsの上下帯を使用して価格傾向を決定し,買取・売却シグナルを生成する.具体的には,閉じる価格が上帯を超えるとロング,閉じる価格が下帯を超えるとショートする.
この戦略はトレンドを決定するためにボリンジャーバンドの上下帯を使用する.ボリンジャーバンドの中間帯は,n期間の閉値の単純な移動平均である.バンドの幅は,n期間の閉値の標準偏差のk倍である.公式は:
中間帯:SMA (近) 上部帯:中部帯 + k * STDEV ((近部,n) 下帯: 中帯 - k * STDEV ((近,n)
価格が上部帯を超えると,価格は中部帯の周りの通常の変動範囲を超えており,上昇傾向を示します.価格が下部帯を下回ると,価格は正常範囲を超えて下落しており,下落傾向を示します.
戦略は,これに基づいて,次のことを決定します.
中期から長期間のトレンドにはうまく機能します.
この戦略の主な利点は以下の通りです.
トレンドを決定するためにボリンジャーバンドを使用することは信頼性があります.ボリンジャーバンドは変動を考慮し,ターニングポイントをよく判断することができます.
戦略のルールは シンプルで明快で 分かりやすく 実行できます
価格とボリンジャー帯の関係を追跡するだけです 操作が簡単です
信号は帯間断で生成され 機会を逃さずに タイミングでトレンドシフトを捉えます
この戦略にはいくつかのリスクもあります:
ボリンジャー・バンドは価格変動を完全に予測できない. 波紋の破裂後,トレンドは持続しない可能性があり,ウィップソーも可能である.
価格が波動し 複数の小さな損失を引き起こす可能性があります
パラメータの設定が不十分である場合も,信号が不良になる可能性があります. n が小さすぎると,帯域が頻繁に変化し,信号が発信されることがあります. k が大きすぎると,信号が遅くなる可能性があります.
市場の動向は 個々の株に影響を与え,システムリスクを引き起こす可能性があります.
対応するリスク管理措置:
戦略はいくつかの方法で最適化できます.
n を最適化し,異なる設定をテストします.また,k を変動性に基づいてダイナミックにします.
MACDやKDJなどの他の指標を用いたフィルターを追加し,買い/売る信号をフィルタリングし,誤った信号を減らす.
ストップ・ロスのメカニズムを追加します 例えば価格ベースや波動性ベースのストップです
価格変動を決定し,ポジションサイズを調整するためにボリンガー帯域幅を使用します.より広い帯域はより高い変動を示しますので,サイズを小さくします.
トレンド決定指標と組み合わせ,既知のトレンドへのエントリー信号に帯を使用する.
概してこれは信頼性の高いトレンドフォロー戦略である.トレンドを決定するためにボリンジャーバンドを使用し,操作が簡単である.主な利点は,トレンドの変化を把握するタイムリーな信号である.しかし,いくつかのウィップソーやパラメータ最適化困難があります.パラメータ最適化,フィルターを追加するなどの方法はリスクを制御し,安定性を向上させることができます.中程度のトレンド精度ニーズがあり,高い操作頻度を好む投資家に適しています.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Bollinger Bands Trend Strategy", shorttitle="BB Trend", overlay=true) source = close length = input(8, minval=1) mult = input(1.00, minval=0.001, maxval=50) basis = sma(source, length) dev = mult * stdev(source, length) upper = basis + dev lower = basis - dev buyEntry = crossover(source, upper) sellEntry = crossunder(source, lower) if (crossover(source, upper)) strategy.entry("BBandLE", strategy.long, stop=upper, oca_name="BollingerBands", comment="BBandLE") else strategy.cancel(id="BBandLE") if (crossunder(source, lower)) strategy.entry("BBandSE", strategy.short, stop=lower, oca_name="BollingerBands", comment="BBandSE") else strategy.cancel(id="BBandSE") //plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)