Trendfolgestrategie basierend auf gleitenden Durchschnittskreuzungen


Erstellungsdatum: 2024-02-23 12:21:40 zuletzt geändert: 2024-02-23 12:21:40
Kopie: 4 Klicks: 619
1
konzentrieren Sie sich auf
1617
Anhänger

Trendfolgestrategie basierend auf gleitenden Durchschnittskreuzungen

Überblick

Die Strategie ermittelt die Richtung der Preisentwicklung durch die Berechnung von Moving Averages mit zwei unterschiedlichen Parameter-Sets und deren Überschneidung, um einen Trend-Tracking-Handel zu ermöglichen. Wenn ein schneller Moving Average den langsamen Moving Average von unten durchbricht, wird dies als bullish beurteilt. Wenn ein schneller Moving Average den langsamen Moving Average von oben nach unten durchbricht, wird dies als bullish beurteilt.

Strategieprinzip

Diese Strategie vergleicht Moving Averages mit zwei Gruppen verschiedener Parameter-Sets, wobei der erste Moving Average-Parameter von len1 und type1 und der zweite Moving Average-Parameter von len2 und type2 eingestellt wird. Len1 und len2 repräsentieren die Periodenzeiten der beiden Moving Averages und type1 und type2 den Algorithmus-Typ des Moving Averages.

Wenn der schnelle bewegliche Durchschnitt von unten durch den langsamen beweglichen Durchschnitt bricht und eine Goldforke bildet, wird dies als bullish Signal beurteilt. Wenn der schnelle bewegliche Durchschnitt von oben nach unten durch den langsamen beweglichen Durchschnitt bricht und eine tote Forke bildet, wird dies als bearish Signal beurteilt.

Wenn ein bullish Signal ausgelöst wird, wird der Prozentsatz des Default_qty_value oder des Positionsprozentsatzes_of_equity durch den Prozentsatz des Default_qty_value oder des Positionsprozentsatzes_of_equity durch den Prozentsatz des Positionsprozentsatzes_of_equity durch den Prozentsatz des Default_qty_value oder des Positionsprozentsatzes_of_equity durch den Prozentsatz des Positionsprozentsatzes_of_equity durch den Prozentsatz des Default_qty_value oder des Positionsprozentsatzes_of_equity durch den Prozentsatz des Positionsprozentsatzes_of_equity durch den Prozentsatz des Positionsprozentsatzes_of_equity durch den Prozentsatz des Default_qty_value oder des Positionsprozentsatzes_of_equity durch den Prozentsatz des Positionsprozentsatzes_of_of

Strategische Vorteile

  1. Unterstützt Kombinationen aus 7 verschiedenen Arten von Moving Averages, die sich flexibel an Marktbedingungen anpassen
  2. Anpassbare Parameter für zwei Moving Averages, um langfristige und mittelfristige Trends zu beurteilen
  3. Strategie-Signal-Bestimmungen sind einfach, klar und leicht zu verstehen
  4. Unterstützt Über- und Überschreitung, Trend-Tracking-Transaktionen

Risiken und Lösungen

  1. Der Moving Average ist nachlässig und könnte einen Preiswendepunkt verpassen Lösung: Der Moving-Average-Periode wird entsprechend verkürzt oder in Kombination mit anderen Indikatoren verwendet.

  2. Nicht geeignet für Märkte mit hoher Volatilität und häufigen Wechselwirkungen Die Lösung: Mehr Filterbedingungen, um den Handel in einem konvulsiven Umfeld zu vermeiden

  3. Es besteht ein gewisses Risiko für falsche Signale. Lösung: Kombination mit anderen Filterindikatoren zur Verbesserung der Signalsicherheit

Optimierungsrichtung

  1. Optimierung der Periodenkombination von Moving Averages, wobei die Auswirkungen von langen und kurzen Periodenparametern auf die Strategie-Rendite getestet werden
  2. Testen Sie die Leistung verschiedener Arten von Moving Averages und finden Sie die besten Moving Average-Algorithmen
  3. Hinzufügen von VARIABLE- oder Brinkanal-Indikatoren zur Kombination, um die Signalqualität zu verbessern
  4. Optimierung der Positionsmanagement-Strategie und Verbesserung der Methode zur Festlegung von Positionen in %_of_equity

Zusammenfassen

