ボリンジャーバンドに基づくダブルトラックブレイクアウト取引戦略


作成日: 2024-02-05 14:05:47 最終変更日: 2024-02-05 14:05:47
コピー: 4 クリック数: 660
1
フォロー
1617
フォロワー

ボリンジャーバンドに基づくダブルトラックブレイクアウト取引戦略

概要

この戦略はブリン帯の双軌道突破取引戦略に基づいています. ブリン帯の上線と下線を買入と売却のシグナルとして使用し,リスクを制御するためにストップ・ロスを設定しています.

戦略原則

この戦略はブリン帯の上線と下線を使用する. ブリン帯は均線とそれに対応する2つの標準差通路で構成されている. 価格がブリン帯を接触または突破すると,売り信号が生じ,価格がブリン帯を接触または突破すると,買い信号が生じます. さらに,この戦略は,ストップ・ロスを設定しています.

具体的には,戦略は,指定された周期 (例えば20日) の平均と標準差の2倍を計算してブリン帯を描画する. 上線は平均と標準差の2倍,下線は平均と標準差の2倍を引く. 閉盘価格が上線より大きくまたは等しいときは,売り信号を発信する. 閉盘価格が下線より小さくまたは等しいときは,買い信号を発信する. さらに,価格が平均線より一定の割合 (例えば1%) 低い場合,ストップ・ロスの信号を発信する.

戦略的優位性

この戦略はブリン帯の特性を利用し,価格が異常な波動を起こしたときに取引信号を発信することができ,その結果,価格の逆転の機会を掴むことができる.単に均線戦略を追跡するよりも,この戦略は波動が拡大したときに取引信号を発信することができ,偽の突破のリスクをある程度回避する.

この戦略は,単純な双軌道の突破戦略と比較して,止損機構を追加している.これは,個々の誤信号による損失を効果的に制御できる.止損ポイントの設定も,平均線に近い,合理的で,過度に激進的な止損による過度の損失を避ける.

戦略リスク

この戦略の最大のリスクは,ブリン帯自体が取引信号の有効性を保証できないことである.市場が特殊な状況に遭遇したとき,価格が不合理に大幅な波動を起こし,ブリン帯が発した取引信号は誤りである可能性がある.このとき,大きな損失を引き起こす可能性が高い.

また,ストップポイントの設定があまりに過激な場合や保守的な場合もあり,そのいずれも最終的な利益に影響する.ストップ幅が大きすぎると,有効な信号は頻繁にストップされる可能性がある.ストップ幅が小さすぎると,損失を効果的に制御できない.

戦略最適化の方向性

この戦略は以下の点で最適化できます.

  1. 平均周期,標準差倍数,停止比率などの異なる数値の異なるパラメータの組み合わせをテストし,最適なパラメータを探します.

  2. 複数のフィルター条件を形成し,誤った信号を避けるために,他の指標の判断を追加します.

  3. 利害を抑える戦略を最適化し,移動式・分期式などの利害を抑える方法を単純に抑える代わりに採用する.

  4. 異なる時間周期を組み合わせたブリン帯は,取引信号の確認を行い,被套を避ける.

要約する

この戦略は,全体として,トレンドフォローと双線突破を組み合わせた実用的な戦略である.価格変動が拡大するときに反転の機会を掴み,リスクを制御するためにストップを設定することができる.パラメータの最適化,信号フィルタリングの追加,およびストップの戦略の最適化などの手段によって,戦略の安定性と収益性をさらに強化することができる.

ストラテジーソースコード
/*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))