ボリンジャーバンドとウッディCCIの複数の指標を組み合わせて取引シグナルをフィルタリングする戦略

BB CCI MA OBV ATR SMA TP SL
作成日: 2024-12-27 15:32:30 最終変更日: 2024-12-27 15:32:30
コピー: 0 クリック数: 416
1
フォロー
1617
フォロワー

ボリンジャーバンドとウッディCCIの複数の指標を組み合わせて取引シグナルをフィルタリングする戦略

概要

この戦略は、ボリンジャーバンド、ウッディーズ CCI、移動平均 (MA)、オンバランスボリューム (OBV) を組み合わせたマルチインジケーター取引システムです。この戦略では、ボリンジャー バンドを使用して市場のボラティリティ範囲を提供し、CCI インジケーターを使用して取引シグナルをフィルター処理し、移動平均システムと取引量の確認を組み合わせて、市場のトレンドが明確なときに取引を行います。同時に、ATR を使用して利益確定ポジションと損切りポジションを動的に設定し、リスクを効果的に制御します。

戦略原則

戦略の中核となるロジックは、次の主要な要素に基づいています。

  1. 2つの標準偏差ボリンジャーバンド(1倍と2倍)を使用して価格変動チャネルを構築し、市場変動範囲の参照を提供します。
  2. 6期間および14期間のCCI指標をシグナルフィルターとして使用するには、2つの期間のCCIが同じ方向であることを確認する必要があります。
  3. 50期間と200期間の移動平均線を組み合わせて市場の動向を判断し、移動平均線が交差したときに最初の取引シグナルを生成します。
  4. ボリュームの傾向は、OBV インジケーターの 10 期間平滑化によって確認されます。
  5. 14 期間の ATR を使用して、利益確定と損失確定を動的に設定します。ロング ポジションの場合、利益確定は ATR の 2 倍、損失確定は ATR の 1 倍です。ショート ポジションの場合は、その逆になります。

戦略的優位性

  1. 複数の指標のクロス検証により、誤ったシグナルの確率が大幅に減少します。
  2. ボリンジャーバンドとCCIの組み合わせは、市場のボラティリティを正確に判断します。
  3. 長期および短期の移動平均システムは、全体的な傾向を効果的に把握します
  4. OBVはボリュームサポートを確認し、信号の信頼性を向上します
  5. さまざまな市場環境に適応するための動的なストッププロフィットとストップロスの設定
  6. 取引シグナルは明確で、実行は標準的であり、定量化と実装が容易です。

戦略リスク

  1. 複数のインジケーターを使用すると信号遅延が発生し、最適なエントリー時間を逃す可能性があります。
  2. 不安定な市場ではストップロスが頻繁に発動される可能性がある
  3. パラメータ最適化には過剰適合のリスクがある
  4. 激しいボラティリティの期間中はストップロスがタイムリーでない可能性があります 対策:
  • さまざまな市場サイクルに応じて指標パラメータを動的に調整する
  • リトレースメントとポジション制御のリアルタイム監視
  • パラメータの有効性を定期的にチェックする
  • 最大損失限度額を設定する

戦略最適化の方向性

  1. ボラティリティが高い時期にポジションを調整するための市場ボラティリティ指標を導入する
  2. 変動の激しい市場での取引を避けるためにトレンド強度フィルターを追加します
  3. CCIサイクル選択を最適化し、信号感度を向上
  4. 利益確定を一括で行うなど、ストッププロフィットとストップロスの仕組みを改善する
  5. 異常取引量警告メカニズムを追加

要約する

これは、複数のシグナルの確認を通じて取引の精度を向上させる、テクニカル指標の組み合わせに基づいた完全な取引システムです。この戦略は合理的に設計されており、リスクは適切に管理されており、実用的価値も高い。実際の取引でのテストには保守的なポジションを使用し、市場の状況に基づいてパラメータを継続的に最適化することをお勧めします。

ストラテジーソースコード
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-25 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy(shorttitle="BB Debug + Woodies CCI Filter", title="Debug Buy/Sell Signals with Woodies CCI Filter", overlay=true)