Diese Strategie beurteilt die Preisentwicklung durch den Vergleich der Kreuzung von zwei Moving Averages und führt entsprechende bullish-bullish-Operationen durch, um die Trends zu erfassen und zu verfolgen. Die Strategie hat den Vorteil, dass die Signalregeln einfach und klar sind, die Parameter anpassbar sind, stark anwendbar sind und für verschiedene Marktumgebungen optimiert werden können.

Strategiequellcode
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title = "Noro's MAs Cross Tests v1.0", shorttitle = "MAs Cross tests 1.0", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 0)

needlong = input(true, "long")
needshort = input(true, "short")

len2 = input(15, defval = 15, minval = 2, maxval = 1000, title = "Fast MA length")
type2 = input(1, defval = 1, minval = 1, maxval = 7, title = "Fast MA Type")
src2 = input(close, defval = close, title = "Fast MA Source")

len1 = input(30, defval = 30, minval = 2, maxval = 1000, title = "Slow MA length")
type1 = input(1, defval = 1, minval = 1, maxval = 7, title = "Slow MA Type")
src1 = input(close, defval = close, title = "Slow MA Source")

col = input(false, defval = false, title = "Color of bar")

o = input(false, title = "1 SMA, 2 EMA, 3 VWMA, 4 DEMA, 5 TEMA, 6 KAMA, 7 Price Channel") 

//DEMA 1
dema1 = 2 * ema(src1, len1) - ema(ema(close, len1), len1)

//TEMA 1
xEMA1 = ema(src1, len1)
xEMA2 = ema(xEMA1, len1)
xEMA3 = ema(xEMA2, len1)
tema1 = 3 * xEMA1 - 3 * xEMA2 + xEMA3

//KAMA 1
xvnoise = abs(src1 - src1[1])
nfastend = 0.20
nslowend = 0.05
nsignal = abs(src1 - src1[len1])
nnoise = sum(xvnoise, len1)
nefratio = iff(nnoise != 0, nsignal / nnoise, 0)
nsmooth = pow(nefratio * (nfastend - nslowend) + nslowend, 2) 
kama1 = nz(kama1[1]) + nsmooth * (src1 - nz(kama1[1]))

//PriceChannel 1
lasthigh1 = highest(src1, len1)
lastlow1 = lowest(src1, len1)
center1 = (lasthigh1 + lastlow1) / 2

//DEMA 2
dema2 = 2 * ema(src2, len2) - ema(ema(close, len2), len2)

//TEMA 2
xEMA12 = ema(src2, len2)
xEMA22 = ema(xEMA12, len2)
xEMA32 = ema(xEMA22, len2)
tema2 = 3 * xEMA12 - 3 * xEMA22 + xEMA32

//KAMA 2
xvnoise2 = abs(src2 - src2[1])
nfastend2 = 0.20
nslowend2 = 0.05
nsignal2 = abs(src2 - src2[len2])
nnoise2 = sum(xvnoise2, len2)
nefratio2 = iff(nnoise2 != 0, nsignal2 / nnoise2, 0)
nsmooth2 = pow(nefratio2 * (nfastend2 - nslowend2) + nslowend2, 2) 
kama2 = nz(kama2[1]) + nsmooth2 * (src2 - nz(kama2[1]))

//PriceChannel 2
lasthigh2 = highest(src2, len2)
lastlow2 = lowest(src2, len2)
center2 = (lasthigh2 + lastlow2) / 2

//MAs
ma1 = type1 == 1 ? sma(src1, len1) : type1 == 2 ? ema(src1, len1) : type1 == 3 ? vwma(src1, len1) : type1 == 4 ? dema1 : type1 == 5 ? tema1 : type1 == 6 ? kama1 : type1 == 7 ? center1 : 0
ma2 = type2 == 1 ? sma(src2, len2) : type2 == 2 ? ema(src2, len2) : type2 == 3 ? vwma(src2, len2) : type2 == 4 ? dema2 : type2 == 5 ? tema2 : type2 == 6 ? kama2 : type2 == 7 ? center2 : 0
plot(ma1, color = blue, linewidth = 3, transp = 0)
plot(ma2, color = red, linewidth = 3, transp = 0)

//Signals
trend = ma2 > ma1 ? 1 : ma2 < ma1 ? -1 : trend[1]
up = trend == 1 and ((close < open and close[1] < open[1]) or col == false)
dn = trend == -1 and ((close > open and close[1] > open[1]) or col == false)

if up
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na)

if dn
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)