Momentum Moving Average Crossover Trend nach der Strategie

Schriftsteller:ChaoZhang, Datum: 23.10.2023
Tags:

img

Übersicht

Diese Strategie kombiniert gleitende Durchschnitts-Kreuzungen und Momentum-Indikatoren, um Trends effektiv zu verfolgen und umzukehren. Zuerst verwendet sie schnelle und langsame gleitende Durchschnitte, um goldene Kreuz-Lange-Signale und Todekreuz-Kürze-Signale zu generieren. Dann mit Momentum-Indikatoren bestimmter Parameter, wenn die Dynamik auf dem schnellen MA nach dem goldenen Kreuz wieder auftaucht, wird der Trend als fortlaufend betrachtet und die Long-Position wird gehalten. Wenn die Dynamik abfällt, gilt es als Trendumkehrung und die bestehende Position wird geschlossen. Die gleiche Logik gilt für Todekreuz-Kürze-Signale, wenn Trendumkehrungen verfolgt werden. ADX-Filter werden auch verwendet, um falsche Signale zu vermeiden, wenn sie nicht im Trendzustand sind.

Strategie Logik

Die Kernlogik dieser Strategie basiert auf Trendsignalen von MA-Crossovers und Trendumkehrsignalen von Momentumindikatoren.

  1. Berechnung des schnellen MA-Preises1 (5-Perioden-HMA) und des langsamen MA-Preises2 (7-Perioden-HMA).

  2. Goldenes Kreuz mit Preis1 über Preis2 erzeugt ein langes Signal. Todeskreuz mit Preis1 unter Preis2 erzeugt ein kurzes Signal. Dies ist die übliche Verwendung von MAs.

  3. Wenn nach dem Long-Signal die Dynamik des Kurses roc1 wieder auftaucht, gilt der Trend als fortgesetzt und die Long-Position wird gehalten.

  4. Wenn sich die Dynamik roc1 verringert, gilt dies als Trendumkehr und die bestehende Position wird geschlossen.

  5. Einführung des ADX-Schwellenwerts, um falsche Signale zu vermeiden, wenn sie nicht im Trendzustand sind.

Analyse der Vorteile

Im Vergleich zu einfachen MA-Strategien besteht der größte Vorteil dieser Strategie in der Einführung von Dynamikindikatoren, um Trendumkehrungen schneller und genauer zu bestimmen.

  1. MAs selbst verzögern die Preisänderungen, während Momentumindikatoren schnell Umkehrsignale für rechtzeitige Stop-Loss- oder Umkehrhandel erfassen können.

  2. Umkehrsignale, die auf Dynamik basieren, sind zuverlässiger und vermeiden unnötige Open/Close-Orders während des Trendhandels.

  3. ADX vermeidet falsche Signale in nicht-trendigen Märkten und konzentriert die Strategie stärker auf Trends mit höheren Gewinnchancen.

  4. Die Logik ist einfach und leicht verständlich, geeignet für Anfänger im Algo-Handel.

  5. Großer Optimierungsraum durch Anpassung von MA-Perioden, Dynamikparametern usw. für verschiedene Märkte.

Risikoanalyse

Die wichtigsten Risiken dieser Strategie sind folgende:

  1. Die Verzögerung von MAs, die zu verzögerten Signalen führen kann, fehlt die beste Einstiegspunkte.

  2. Falsche Ausbrüche, die unnötige Ein- oder Ausgänge verursachen.

  3. Die Erkennung von Trendumkehrungen beruht auf der Dynamik, die bei riesigen Marktschwankungen schwanken kann.

  4. ADX ist unvollkommen bei der Erkennung von Trends und Konsolidierungen.

  5. Es sind keine Handelskosten zu berücksichtigen, sondern ein angemessener Stop-Loss für den realen Handel.

Optimierungsrichtlinien

