Bidirektionale EMA Crossover-Strategie für quantitativen Handel


Erstellungsdatum: 2024-01-24 17:31:41 zuletzt geändert: 2024-01-24 17:31:41
Kopie: 0 Klicks: 602
1
konzentrieren Sie sich auf
1617
Anhänger

Bidirektionale EMA Crossover-Strategie für quantitativen Handel

Überblick

Diese Strategie verwendet die zweiseitige EMA-Anzeige, um die Haupttrendrichtung des Marktes zu bestimmen, und in Kombination mit dem RSI-Indikator als Einstiegsmoment zu wählen. Sie gehört zu den Trend-Follow-Algorithmen.

Strategieprinzip

  1. Berechnung von EMA-Meanlines für mehrere Gruppen verschiedener Perioden und Identifizierung der wichtigsten Markttrends in den drei Dimensionen kurz-, mittel- und langfristig
  2. Wenn eine kurzfristige EMA eine mittlere oder langfristige EMA überschreitet, wird eine bullische Tendenz ermittelt.
  3. Wenn die kurzfristige EMA die mittelfristige EMA unterbricht, wird sie als Abwärtstrend beurteilt.
  4. In Kombination mit dem RSI kann der RSI verwendet werden, um überkaufte und überverkaufte Bereiche zu bestimmen, um die richtige Einstiegszeit zu finden
  5. Bei einem bullish Trend ist der RSI-Indikator bei niedrigen Positionen länger; bei einem bearish Trend ist der RSI-Indikator bei hohen Positionen interveniert

Die oben beschriebene Strategie verwendet hauptsächlich zwei EMA-Indikatoren, um die Richtung des Haupttrends zu bestimmen, und verwendet den RSI-Indikator als Einstiegssignal. Sie ist eine typische Trend-Follow-Algorithmus-Handelsstrategie.

Strategische Stärkenanalyse

Der größte Vorteil dieser Strategie besteht darin, dass die wichtigsten Markttrends klar erkannt werden können und die besten Einstiegsmomente nach dem RSI-Indikator ausgewählt werden können. Die konkreten Vorteile sind wie folgt:

  1. Die Verwendung von mehreren Gruppen von EMA-Gewinnlinien zur Identifizierung der wichtigsten Markttrends in mehreren Zeitdimensionen
  2. Die EMA ist einfach zu berechnen, macht wenig Lärm und ist zuverlässig bei der Bestimmung der wichtigsten Markttrends
  3. RSI-Indikatoren können Eintritts- und Stopppunkte effektiv bestimmen und die Gewinn-Rücknahme-Ratio der Strategie erheblich optimieren
  4. Die Algorithmen sind klar strukturiert, leicht verständlich zu modifizieren und sind typisch für Trends Following Strategies.
  5. Flexible Kombination mit anderen technischen Indikatoren zur weiteren Steigerung der Effektivität der Strategie

Strategische Risikoanalyse

Die Strategie birgt Risiken, die sich in folgenden Aspekten widerspiegeln:

  1. Wenn sich der Trend umkehrt, können die Stop-Loss-Punkte zu idealisiert sein und die Verluste erhöhen.
  2. Es ist unmöglich, die Wendepunkt zu beurteilen, und es kann sein, dass man die Chance verpasst hat, aus dem Trend auszusteigen
  3. EMA- und RSI-Parameter müssen wiederholt getestet und optimiert werden, da dies zu Instabilität führen kann
  4. Es gibt keine Garantie, dass jeder Eintrag perfekt ist, und es kann zu unnötigen Wiederholungen kommen.
  5. Die jüngsten Ereignisse in der Region haben zu einem starken Luftangriff geführt, der kaum zu vermeiden war.

Für diese Risiken können Optimierungen aus folgenden Perspektiven erfolgen:

  1. Ein vernünftiger Stop-Loss-Satz, um zu verhindern, dass ein einmaliger Verlust zu groß ist
  2. Hinzufügen weiterer Indikatoren für eine Trendwende, um eine zeitnahe Stop-Loss zu gewährleisten
  3. Optimierung der Parameterpalette für die breiteren Marktbedingungen
  4. Modifizierte Einstiegs- und Stopplogik, um die Anzahl der Wiederholungen zu reduzieren
  5. Mehr Ausnahmegründungen, um die negativen Auswirkungen von Markthocken zu vermeiden

Richtung der Strategieoptimierung

