Momentum-Indikator-Crossover-Strategie mit dynamischer Stop-Loss-Strategie


Erstellungsdatum: 2024-02-29 13:55:16 zuletzt geändert: 2024-02-29 13:55:16
Kopie: 0 Klicks: 671
1
konzentrieren Sie sich auf
1617
Anhänger

Momentum-Indikator-Crossover-Strategie mit dynamischer Stop-Loss-Strategie

Überblick

Die Strategie kombiniert die Moving Average mit dem Moving Index und ermöglicht die Kreuzung der beiden Indikatoren, um ein Kauf- und Verkaufssignal zu erzeugen. Die Strategie beinhaltet außerdem einen dynamischen Stop-Loss, um das Risiko zu kontrollieren.

Strategieprinzip

  1. Der Moving-Average-Indikator wird mit einer 9-Tage-EMA und einer 21-Tage-EMA erstellt. Es wird ein Kaufsignal erzeugt, wenn ein langfristiger EMA über einer kurzfristigen EMA liegt. Es wird ein Verkaufsignal erzeugt, wenn ein langfristiger EMA unter einer kurzfristigen EMA liegt.
  2. Die DMI-Indikatoren werden mit ADX, +DI und -DI erstellt. Bei +DI ist -DI ein Kaufsignal; bei -DI ist +DI ein Verkaufssignal.
  3. Die Kombination von EMA- und DMI-Signalen erzeugt ein tatsächliches Kauf- und Verkaufssignal, wenn beide Indikatoren die Bedingungen erfüllen.
  4. Verwenden Sie einen dynamischen Stop-Loss, um den Höchst-/Tiefstpreis zu verfolgen.

Analyse der Stärken

  1. Der Doppelindikator kombiniert das Filtern von Falschsignalen und erhöht die Signalgenauigkeit. Der kurzfristige Indikator fängt Trendänderungen auf. Der langfristige Indikator bestimmt die Richtung des großen Trends.
  2. Der Dynamik-Indikator kann die Preisentwicklung im Voraus erfassen und hat bestimmte führende Eigenschaften.
  3. Die dynamische Stop-Loss-Mechanik maximiert die Gewinne und kontrolliert die Risiken.

Risikoanalyse

  1. Bei einer Kombination der beiden Indikatoren werden weniger Kauf- und Verkaufssignale gesendet, wodurch möglicherweise einige Gelegenheiten verpasst werden.
  2. Die falsche Einstellung der Indikatorparameter kann zu einer zu hohen Handelsfrequenz oder einer schlechten Signalqualität führen.
  3. Eine zu lockere Stop-Loss-Einstellung erhöht die Gefahr von Verlusten; eine zu strenge Einstellung erhöht die Gefahr von Trendentfremdung.

Optimierungsrichtung

  1. Testen Sie Kombinationen von EMA-Lang- und Kurzzeitparametern unterschiedlicher Länge, um die optimale Parameter zu finden.
  2. Verschiedene ADX-Parameter werden getestet, um die DMI-Signalqualität zu verbessern.
  3. Optimierung der Stop-Loss-Parameter, so dass sie sowohl maximale Gewinne als auch Risiken kontrollieren können.
  4. Es kann in Erwägung gezogen werden, weitere Filteranzeigen hinzuzufügen, um die Signalqualität weiter zu verbessern.

Zusammenfassen

Die Strategie integriert die Vorteile von Moving Averages und Dynamic Indicators, bietet eine doppelte Bestätigung der Signale und nutzt die Kompensation zwischen den Indikatoren, um die Ertragsfähigkeit der Strategie zu verbessern. Gleichzeitig kann der Stop-Loss-Mechanismus mit dynamischer Verfolgung die Risiken der Strategie effektiv kontrollieren. Durch die Optimierung der Parameter und die Verbesserung der Regeln werden die Rendite und Stabilität der Strategie verbessert.

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