モメンタムインジケータークロスオーバーダイナミックストップロス戦略


作成日: 2024-02-29 13:55:16 最終変更日: 2024-02-29 13:55:16
コピー: 0 クリック数: 671
1
フォロー
1617
フォロワー

モメンタムインジケータークロスオーバーダイナミックストップロス戦略

概要

この戦略は,移動平均指標と動向指数指標を組み合わせて,バイインジケーターの交差信号を実現し,買入と売却のシグナルを発信する.同時に,戦略は,リスクを制御するためにダイナミック・トラッキング・ストップを追加する.

戦略原則

  1. 短期9日EMAと長期21日EMAを使って移動平均指標を構築する.短期EMAの上を長期EMAが穿ったときに買い信号を生成する.短期EMAの下を長期EMAが穿ったときに売り信号を生成する.
  2. ADX,+DI,および-DIを使用してDMI指標を構築する. +DIがDIを穿戴するときは買取信号; -DIが+DIを穿戴するときは売り出信号.
  3. EMA指数とDMI指数の信号を組み合わせ,つまり両指数が条件を満たす場合にのみ実際の買出信号が発せられる.
  4. ダイナミックストップで最高値/最低値を追跡してストップする.

優位分析

  1. 双指標は偽信号をフィルターし,信号の正確性を高めます.短期指標はトレンドの変化を捉え,長期指標は大きなトレンドの方向を決定します.
  2. 動力指数は,価格の傾向を早期に捉えることができ,特定のリードする特性を有する.
  3. ダイナミック・ストップ・メカニズムは,利潤を最大限に固定し,リスクをコントロールします.

リスク分析

  1. この2つの指標が合わさると,買入と売却のシグナルが減少し,機会の一部が逃される可能性があります.
  2. 指数のパラメータを正しく設定しない場合,取引頻度が高くなり,信号の質が悪くなる可能性があります.
  3. 止損設定が過度に緩やかな場合,損失のリスクが増加し,過度に厳格な場合は,トレンドと脱線するリスクが増加します.

最適化の方向

  1. 異なる長さのEMA長短パラメータの組み合わせをテストして,最適なパラメータを見つけます.
  2. 異なるADXパラメータの選択をテストし,DMI信号の質を向上させる.
  3. 利潤を最大限に確保し,リスクをコントロールできるように,ストップ・ロスのパラメータを最適化します.
  4. 信号の質をさらに向上させるため,さらに多くの波指標を追加することも考えられます.

要約する

この戦略は,移動平均と動量指標の優位性を統合し,二重確認信号,指標の間の互補を利用して戦略の収益性を向上させる.同時に,ダイナミック・トラッキング・ストップ・ローズ・メカニズムが戦略のリスクを効果的に制御できる.パラメータの最適化と規則の完善により,この戦略の還元能力と安定性が向上する見込みがある.

ストラテジーソースコード
/*backtest
start: 2023-02-22 00:00:00
end: 2024-02-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Combined EMA and DMI Strategy with Enhanced Table", overlay=true)

// Input parameters for EMA
shortTermEMA = input.int(9, title="Short-Term EMA Period")
longTermEMA = input.int(21, title="Long-Term EMA Period")
riskPercentageEMA = input.float(1, title="Risk Percentage EMA", minval=0.1, maxval=5, step=0.1)

// Calculate EMAs
emaShort = ta.ema(close, shortTermEMA)
emaLong = ta.ema(close, longTermEMA)

// EMA Crossover Strategy
longConditionEMA = emaShort > emaLong and emaShort[1] <= emaLong[1]
shortConditionEMA = emaShort < emaLong and emaShort[1] >= emaLong[1]

// Input parameters for DMI
adxlen = input(17, title="ADX Smoothing")
dilen = input(17, title="DI Length")

// DMI Logic
dirmov(len) =>
    up = ta.change(high)
    down = -ta.change(low)
    truerange = ta.tr
    plus = fixnan(100 * ta.rma(up > down and up > 0 ? up : 0, len) / truerange)
    minus = fixnan(100 * ta.rma(down > up and down > 0 ? down : 0, len) / truerange)
    [plus, minus]

adx(dilen, adxlen) => 
    [plus, minus] = dirmov(dilen)
    sum = plus + minus
    adxValue = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
    [adxValue, plus, minus]

[adxValue, up, down] = adx(dilen, adxlen)

// DMI Conditions
buyConditionDMI = up > down or (up and adxValue > down)
sellConditionDMI = down > up or (down and adxValue > up)

// Combined Conditions for Entry
longEntryCondition = longConditionEMA and buyConditionDMI
shortEntryCondition = shortConditionEMA and sellConditionDMI

// Combined Conditions for Exit
longExitCondition = shortConditionEMA
shortExitCondition = longConditionEMA

// Enter long trade based on combined conditions
if (longEntryCondition)
    strategy.entry("Long", strategy.long)

// Enter short trade based on combined conditions
if (shortEntryCondition)
    strategy.entry("Short", strategy.short)

// Exit trades
if (longExitCondition)
    strategy.close("Long")

if (shortExitCondition)
    strategy.close("Short")

// Plot EMAs
plot(emaShort, color=color.blue, title="Short-Term EMA")
plot(emaLong, color=color.red, title="Long-Term EMA")

// Create and fill the enhanced table
var tbl = table.new(position.top_right, 4, 1)
if (barstate.islast)
    table.cell(tbl, 0, 0, "ADX: " + str.tostring(adxValue), bgcolor=color.new(color.red, 90), width=15, height=4)
    table.cell(tbl, 1, 0, "+DI: " + str.tostring(up), bgcolor=color.new(color.blue, 90), width=15, height=4)
    table.cell(tbl, 2, 0, "-DI: " + str.tostring(down), bgcolor=color.new(color.orange, 90), width=15, height=4)