ダイナミックトレンド追跡のためのEMA-ADXマルチレベル利益獲得戦略

EMA ADX ATR
作成日: 2025-02-18 14:08:02 最終変更日: 2025-02-18 14:08:02
コピー: 0 クリック数: 405
1
フォロー
1617
フォロワー

ダイナミックトレンド追跡のためのEMA-ADXマルチレベル利益獲得戦略

概要

この戦略は,EMAとADXの指標を組み合わせたトレンド追跡取引システムで,多層のストップと移動のストップにより資金管理を最適化します.戦略は,EMA均線をトレンド方向として使用し,ADXの指標をトレンドの強さをフィルターし,利益分担のための3層のストップメカニズムを設計し,同時にATRを動的に調整します. ストップの位置を制御するリスク.

戦略原則

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

  1. 50周期EMA平均線を使用してトレンドの方向を判断する.価格がEMAを突破し,上方から開き,下方から開き
  2. 14周期ADX指数で弱走勢をフィルターし,ADX>20でトレンドが有効であることを確認する
  3. 14サイクルATRをベースに動的ストップローズを計算し,最低価格で多券減1ATR,最高価格で空券加1ATR
  4. 防水装置は3層に分かれています.
    • 1階:ATRの1倍で30%のポジションをクリアする
    • 2層:50%のポジションは2倍ATRで終了
    • 3層:20%のポジションは3倍ATRの移動ストップを使用
  5. 価格が2階のストップポイントに達すると,残ったすべてのポジションを自動的にクリアします.

戦略的優位性

  1. 多層のストップデザインは,利益を間に合わせ,大きな市場を見逃さないようにする
  2. モバイル・ストップ・メカニズムは,市場の変動に自律的に適応し,ダイナミックなリスク管理を提供します.
  3. ADXフィルタリングは,波動する市場の偽信号を効果的に回避します.
  4. EMAと価格交差は明確な入場シグナルを提供する
  5. 減量抑制は感情の波動を軽減し,戦略の長期的な実行に有利です.

戦略リスク

  1. 変動する市場での頻繁な出入は,コストの上昇につながる可能性があります.
  2. EMAは遅滞指数として,急速な反転時に不時反応する可能性があります.
  3. 固定 ADX 値は,異なる市場環境で調整が必要となる
  4. 多層ストップは,単一トレンドで早めに減仓する可能性がある. 緩和策:
  • ADXの値は,異なる市場周期の動態に応じて調整できます.
  • トレンド確認の指標を増やすことを検討する
  • ストップ比のより細かいパラメータ最適化

戦略最適化の方向性

  1. トレンド確認の強化のための取引量指標の導入
  2. 市場変動の動向に合わせてADXの値下げ調整
  3. ストップレベルでのポジション配分比率を最適化
  4. トレンドの強さの階層を高め,異なるストップ戦略に対応する
  5. 季節的要因と市場周期的判断を考慮する

要約する

これは,多層のストップとダイナミック・ストップで利益とリスクをバランスさせる,構造が整った,論理的に明確なトレンド追跡戦略である.戦略の全体的な設計は,量化取引の基本原則に適合し,良好な拡張性と最適化スペースを有している.合理的なパラメータ調整と最適化によるエグゼレーションにより,この戦略は,異なる市場環境で安定したパフォーマンスを維持すると見込まれている.

ストラテジーソースコード
/*backtest
start: 2024-03-06 18:40:00
end: 2025-02-17 00:00:00
period: 4h
basePeriod: 4h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("BTC Optimized Strategy v6", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=250)

// === 參數設定 ===
lengthEMA = input(50, title="EMA 週期")
adxLength = input(14, title="ADX 週期")
atrLength = input(14, title="ATR 週期")
riskReward = input(2.0, title="風險報酬比")
tp1_ratio = input(1.0, title="TP1 (ATR 倍數)")
tp2_ratio = input(2.0, title="TP2 (ATR 倍數)")
trailATR = input(3.0, title="移動止盈 ATR 倍數")

// === 計算技術指標 ===
ema = ta.ema(close, lengthEMA)
atr = ta.atr(atrLength)

// === 計算 ADX ===
upMove = math.max(high - nz(high[1], high), 0)
downMove = math.max(nz(low[1], low) - low, 0)
tr = math.max(math.max(high - low, math.abs(high - nz(close[1], close))), math.abs(low - nz(close[1], close)))
plusDM = upMove > downMove and upMove > 0 ? upMove : 0
minusDM = downMove > upMove and downMove > 0 ? downMove : 0
plusDI = 100 * ta.rma(plusDM, adxLength) / ta.rma(tr, adxLength)
minusDI = 100 * ta.rma(minusDM, adxLength) / ta.rma(tr, adxLength)
dx = 100 * math.abs(plusDI - minusDI) / (plusDI + minusDI)
adx = ta.rma(dx, adxLength)

// === 趨勢過濾條件 ===
isTrending = adx > 20

// === 進場條件 ===
longCondition = ta.crossover(close, ema) and isTrending
shortCondition = ta.crossunder(close, ema) and isTrending

// === 計算止損、止盈價格 ===
longStopLoss = low - atr
shortStopLoss = high + atr
longTP1 = close + tp1_ratio * atr
longTP2 = close + tp2_ratio * atr
shortTP1 = close - tp1_ratio * atr
shortTP2 = close - tp2_ratio * atr

// === 設定進場和出場 ===
if longCondition
    strategy.entry("Long", strategy.long)
    strategy.exit("Long_Exit1", from_entry="Long", qty_percent=30, limit=longTP1, stop=longStopLoss)
    strategy.exit("Long_Exit2", from_entry="Long", qty_percent=50, limit=longTP2, stop=longStopLoss)
    strategy.exit("Long_Trail", from_entry="Long", qty_percent=20, 
                 trail_points=atr * trailATR, 
                 trail_offset=atr * trailATR)

if shortCondition
    strategy.entry("Short", strategy.short)
    strategy.exit("Short_Exit1", from_entry="Short", qty_percent=30, limit=shortTP1, stop=shortStopLoss)
    strategy.exit("Short_Exit2", from_entry="Short", qty_percent=50, limit=shortTP2, stop=shortStopLoss)
    strategy.exit("Short_Trail", from_entry="Short", qty_percent=20, 
                 trail_points=atr * trailATR, 
                 trail_offset=atr * trailATR)

// === 當價格超過 TP2 後,自動平倉 ===
if close >= longTP2
    strategy.close("Long")

if close <= shortTP2
    strategy.close("Short")

// === 畫圖標示 ===
plotshape(series=longCondition, location=location.belowbar, color=color.blue, style=shape.labelup, title="買入")
plotshape(series=shortCondition, location=location.abovebar, color=color.red, style=shape.labeldown, title="賣出")
plot(ema, color=color.orange, title="EMA")