トリプルスーパートレンドとボリンジャーバンドを組み合わせたマルチインジケータートレンドフォロー戦略

Boll ST ATR SMA BB MA
作成日: 2024-12-20 14:28:58 最終変更日: 2024-12-20 14:28:58
コピー: 0 クリック数: 460
1
フォロー
1617
フォロワー

トリプルスーパートレンドとボリンジャーバンドを組み合わせたマルチインジケータートレンドフォロー戦略

概要

この戦略は,ブリン帯と3重超トレンドの指標を組み合わせた方法で取引します.ブリン帯の波動区間判断と3重超トレンドのトレンド確認により,堅牢なトレンド追跡システムが形成されます.ブリン帯は,価格の極端な変動を識別するために使用され,三重超トレンドは,異なるパラメータの設定によってトレンドの方向性の複数の確認を提供します.偽の信号のリスクを減らすために,すべての信号が一致するときに取引されます.この組み合わせは,トレンド追跡の優位性を維持し,取引の信頼性を高めます.

戦略原則

戦略の中核となるロジックには、次の主要な部分が含まれます。

  1. 20周期のブリン帯を使用し,標準差倍数は2.0で,価格変動を判断する
  2. 3つの超トレンドラインを設定し,周期は10で,パラメータは3.0,4.0および5.0です.
  3. 多頭入場条件:価格がブリン帯を突破して軌道に乗っており,3つの超トレンドラインは上昇傾向を示しています.
  4. 空頭入場条件:価格がブリン帯下位線を突破し,3つの超トレンドラインが下位トレンドを示す
  5. 任意の超トレンドラインが方向を変えたとき,平仓は現在のポジションを保持する
  6. 中間価格線を参照として使用し,視覚的な効果を高める

戦略的優位性

  1. 多重確認メカニズム: ブリン帯と三重超トレンドの組み合わせにより,偽信号を大幅に減少させる
  2. 強いトレンド追跡能力:超トレンド指標の漸進的パラメータ設定により,さまざまなレベルのトレンドを効果的に捉えることができます
  3. リスク管理の完善:トレンドの転換の兆候に迅速に平仓し,制御した撤回
  4. パラメータの柔軟性: 各指標のパラメータは,異なる市場特性に合わせて最適化できます
  5. 高い自動化度:戦略の論理が明確で,システム化が容易

戦略リスク

  1. 横盤の振動で偽の突破シグナルが頻繁に発生する可能性がある
  2. スライドポイントの影響: 変動の激しい時期には,大きなスライドポイント損失が発生する可能性があります.
  3. 遅延リスク:複数の認証により,遅刻の入学が起こりうる
  4. パラメータ感度: 異なるパラメータの組み合わせにより、戦略のパフォーマンスに大きな違いが生じる可能性があります。
  5. 市場環境依存: 戦略は,トレンドが顕著な市場において,より良く機能する.

戦略最適化の方向性

  1. 取引量指標の導入:取引量による価格突破の有効性
  2. オプティマイズされたストップメカニズム:移動ストップまたはATRベースのダイナミックストップを追加できます.
  3. 時間のフィルターを増やす: 低効率な波動を避けるために,特定の時間帯で取引を禁止する
  4. 波動率のフィルターを追加: 波動性の高い時期のポジションの調整または取引の停止
  5. 開発パラメータの自己適応メカニズム:市場の状況に応じてパラメータを動的に調整する

要約する

これは,ブリン帯と三重超トレンドを組み合わせたトレンド追跡戦略で,複数の技術指標の確認によって取引の信頼性を高める.戦略は,強力なトレンドキャプチャ能力とリスク管理能力を持っているが,戦略のパフォーマンスに対する市場環境の影響にも注意する必要がある.継続的な最適化と改善により,戦略は,異なる市場条件下で安定したパフォーマンスを維持することが期待されている.

ストラテジーソースコード
//@version=5
strategy("Demo GPT - Bollinger + Triple Supertrend Combo", overlay=true, commission_type=strategy.commission.percent, commission_value=0.1, slippage=3)

// -------------------------------
// User Input for Date Range
// -------------------------------
startDate = input(title="Start Date", defval=timestamp("2018-01-01 00:00:00"))
endDate   = input(title="End Date",   defval=timestamp("2069-12-31 23:59:59"))

// -------------------------------
// Bollinger Band Inputs
// -------------------------------
lengthBB = input.int(20, "Bollinger Length")
multBB   = input.float(2.0, "Bollinger Multiplier")

// -------------------------------
// Supertrend Inputs for 3 lines
// -------------------------------
// Line 1
atrPeriod1 = input.int(10, "ATR Length (Line 1)", minval = 1)
factor1    = input.float(3.0, "Factor (Line 1)", minval = 0.01, step = 0.01)