// Input Parameters
length = input.int(20, minval=1, title="BB MA Length")
src = input.source(close, title="BB Source")
mult1 = input.float(1.0, minval=0.001, maxval=50, title="BB Multiplier 1 (Std Dev 1)")
mult2 = input.float(2.0, minval=0.001, maxval=50, title="BB Multiplier 2 (Std Dev 2)")
ma_length = input.int(50, minval=1, title="MA Length")
ma_long_length = input.int(200, minval=1, title="Long MA Length")
obv_smoothing = input.int(10, minval=1, title="OBV Smoothing Length")
atr_length = input.int(14, minval=1, title="ATR Length") // ATR Length for TP/SL

// Bollinger Bands
basis = ta.sma(src, length)
dev1 = mult1 * ta.stdev(src, length)
dev2 = mult2 * ta.stdev(src, length)

upper_1 = basis + dev1
lower_1 = basis - dev1
upper_2 = basis + dev2
lower_2 = basis - dev2

plot(basis, color=color.blue, title="BB MA")
p1 = plot(upper_1, color=color.new(color.green, 80), title="BB Upper 1")
p2 = plot(lower_1, color=color.new(color.green, 80), title="BB Lower 1")
p3 = plot(upper_2, color=color.new(color.red, 80), title="BB Upper 2")
p4 = plot(lower_2, color=color.new(color.red, 80), title="BB Lower 2")

fill(p1, p2, color=color.new(color.green, 90))
fill(p3, p4, color=color.new(color.red, 90))

// Moving Averages
ma_short = ta.sma(close, ma_length)
ma_long = ta.sma(close, ma_long_length)
plot(ma_short, color=color.orange, title="MA Short")
plot(ma_long, color=color.yellow, title="MA Long")

// OBV and Smoothing
obv = ta.cum(ta.change(close) > 0 ? volume : ta.change(close) < 0 ? -volume : 0)
obv_smooth = ta.sma(obv, obv_smoothing)

// Debugging: Buy/Sell Signals
debugBuy = ta.crossover(close, ma_short)
debugSell = ta.crossunder(close, ma_short)

// Woodies CCI
cciTurboLength = 6
cci14Length = 14
cciTurbo = ta.cci(src, cciTurboLength)
cci14 = ta.cci(src, cci14Length)

// Filter: Only allow trades when CCI confirms the signal
cciBuyFilter = cciTurbo > 0 and cci14 > 0
cciSellFilter = cciTurbo < 0 and cci14 < 0

finalBuySignal = debugBuy and cciBuyFilter
finalSellSignal = debugSell and cciSellFilter

// Plot Debug Buy/Sell Signals
plotshape(finalBuySignal, title="Filtered Buy", location=location.belowbar, color=color.lime, style=shape.triangleup, size=size.normal)
plotshape(finalSellSignal, title="Filtered Sell", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.normal)

// Change candle color based on filtered signals
barcolor(finalBuySignal ? color.lime : finalSellSignal ? color.red : na)

// ATR for Stop Loss and Take Profit
atr = ta.atr(atr_length)
tp_long = close + 2 * atr  // Take Profit for Long = 2x ATR
sl_long = close - 1 * atr  // Stop Loss for Long = 1x ATR
tp_short = close - 2 * atr // Take Profit for Short = 2x ATR
sl_short = close + 1 * atr // Stop Loss for Short = 1x ATR

// Strategy Execution
if (finalBuySignal)
    strategy.entry("Buy", strategy.long)
    strategy.exit("Take Profit/Stop Loss", "Buy", limit=tp_long, stop=sl_long)

if (finalSellSignal)
    strategy.entry("Sell", strategy.short)
    strategy.exit("Take Profit/Stop Loss", "Sell", limit=tp_short, stop=sl_short)

// Check for BTC/USDT pair
isBTCUSDT = syminfo.ticker == "BTCUSDT"

// Add alerts only for BTC/USDT
alertcondition(isBTCUSDT and finalBuySignal, title="BTCUSDT Buy Signal", message="Buy signal detected for BTCUSDT!")
alertcondition(isBTCUSDT and finalSellSignal, title="BTCUSDT Sell Signal", message="Sell signal detected for BTCUSDT!")