平均方向指数フィルタに基づく移動平均拒否戦略

ADX MA WMA
作成日: 2024-05-17 10:35:58 最終変更日: 2024-05-17 10:35:58
コピー: 1 クリック数: 644
1
フォロー
1617
フォロワー

平均方向指数フィルタに基づく移動平均拒否戦略

概要

この戦略は,複数の移動平均線 ((MA) を主要な取引信号として使用し,平均方向指数 ((ADX) をフィルターとして使用する.戦略の主な考え方は,急速MA,遅いMA,および平均MAの関係を比較することによって,潜在的な多頭と空頭の機会を識別することです.同時に,トレンドの強度が十分な市場環境をフィルターするためにADX指標を使用して,取引信号の信頼性を向上させます.

戦略原則

  1. 速MA,遅MA,平均MAを計算する.
  2. 閉盤価格と遅いMAの関係を比較して,潜在的な多頭と空頭レベルを識別する.
  3. クローズアップ価格と急速MAの関係を比較して,多頭と空頭レベルを確認する.
  4. ADX指数は,トレンドの強さを測定するために,手動で計算されます.
  5. 高速MAが平均MAを上方へ突破し,ADXが設定値より大きく,多頭レベルが確認されたとき,多頭入場信号が生成する.
  6. 急速MAが平均MAを下向きに通過し,ADXが設定値より大きく,空頭レベルが確認されたとき,空頭入場信号が生成する.
  7. 収束価格がゆっくりとしたMAを横切るときは,多頭出場信号を生じます.収束価格がゆっくりとしたMAを横切るときは,空頭出場信号を生じます.

戦略的優位性

  1. 複数のMAを使用すると,市場動向や動力の変化をより全面的に捉えることができます.
  2. 潜在的取引機会は,高速MA,遅いMA,平均MAの関係を比較することによって識別できます.
  3. ADX指標をフィルターとして使用することで,波動的な市場において過剰な偽信号を生じることを避け,取引信号の信頼性を高めることができる.
  4. 戦略の論理は明確で,理解し,実行しやすい.

戦略リスク

  1. この戦略は,トレンドが不明な場合や市場の揺れが大きい場合,より多くの偽信号を生じ,頻繁に取引し,損失を招く可能性があります.
  2. 戦略はMAやADXなどの遅れの指標に依存し,初期のトレンド形成の機会を逃す可能性があります.
  3. 戦略のパラメータ設定 (MA長さやADX値など) は,戦略のパフォーマンスに大きな影響があり,異なる市場や品種に応じて最適化する必要があります.

戦略最適化の方向性

  1. RSI,MACDなどの他の技術指標を導入することを検討し,取引信号の信頼性と多様性を向上させる.
  2. 異なる市場環境では,市場の変化に適応するために異なるパラメータの組み合わせを設定できます.
  3. 潜在的損失を制御するために,ストップ・ロスやポジション管理などのリスク管理措置を導入する.
  4. 経済データや政策の変化などの基本的分析と組み合わせて,より包括的な市場見通しを得ることができます.

要約する

平均方向指数フィルターに基づく均線拒否戦略は,複数のMAとADX指標を利用して,潜在的な取引機会を識別し,低品質の取引信号をフィルターします.この戦略の論理は明確で,理解しやすく,実行できますが,実際のアプリケーションでは,市場の環境の変化に注意し,他の技術指標とリスク管理措置と組み合わせて最適化する必要があります.

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

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © gavinc745

//@version=5
strategy("MA Rejection Strategy with ADX Filter", overlay=true)

// Input parameters
fastMALength = input.int(10, title="Fast MA Length", minval=1)
slowMALength = input.int(50, title="Slow MA Length", minval=1)
averageMALength = input.int(20, title="Average MA Length", minval=1)
adxLength = input.int(14, title="ADX Length", minval=1)
adxThreshold = input.int(20, title="ADX Threshold", minval=1)

// Calculate moving averages
fastMA = ta.wma(close, fastMALength)
slowMA = ta.wma(close, slowMALength)
averageMA = ta.wma(close, averageMALength)

// Calculate ADX manually
dmPlus = high - high[1]
dmMinus = low[1] - low
trueRange = ta.tr

dmPlusSmoothed = ta.wma(dmPlus > 0 and dmPlus > dmMinus ? dmPlus : 0, adxLength)
dmMinusSmoothed = ta.wma(dmMinus > 0 and dmMinus > dmPlus ? dmMinus : 0, adxLength)
trSmoothed = ta.wma(trueRange, adxLength)

diPlus = dmPlusSmoothed / trSmoothed * 100
diMinus = dmMinusSmoothed / trSmoothed * 100
adx = ta.wma(math.abs(diPlus - diMinus) / (diPlus + diMinus) * 100, adxLength)

// Identify potential levels
potentialLongLevel = low < slowMA and close > slowMA
potentialShortLevel = high > slowMA and close < slowMA

// Confirm levels
confirmedLongLevel = potentialLongLevel and close > fastMA
confirmedShortLevel = potentialShortLevel and close < fastMA

// Entry signals
longEntry = confirmedLongLevel and ta.crossover(fastMA, averageMA) and adx > adxThreshold
shortEntry = confirmedShortLevel and ta.crossunder(fastMA, averageMA) and adx > adxThreshold

// Exit signals
longExit = ta.crossunder(close, slowMA)
shortExit = ta.crossover(close, slowMA)

// Plot signals
plotshape(longEntry, title="Long Entry", location=location.belowbar, style=shape.triangleup, size=size.small, color=color.green)
plotshape(shortEntry, title="Short Entry", location=location.abovebar, style=shape.triangledown, size=size.small, color=color.red)

// Plot moving averages and ADX
plot(fastMA, title="Fast MA", color=color.blue)
plot(slowMA, title="Slow MA", color=color.red)
plot(averageMA, title="Average MA", color=color.orange)
// plot(adx, title="ADX", color=color.purple)
// hline(adxThreshold, title="ADX Threshold", color=color.gray, linestyle=hline.style_dashed)

// Execute trades
if longEntry
    strategy.entry("Long", strategy.long)
else if longExit
    strategy.close("Long")

if shortEntry
    strategy.entry("Short", strategy.short)
else if shortExit
    strategy.close("Short")