ボリンジャーバンドブレイクアウト反転取引戦略


作成日: 2024-03-08 14:08:53 最終変更日: 2024-03-08 14:08:53
コピー: 2 クリック数: 654
1
フォロー
1617
フォロワー

ボリンジャーバンドブレイクアウト反転取引戦略

概要

この戦略はブリン帯の指標に基づいており,主な考えは,価格がブリン帯を突破して軌道上または軌道下を走った後に,価格がブリン帯の内部に戻ることを待つこと,そして再帰点で突破の方向と同様のポジションを確立することです.この戦略は,価格が極域で反転することが多い特性を利用し,ブリン帯の突破と再帰の組み合わせによって市場の転換点を捕捉し,より高い勝利率を得ることを期待しています.

戦略原則

  1. ブリン帯の中軌,上軌,下軌を計算する. 中軌は移動平均,上軌,下軌は中軌加減一定標準差である.
  2. 価格がブリン帯の上線または下線を突破したかどうかを判断する. 閉盘価格が上線を超えた場合は,上線突破とみなされ,閉盘価格が下線を突破した場合は,下線突破とみなされる.
  3. 上方突破が発生した場合は,突破K線の最高価格をピークとして記録する. 下方突破が発生した場合は,突破K線の最低価格をピークとして記録する. ピークは,価格が戻るか否かを判断するために後続的に使用される.
  4. 突破が起きた後,価格がブリン帯内に戻ることを待つ.この時点で閉盘価格が上線と下線の間にある場合は,価格が戻ったと考えられる.
  5. 価格が逆転する時に,前K線が上向きに突破した場合は,[1]and inside) ならば多頭開きます. 前K線が下へ突破する場合は[1]” and inside “と表示され,空白で表示されます.
  6. 持仓管理:多頭持仓時,閉盘価格上半軌を突破すると平多;空頭持仓時,閉盘価格下半軌を突破すると平空.

優位分析

  1. ブリンには強い適応力があり,価格の変動に動的に調整することができ,トレンドと変動を捉えるのに役立ちます.
  2. ブルイン帯突破戦略と比べて,再帰条件が加えられ,追尾を一定程度回避でき,入場品質が向上する.
  3. 平仓条件は中軌を参考に,簡単で使いやすく,利益を守るのに優れている.
  4. ブリン帯の長さ,偏差倍数などのパラメータをカスタマイズでき,柔軟性が高い.

リスク分析

  1. ブリン帯のパラメータの選択が不適切である場合,早すぎたり遅すぎたりして,戦略のパフォーマンスを影響する可能性があります.パラメータを最適化することで緩和できます.
  2. ブリン帯周辺の価格の波動は,頻繁に空調が発生し,取引コストを増加させる可能性があります.
  3. 傾向が強い場合,価格が長期にわたってブリン帯内に戻らない場合,トレンドの利益が失われる可能性があります.
  4. ブリン帯の指標は,特定の品種や特定の状況では効果的ではないため,他の信号と組み合わせる必要があります.

最適化の方向

  1. 価格がブリン帯の上方でしばらく走った後,より確実に突破するような,より多くのフィルタリング条件を導入することも考えられます.またはMA角度,ADXなどのトレンド判断指標を補助判断に使用します.
  2. 震災の際には,限値リストとタイマーを追加して,盲目取引を避ける.
  3. 平仓では,ATRまたは均線を組み合わせて出場時間をコントロールできます.
  4. 異なる標識と周期に対してパラメータ最適化と特性の分析を行い,適切な取引標識と周期を選択する.
  5. ポジション管理の追加は考えられます.例えば,波動率が収縮する時にポジションを増やし,波動率が拡大する時にポジションを減らします.

要約する

ブリン帯突破逆戻り取引戦略は,価格が極端な状況に反応することを利用し,ブリン帯ツールを使用して開場条件を構築し,トレンドの開始点と終了点を一定程度に捕捉し,頻繁な取引を制御する簡単な実用的な量化取引戦略である.また,この戦略には,パラメータ選択,振動状況下での不良パフォーマンス,トレンド把握の不足などの問題がある.細部を最適化し,他のシグナルと組み合わせることで,この戦略の適応性と粗略性をさらに向上させる可能性がある.

ストラテジーソースコード
/*backtest
start: 2024-02-01 00:00:00
end: 2024-02-27 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(shorttitle="BB", title="Bollinger Bands", 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(1.7, minval=0.001, maxval=50, title="StdDev")

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
offset = input.int(0, "Offset", minval = -500, maxval = 500)
plot(basis, "Basis", color=#FF6D00, offset = offset)
p1 = plot(upper, "Upper", color=#2962FF, offset = offset)
p2 = plot(lower, "Lower", color=#2962FF, offset = offset)
fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95))

break_up = close > upper
break_down = close < lower
inside = close > lower and close < upper

sell_condition = break_up[1] and inside
buy_condition = break_down[1] and inside

// Conditions to close trades
close_sell_condition = close > basis
close_buy_condition = close < basis

trade_condition = sell_condition or buy_condition

// Tracking the high of the breakout candle
var float peak = na

if (not trade_condition)
    peak := close
if (break_up and peak < high)
    peak := high
if (break_down and peak > low)
    peak := low

// Entering positions
if (buy_condition)
    strategy.entry("Buy", strategy.long)
if (sell_condition)
    strategy.entry("Sell", strategy.short)

// Exiting positions when close crosses the basis
if (strategy.position_size > 0 and close_sell_condition) // If in a long position and close crosses above basis
    strategy.close("Buy")
if (strategy.position_size < 0 and close_buy_condition) // If in a short position and close crosses below basis
    strategy.close("Sell")