Die Strategie kann in folgenden Bereichen weiter optimiert werden:

  1. Versuchen Sie andere Arten von MA oder passen Sie die MA-Parameter für bessere Glättungseffekte an.

  2. Optimieren Sie die Länge des Impulsindikators für eine höhere Empfindlichkeit, um Preisumkehrungen zu erfassen.

  3. Stellen Sie Preisfilter ein, wenn sich die Dynamik umkehrt, um nicht durch kurzfristige Schwankungen irregeführt zu werden.

  4. Verbesserung der ADX-Nutzung durch Verwendung verschiedener Parameter auf verschiedenen ADX-Leveln.

  5. Einführung von Lautstärkenindikatoren usw. zur Verbesserung der Signalqualität und zum Filtern falscher Ausbrüche.

  6. Einheitliche Handelsverluste zu kontrollieren.Evaluieren Sie realistische Handelskosten, um angemessene Gewinnziele und Stop-Loss zu setzen.

Zusammenfassung

Diese Strategie kombiniert die Vorteile von MA und Momentum-Indikatoren, um Trends zu verfolgen und Umkehrungen zu erfassen. Im Vergleich zu reinen Trend-Nachfolgungsstrategien kann sie flexibler mit verschiedenen Marktstadien umgehen, Verluste aus dem Trend-Klimax vermeiden und den Trendhandel beibehalten. Weitere Verbesserungen können durch Parameteroptimierung und Einführung von Hilfsbedingungen erzielt werden. Insgesamt hat die Strategie eine klare und einfache Logik, die für Anfänger des Algo-Handels sehr geeignet ist, um sie zu lernen und anzuwenden.


/*backtest
start: 2023-09-23 00:00:00
end: 2023-10-23 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//study(title="MA Crossover Strategy", overlay = true)
strategy("MA Crossover Strategy with MA Turning Point Exits", overlay=true)
src = input(open, title="Source")

price = request.security(syminfo.tickerid, timeframe.period, src)
ma1 = input(5, title="1st MA Length")
type1 = input("HMA", "1st MA Type", options=["SMA", "EMA", "HMA"])

ma2 = input(7, title="2nd MA Length")
type2 = input("HMA", "2nd MA Type", options=["SMA", "EMA", "HMA"])

adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
adxthreshold = input(20, title="ADX threshold")

dirmov(len) =>
	up = change(high)
	down = -change(low)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
	minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, len) / truerange)
	[plus, minus]
adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
	
sig = adx(dilen, adxlen)

//study("Average Directional Index", shorttitle="ADX", format=format.price, precision=2, resolution="")

//plot(sig, color=color.red, title="ADX")

f_hma(_src, _length)=>
    _return = wma((2*wma(_src, _length/2))-wma(_src, _length), round(sqrt(_length)))
price1 = if (type1 == "SMA")
    sma(price, ma1)
else
    if (type1 == "EMA")
        ema(price, ma1)
    else
        f_hma(price, ma1)
    
price2 = if (type2 == "SMA")
    sma(price, ma2)
else
    if (type2 == "EMA")
        ema(price, ma2)
    else
        f_hma(price, ma2)

//plot(series=price, style=line,  title="Price", color=black, linewidth=1, transp=0)
plot(series=price1, style=line,  title="1st MA", color=blue, linewidth=2, transp=0)
plot(series=price2, style=line, title="2nd MA", color=green, linewidth=2, transp=0)


//longCondition = price1> price2
longCondition = price1> price2 and sig > adxthreshold
if (longCondition)
    strategy.entry("Long", strategy.long)

shortCondition = price1 < price2 and sig > adxthreshold
if (shortCondition)
    strategy.entry("Short", strategy.short)

lookback1 = input(1, "Lookback 1")
roc1 = roc(price1, lookback1)

ma1up = false
ma1down = false
ma2up = false
ma2down = false

ma1up := nz(ma1up[1])
ma1down := nz(ma1down[1])
ma2up := nz(ma2up[1])
ma2down := nz(ma2down[1])

trendStrength1 = input(2, title="Minimum slope magnitude * 100", type=float) * 0.01

if crossover(roc1, trendStrength1)
    ma1up := true
    ma1down := false
    
if crossunder(roc1, -trendStrength1) 
    ma1up := false
    ma1down := true

shortexitCondition = ma1up and ma1down[1] and sig > adxthreshold
if (shortexitCondition)
    strategy.close("Short")

longexitCondition = ma1down and ma1up[1] and sig > adxthreshold
if (longexitCondition)
    strategy.close("Long")
    
    



Mehr