トレンド確認に基づくマルチインジケーターダイナミックストップロス戦略

SMA MACD ADX Swing Low
作成日: 2025-02-20 11:19:58 最終変更日: 2025-02-20 11:19:58
コピー: 2 クリック数: 323
2
フォロー
319
フォロワー

トレンド確認に基づくマルチインジケーターダイナミックストップロス戦略 トレンド確認に基づくマルチインジケーターダイナミックストップロス戦略

概要

これは,複数の技術指標を組み合わせたトレンド追跡戦略で,主にSMA (単純移動平均),MACD (移動平均収束散乱指数) とADX (平均トレンド指数) の3つの指標の協同配合により,周線レベルで取引が行われます.この戦略は,動的ストップダウンの仕組みを採用し,揺動的な低点 (Swing Low) の識別によってリスク管理を最適化し,より精密なポジションコントロールを実現します.

戦略原則

この戦略の核心的な論理は,以下の3つの3つの検証メカニズムに基づいています.

  1. 価格が平均線より上方である場合,SMA ((30) による全体的なトレンドの方向を判断し,上昇傾向を表します.
  2. MACD ((9,18,9) を使って,価格動力を捕捉し,MACD線が信号線の上部で正値であることを要求する
  3. ADX ((14) を使ってトレンドの強さを確認し,ADX が25より大きい場合は,トレンドが充分であることを示す.
  4. この3つの条件を満たす場合
  5. ダイナミックストップを設定し,SMAを下回った価格で清算します.

戦略的優位性

  1. マルチメーターのクロス検証により,偽信号の影響を大幅に軽減
  2. 日中の波動の干渉を避けるため,周回線レベルの取引を採用
  3. 動的ストップメカニズム,低点を振動させることで自律的にストップを調整する
  4. ADXフィルタリングの弱まり,取引の質の向上
  5. トレンドリバースとストップダメージの双重保護を含む総合的なリスク管理

戦略リスク

  1. 複数の指標が信号を遅らせ,高速でチャンスを逃す
  2. 周回線レベルでの操作は,より大きな撤退に直面する可能性があります.
  3. 波動的な低点の識別は,激しい波動で不安定になる可能性があります.
  4. 十分な価格データを蓄積するには時間がかかります.
  5. 市場が揺れ動いている時,偽信号が頻繁に発生する可能性があります.

戦略最適化の方向性

  1. 市場変動の動向に合わせて適応指標のパラメータを導入することを検討する
  2. 取引量指標の検証を増やし,信号の信頼性を向上させる
  3. スイング・ローの認識アルゴリズムを改良する
  4. 市場環境の分類に追加し,異なる市場状態に対して異なるパラメータを採用
  5. モバイル・ストップの導入を考慮するストップロジックの最適化

要約する

この戦略は,複数の技術指標の協同作用により,堅牢なトレンド追跡システムを構築している.ダイナミック・ストップ・マネジメントは,中長期のトレンドを追跡するのに適した優れたリスク制御を提供する.この戦略の主要な優点は,信号の信頼性が高いこと,リスク管理の完善である.しかし,同時に,信号の遅れなどの課題に直面している.この戦略は,パラメータの自律性および市場環境の認識をさらに最適化することで,より良いパフォーマンスを期待している.

ストラテジーソースコード
/*backtest
start: 2024-02-20 00:00:00
end: 2024-03-12 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/

//@version=5
strategy("Invest SMA|MACD|ADX Long Weekly Strategy (BtTL)", overlay=true)

// SMA Inputs
smaLength = input.int(30, title="SMA Länge")
// MACD Inputs
macdFastLength = input.int(9, title="MACD schnelle Periode")
macdSlowLength = input.int(18, title="MACD langsame Perside")
macdSignalLength = input.int(9, title="MACD Signal Smoothing")
//ADX Inputs
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Länge")

// SMA-Berechnung
smaValue = ta.sma(close, smaLength)
isAboveSMA = close > smaValue
isBelowSMA = close < smaValue

// MACD-Berechnung
[macdLine, signalLine, _] = ta.macd(close, macdFastLength, macdSlowLength, macdSignalLength)
isMACDBuy = macdLine > signalLine and macdLine > 0

// Swing-Low Berechnung (5-Kerzen)
isSwingLow = low[2] > low[1] and low[3] > low[1] and low[1] < low and low[1] < low[4]
var float lastSwingLow = na
var float secondLastSwingLow = na

// Wenn ein neuer Swing-Low gefunden wird
if (isSwingLow[1])
    secondLastSwingLow := lastSwingLow
    lastSwingLow := low[1]

//ADX ermitteln
[pDI,mDI,ADX] = ta.dmi(dilen, adxlen)
IsInTrend = ADX > 25

// Einstiegskondition mit MACD und SMA
longCondition = isAboveSMA and isMACDBuy and IsInTrend
if (longCondition)
    strategy.entry("Long", strategy.long)

// Ausstiegskondition am vorletzten Swing-Low
if (isBelowSMA and na(secondLastSwingLow) == false)
    strategy.exit("Exit", from_entry="Long", stop=secondLastSwingLow)

// Reset bei Position schließen
if(strategy.position_size <= 0)
    secondLastSwingLow := na
    lastSwingLow := na

// Plots
plot(smaValue, title="SMA 30", color=#063eda, linewidth=2)
plot(na(lastSwingLow) ? na : lastSwingLow, title="Last Swing Low", color=#ffb13b, linewidth=1, style=plot.style_circles)
plot(na(secondLastSwingLow) ? na : secondLastSwingLow, title="Second Last Swing Low", color=color.red, linewidth=1, style=plot.style_circles)