Zwei-Wege-EMA-Quantengeschäftsstrategie

Schriftsteller:ChaoZhang, Datum: 2024-01-24 17:31:41
Tags:

img

Übersicht

Diese Strategie verwendet bidirektionale EMA-Indikatoren, um die Haupttrendrichtung des Marktes zu bestimmen, und kombiniert den RSI-Indikator mit dem Zeitpunkt der Eintrittswahl, der zur Trend-Nach-Algorithmus-Handelsstrategie gehört.

Strategieprinzip

  1. Berechnung mehrerer EMA-Gruppen mit unterschiedlichen Zyklen zur Ermittlung der Haupttrendrichtung des Marktes in drei Dimensionen: kurzfristig, mittelfristig und langfristig
  2. Wenn die kurzfristige EMA über die mittelfristige EMA hinausgeht, wird festgestellt, dass sich ein Aufwärtstrend gebildet hat.
  3. Wenn die kurzfristige EMA unter die mittelfristige EMA fällt, wird festgestellt, dass sich ein Abwärtstrend gebildet hat.
  4. Der RSI-Indikator kann verwendet werden, um überkaufte und überverkaufte Zonen zu bestimmen.
  5. In einem Aufwärtstrend, gehen Sie lang, wenn der RSI-Indikator auf niedrigen Niveaus ist; in einem Abwärtstrend, gehen Sie kurz, wenn der RSI-Indikator auf hohen Niveaus ist

Die oben genannte Strategie wendet hauptsächlich den bidirektionalen EMA-Indikator zur Bestimmung der Haupttrendrichtung an und verwendet den RSI-Indikator als Einstiegssignal, der zu einer typischen Trendstrategie nach Algorithmushandel gehört.

Analyse der Vorteile

Der größte Vorteil dieser Strategie besteht darin, dass sie die Haupttrendrichtung des Marktes eindeutig bestimmen und anhand des RSI-Indikators einen besseren Einstiegszeitpunkt auswählen kann.

  1. Verwenden Sie mehrere Sätze von EMA, um die Haupttrendrichtung des Marktes unter mehreren Zeitdimensionen zu ermitteln
  2. Die Berechnung des EMA-Indikators ist einfach, geräuscharm und ermittelt den Haupttrend des Marktes genau und zuverlässig.
  3. Der RSI-Indikator kann die Einstiegs- und Stop-Loss-Punkte effektiv bestimmen, um die Rendite-Retio erheblich zu optimieren
  4. Die Struktur des Algorithmus ist klar und leicht zu verstehen und zu ändern.
  5. Es kann flexibel mit anderen technischen Indikatoren kombiniert werden, um die Strategieleistung weiter zu verbessern

Risikoanalyse

Die Strategie birgt außerdem einige Risiken, vor allem in den folgenden Aspekten:

  1. Wenn sich der Trend umkehrt, kann der Stop-Loss-Punkt zu idealisiert sein, wodurch die Verluste zunehmen
  2. Nicht in der Lage, den Trendumkehrpunkt effektiv zu bestimmen, möglicherweise verpasst die Gelegenheit, den Verlust rechtzeitig zu stoppen
  3. EMA- und RSI-Parameter müssen wiederholt getestet und optimiert werden, da dies sonst zu Instabilität führen kann
  4. Kann nicht garantieren, dass jeder Eintrag der perfekte Timing ist, kann es unnötige mehrere Wiederholungen
  5. Es ist schwierig, große Lücken unter dem Einfluß plötzlicher Ereignisse wirksam zu vermeiden

Um den oben genannten Risiken entgegenzuwirken, können in folgenden Bereichen Optimierungen vorgenommen werden:

  1. Um übermäßige Verluste zu verhindern, sind angemessen festgelegte Stopp-Loss-Punkte festzulegen.
  2. Erhöhung anderer Indikatoren zur Bestimmung der Trendumkehrung, um einen zeitnahen Stop-Loss zu gewährleisten
  3. Optimierung von Parameterkombinationen zur Anpassung an breitere Marktbedingungen
  4. Ändern Sie die Logik für die Eingabe und den Stop-Loss, um die Anzahl der Wiederholungen zu reduzieren
  5. Erhöhung der Ausnahmeregelung, um negative Auswirkungen von Marktlücken zu vermeiden

Optimierungsrichtlinien

Aus den Vorteilen und Risiken dieser Strategie können wir folgende optimierbare Richtungen ziehen:

  1. Auf dem bestehenden bidirektionalen EMA-Rahmen sollen Indikatoren wie MACD und BOLL eingeführt werden, um Trendumkehrpunkte zu beurteilen und so Gewinn- und Stop-Loss-Strategien zu optimieren.
  2. Einführung von Modellen für maschinelles Lernen zur Vorhersage der Wahrscheinlichkeit einer Trendumkehrung und weitere Verbesserung der Strategieleistung
  3. Anwendung fortschrittlicher Filter, um automatisch abnormale Marktbedingungen zu erkennen und Verluste wirksam zu verhindern
  4. Verwenden Sie genetische Algorithmen, Deep Reinforcement Learning und andere Methoden zur automatischen Optimierung von Parametern, damit sich Strategien mehr Marktarten anpassen können
  5. Fügen Sie automatisches Stop-Loss-Modul hinzu, können dynamisch Stop-Loss-Punkte entsprechend der tatsächlichen Situation anpassen

Durch die Einführung von mehr Indikatoren, Vorhersagemodellen, Parameteroptimierung, Risikokontrollmodulen und anderen Mitteln kann diese Strategie weiter verbessert werden, um sich komplexeren und volatileren Marktbedingungen anzupassen.

Schlussfolgerung

Dieser Artikel stellte detailliert den Hauptinhalt der bidirektionalen EMA-Quantitativ-Handelsstrategie vor. Zuerst wurden die wichtigsten Ideen und Betriebsprinzipien der Strategie dargestellt. Anschließend wurden die Vorteile der Strategie vollständig analysiert. Gleichzeitig wurden auch die wichtigsten potenziellen Risiken in der Strategie analysiert. Auf dieser Grundlage wurden mehrere wichtige optimierbare Richtungen vorgeschlagen. Zusammenfassend hat diese Strategie den Vorteil, den Haupttrend des Marktes zu bestimmen, und hat auch einen gewissen Raum für Optimierung, was eine typische quantitative Handelsstrategie ist. Durch kontinuierliche Verbesserung und Optimierung kann diese Strategie zu einer wichtigen Wahl für Anleger Algorithmushandel werden.


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

Mehr