Aus den Vorteilen und Risiken dieser Strategie lassen sich folgende Optimierungsmöglichkeiten ableiten:

  1. Die Einführung von MACD, BOLL und anderen Indikatoren auf dem vorhandenen Dual-EMA-Framework kann verwendet werden, um Trendwendepunkte zu ermitteln und so die Stop-Loss-Strategie zu optimieren
  2. Einführung von Machine-Learning-Modellen zur Vorhersage der Wahrscheinlichkeit einer Trendwende, um die Effektivität der Strategie weiter zu verbessern
  3. Die Anwendung von Advanced Filter, automatische Identifizierung von Abweichungen, kann den Verlust wirksam verhindern
  4. Methoden wie genetische Algorithmen und Deep Reinforcement Learning werden genutzt, um die Parameter automatisch zu optimieren und die Strategien für mehrere Markttypen anzupassen.
  5. Hinzugefügt ein automatisches Stop-Loss-Modul, das den Stop-Loss-Punkt dynamisch an die tatsächliche Situation anpasst

Durch die Einführung von mehr Indikatoren, Prognose-Modellen, Parameteroptimierung und Risikokontrollmodulen kann die Strategie weiter verbessert werden, um sich an komplexere und wechselhafte Marktbedingungen anzupassen.

Zusammenfassen

In diesem Artikel werden die wichtigsten Elemente einer bilateralen EMA-Cross-Quantitative-Trading-Strategie detailliert beschrieben. Zuerst wird die Hauptidee und die Funktionsprinzipien der Strategie zusammengefasst. Dann wird eine umfassende Analyse der Vorteile der Strategie durchgeführt. Gleichzeitig werden die wichtigsten Risikopunkte der Strategie analysiert. Auf dieser Grundlage werden einige wichtige optimierbare Richtungen gegeben.

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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Investoz
// Indikatorn är byggd som ett utbildningsyfte och är därför ingen rekommendation för köp/sälj av aktier. Tanken är att skapa en visuell form i en graf
// som visar om det finns någon trend såväl positiv som negativ. En dialogruta med en varning talar om vilken trend som råder. I koden finns en möjlighet
// att ta position eller gå ur position om man vill skapa en startegi kring denna trendindikator. Rekommenderar dock starkt att inte enbart förlita sig på denna
// indikator som beslut för köp/sälj då resultaten blir negativa om man köper på psoitiv trend och säljer på negativ trend. Det måste kombineras med andra idéer
// och därför fungerar denna skript mer som ett komplement till sin egen strategi.
// Det är fritt fram för vem som helst att använda sig av denna indikator.  
//@version=4
//Skapar en strategiskript med 5 % av eget kapital som ett exempel. Detta går att ändra i skriptets inställningar, välj egenskaper och sedan ändra orderstorlek
//till ett annat värde av % på eget kapital.
strategy("© Investoz trendvarningar", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=5)
//Lägger till inmatningar till skriptindikatorn. Användaren kan se och redigera inmatningar i objektdialogen efter eget val.
ema1 = input(21, minval=1, maxval=500, title="Lila linje")
valema1=input(true, title="Visa lila linje")
ema2 = input(34, minval=1, maxval=500, title="Blå linje")
valema2=input(true, title="Visa blå linje")
ema3 = input(55, minval=1, maxval=500, title="Grön linje")
valema3=input(true, title="Visa grön linje")
ema4 = input(89, minval=1, maxval=500, title="Gul linje")
valema4=input(true, title="Visa gul linje")
ema5 = input(141, minval=1, maxval=500, title="Orange linje")
valema5=input(true, title="Visa orange linje")
ema6 = input(230, minval=1, maxval=500, title="Röd linje")
valema6=input(true, title="Visa röd linje")
ema7 = input(371, minval=1, maxval=500, title="Röd linje")
valema7=input(true, title="Visa röd linje")
//Inmatningar för antal staplar
startbar = input(1, minval=1, maxval=1, title="Första stapeln")
Endbar = bar_index
//Källa input, stängning. Användaren kan själv byta till vilken källa som önskas.
src = input(close, title="Source")
//Antal staplar sedan den längsta ema började och framåt. 
tid=Endbar + startbar - 371
//EMA loop
aema1 = ema(src, ema1)
bema2 = ema(src, ema2)
cema3 = ema(src, ema3)
dema4 = ema(src, ema4)
eema5 = ema(src, ema5)
fema6 = ema(src, ema6)
gema7 = ema(src, ema7)
//Skriver ut linjer i diagrammet om förhållandet är sant, annars falskt.
h=plot(valema1 ? aema1 : na, title="Lila linje", style=plot.style_line, linewidth=1, color=color.purple)
i=plot(valema2 ? bema2 : na, title="Blå linje", style=plot.style_line, linewidth=1, color=color.blue)
j=plot(valema3 ? cema3 : na, title="Grön linje", style=plot.style_line, linewidth=1, color=color.green)
k=plot(valema4 ? dema4 : na, title="Gul linje", style=plot.style_line, linewidth=1, color=color.yellow)
l=plot(valema5 ? eema5 : na, title="Orange linje", style=plot.style_line, linewidth=1, color=color.orange)
m=plot(valema6 ? fema6 : na, title="Röd linje", style=plot.style_line, linewidth=1, color=color.red)
n=plot(valema7 ? gema7 : na, title="Brun linje", style=plot.style_line, linewidth=1, color=color.maroon)
//Fyller bakgrunden mellan två linjer med en viss färg.
fill(h, i, color = color.purple,transp=34)
fill(i, j, color = color.blue,transp=34)
fill(j, k, color = color.green,transp=34)
fill(k, l, color = color.yellow,transp=34)
fill(l, m, color = color.orange,transp=34)
fill(m, n, color = color.red,transp=34)
//Skapa en algoritm för positiv trend
PositivTrend = crossover(aema1,gema7)?1:0
TrendPositiv = ema(close,1) > aema1 and aema1 > bema2?1:0
//Skapa en algoritm för negativ trend
NegativTrend = crossunder(aema1,gema7)?1:0
TrendNegativ = ema(close,1) < aema1 and aema1 < bema2?1:0
//Skapar en textruta med varningstext för positiv trend
varningtextpositiv = "Varning för positiv trend."+"\n" + "Leta efter att ta position!"
// if PositivTrend
//     varningpositiv=label.new(
//      bar_index, 
//      low,  
//      xloc=xloc.bar_index, 
//      yloc=yloc.price,
//      color=color.black, 
//      textcolor=color.green,
//      text=varningtextpositiv,
//      style=label.style_label_down,
//      textalign=text.align_left)
//Skapar en textruta med varningstext för negativ trend
varningtextnegativ = "Varning för negativ trend."+"\n" + "Leta efter utgången!"
// if NegativTrend
//     varningnegativ=label.new(
//      bar_index, 
//      low,  
//      xloc=xloc.bar_index, 
//      yloc=yloc.price,
//      color=color.black, 
//      textcolor=color.red,
//      text=varningtextnegativ,
//      style=label.style_label_up,
//      textalign=text.align_left)
//Köp om positiv trend
if (PositivTrend) 
    strategy.entry("Ta position", strategy.long, when = PositivTrend)
