Momentum-Crossover-Strategie mit dynamischem Trailing-Stop Loss

Schriftsteller:ChaoZhang, Datum: 2024-02-29 13:55:16
Tags:

img

Übersicht

Diese Strategie kombiniert gleitende Durchschnittsindikatoren und Richtungsbewegungsindex (DMI) -Indikatoren, um Kauf- und Verkaufssignale zu erzeugen, die auf Dual-Indikator-Crossovers basieren.

Strategie Logik

  1. Erstellen Sie gleitende Durchschnittsindikatoren mit einem kurzen 9-tägigen EMA und einem langen 21-tägigen EMA. Ein Kaufsignal wird erzeugt, wenn der kurze EMA über den langen EMA überschreitet. Ein Verkaufssignal wird erzeugt, wenn der kurze EMA unter den langen EMA überschreitet.
  2. Erstellen Sie DMI-Indikatoren mit ADX, +DI und -DI. Ein Kaufsignal wird ausgelöst, wenn +DI über -DI geht. Ein Verkaufssignal wird ausgelöst, wenn -DI über +DI geht.
  3. Kombination der Signale von EMA und DMI, wobei beide Indikatoren Bedingungen erfüllen müssen, bevor tatsächliche Kauf- oder Verkaufssignale ausgegeben werden.
  4. Bei der Ermittlung der Höhe des Stop-Loss-Kurses werden die folgenden Informationen verwendet:

Analyse der Vorteile

  1. Kurzfristige Indikatoren erfassen Trendveränderungen, während langfristige die Gesamtrichtung bestimmen.
  2. Momentumindikatoren können Trendveränderungen frühzeitig mit einigen führenden Merkmalen erfassen.
  3. Dynamische Trailing-Stop-Loss-Systeme verhindern, dass Gewinne möglichst hoch sind und gleichzeitig Risiken kontrolliert werden.

Risikoanalyse

  1. Bei Dual-Indicator-Combos wird die Signalfrequenz reduziert und möglicherweise einige Möglichkeiten verpasst.
  2. Eine unzureichende Einstellung der Indikatoren kann zu einem Überhandel oder zu geringwertigen Signalen führen.
  3. Ein zu breit eingestellter Stop-Loss erhöht das Verlustrisiko, während ein zu eng eingestellter Stop-Loss das Risiko einer Trendauslösung erhöht.

Optimierungsrichtlinien

  1. Test EMA-Combos mit unterschiedlichen kurz- und langfristigen Längen, um das optimale Ergebnis zu finden.
  2. Optimierung der ADX-Parameter zur Verbesserung der DMI-Signalqualität.
  3. Die Stop-Loss-Parameter sind so abgestimmt, dass sie Gewinne erzielen und Risiken verwalten.
  4. Erwägen Sie, mehr Filter hinzuzufügen, um die Signalqualität weiter zu verbessern.

Schlussfolgerung

Diese Strategie kombiniert die Stärken von gleitenden Durchschnitten und Impulsindikatoren für die doppelte Bestätigung von Signalen und ergänzt sich gegenseitig, um die Rentabilität zu steigern.


/*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)

   

Mehr