// Line 2
atrPeriod2 = input.int(10, "ATR Length (Line 2)", minval = 1)
factor2    = input.float(4.0, "Factor (Line 2)", minval = 0.01, step = 0.01)

// Line 3
atrPeriod3 = input.int(10, "ATR Length (Line 3)", minval = 1)
factor3    = input.float(5.0, "Factor (Line 3)", minval = 0.01, step = 0.01)

// -------------------------------
// Bollinger Band Calculation
// -------------------------------
basis = ta.sma(close, lengthBB)
dev   = multBB * ta.stdev(close, lengthBB)
upperBand = basis + dev
lowerBand = basis - dev

// Plot Bollinger Bands
plot(upperBand, "Upper BB", color=color.new(color.blue, 0))
plot(basis,     "Basis",    color=color.new(color.gray, 0))
plot(lowerBand, "Lower BB", color=color.new(color.blue, 0))

// -------------------------------
// Supertrend Calculation Line 1
// -------------------------------
[supertrendLine1, direction1] = ta.supertrend(factor1, atrPeriod1)
supertrendLine1 := barstate.isfirst ? na : supertrendLine1

upTrend1   = plot(direction1 < 0 ? supertrendLine1 : na, "Up Trend 1",   color = color.green, style = plot.style_linebr)
downTrend1 = plot(direction1 < 0 ? na : supertrendLine1, "Down Trend 1", color = color.red,   style = plot.style_linebr)

// -------------------------------
// Supertrend Calculation Line 2
// -------------------------------
[supertrendLine2, direction2] = ta.supertrend(factor2, atrPeriod2)
supertrendLine2 := barstate.isfirst ? na : supertrendLine2

upTrend2   = plot(direction2 < 0 ? supertrendLine2 : na, "Up Trend 2",   color = color.new(color.green, 0), style = plot.style_linebr)
downTrend2 = plot(direction2 < 0 ? na : supertrendLine2, "Down Trend 2", color = color.new(color.red, 0),   style = plot.style_linebr)

// -------------------------------
// Supertrend Calculation Line 3
// -------------------------------
[supertrendLine3, direction3] = ta.supertrend(factor3, atrPeriod3)
supertrendLine3 := barstate.isfirst ? na : supertrendLine3

upTrend3   = plot(direction3 < 0 ? supertrendLine3 : na, "Up Trend 3",   color = color.new(color.green, 0), style = plot.style_linebr)
downTrend3 = plot(direction3 < 0 ? na : supertrendLine3, "Down Trend 3", color = color.new(color.red, 0),   style = plot.style_linebr)

// -------------------------------
// Middle line for fill (used as a reference line)
// -------------------------------
bodyMiddle = plot(barstate.isfirst ? na : (open + close) / 2, "Body Middle", display = display.none)

// Fill areas for each supertrend line
fill(bodyMiddle, upTrend1,   color.new(color.green, 90), fillgaps = false)
fill(bodyMiddle, downTrend1, color.new(color.red,   90), fillgaps = false)

fill(bodyMiddle, upTrend2,   color.new(color.green, 90), fillgaps = false)
fill(bodyMiddle, downTrend2, color.new(color.red,   90), fillgaps = false)

fill(bodyMiddle, upTrend3,   color.new(color.green, 90), fillgaps = false)
fill(bodyMiddle, downTrend3, color.new(color.red,   90), fillgaps = false)

// Alerts for the first line only (as an example)
alertcondition(direction1[1] > direction1, title='Downtrend to Uptrend (Line 1)', message='Supertrend Line 1 switched from Downtrend to Uptrend')
alertcondition(direction1[1] < direction1, title='Uptrend to Downtrend (Line 1)', message='Supertrend Line 1 switched from Uptrend to Downtrend')
alertcondition(direction1[1] != direction1, title='Trend Change (Line 1)', message='Supertrend Line 1 switched trend')

// -------------------------------
// Strategy Logic
// -------------------------------
inDateRange = true

// Long Conditions
longEntryCondition = inDateRange and close > upperBand and direction1 < 0 and direction2 < 0 and direction3 < 0
longExitCondition = direction1 > 0 or direction2 > 0 or direction3 > 0

// Short Conditions
shortEntryCondition = inDateRange and close < lowerBand and direction1 > 0 and direction2 > 0 and direction3 > 0
shortExitCondition = direction1 < 0 or direction2 < 0 or direction3 < 0

// Execute Long Trades
if longEntryCondition and strategy.position_size <= 0
    strategy.entry("Long", strategy.long)

if strategy.position_size > 0 and longExitCondition
    strategy.close("Long")

// Execute Short Trades
if shortEntryCondition and strategy.position_size >= 0
    strategy.entry("Short", strategy.short)

if strategy.position_size < 0 and shortExitCondition
    strategy.close("Short")