//Sälj om negativ trend
if (NegativTrend)
    strategy.close("Ta position", when = NegativTrend, comment="Gå ur position")
//Beräkning av positiv trend
vspositiv(positiv)=>valuewhen(Endbar==startbar,positiv,0)
vepositiv(positiv)=>valuewhen(Endbar==Endbar,positiv,0)
positivmean(TrendPositiv)=>
    csumpositiv = cum(TrendPositiv)
//Slut//   
    a = vepositiv(csumpositiv)
//Start//
    b = vspositiv(csumpositiv)
//Slut - Start// 
    (a - b)/(tid)
positivmeanpositiv = positivmean(TrendPositiv) 
//Beräkning av negativ trend
vsnegativ(negativ)=>valuewhen(Endbar==startbar,negativ,0)
venegativ(negativ)=>valuewhen(Endbar==Endbar,negativ,0)
negativmean(TrendNegativ)=>
    csumnegativ = cum(TrendNegativ)
//Slut//   
    a = venegativ(csumnegativ)
//Start//
    b = vsnegativ(csumnegativ)
//Slut - Start// 
    (a - b)/(tid)
negativmeannegativ = negativmean(TrendNegativ) 
//Inmatning av text som ska in i texruta som visar antal staplar i trend
logga = "© Investoz: Trend i tid"+ "\n"
streck = "--------------------------------------------------------"
totalastaplar = "\n" + "Dagar totalt: " + tostring(tid)+ " dagar "+"\n"+ streck + "\n"
totalpositiv = "Dagar totalt i positiv trend "+" 📈 : "  +tostring(positivmeanpositiv*tid, "##.##") +" dagar " + "\n"
totalnegativ = "\n" + "Dagar totalt i negativ trend" + " 📉 : "  +tostring(negativmeannegativ*tid, "##.##") +" dagar " 
//Textruta för antal staplar i trend
// if barstate.ishistory
//     barcountlbl=label.new(
//      bar_index, 
//      low,  
//      xloc=xloc.bar_index, 
//      yloc=yloc.price,
//      color=color.black, 
//      textcolor=color.yellow,
//      text=logga+streck+totalastaplar+totalpositiv+streck+totalnegativ,
//      style=label.style_label_lower_left,
//      textalign=text.align_left)
//     label.delete(barcountlbl[1])
//////////////////////////////////