Quantitative Handelsstrategie auf der Grundlage der doppelten EMA-Kreuzung

Schriftsteller:ChaoZhang, Datum: 2023-11-21 11:41:40
Tags:

img

Übersicht

Diese Strategie erzeugt Handelssignale, indem sie die Überschneidung zwischen zwei EMA-Linien verschiedener Perioden berechnet, um Markttrends zu bestimmen. Sie eröffnet Long-Positionen, wenn die kürzere Periode EMA die längere Periode EMA überschreitet, was einen Aufwärtstrend anzeigt, und schließt Positionen, wenn die kürzere Periode EMA unter die längere Periode EMA überschreitet, was einen Abwärtstrend anzeigt.

Grundsätze

Die Strategie wendet hauptsächlich die Goldene Kreuz- und Todeskreuz-Theorie der doppelten EMA-Linien an. Die doppelten EMA-Linien bestehen aus einer langen EMA und einer kurzen EMA. Der kurze EMA-Parameter ist auf 10 Tage und der lange EMA-Parameter auf 21 Tage festgelegt.

Wenn die kurze EMA die lange EMA überschreitet, wird ein Kaufsignal generiert. Wenn die kurze EMA unter die lange EMA überschreitet, wird ein Verkaufssignal generiert. Die Strategie setzt auch Wachstumsrate-Schwellenwerte, wobei nur lange Positionen geöffnet werden, wenn das Wachstum eine positive Schwelle überschreitet, und nur geschlossene Positionen, wenn der Rückgang eine negative Schwelle überschreitet.

Im Einzelnen ist die Kaufbedingung, wenn die kurze EMA höher ist als die lange EMA und die Aktienwachstumsrate die positive Schwelle überschreitet.

Vorteile

  • Nutzt die Theorie des goldenen Kreuzes und des Todeskreuzes von doppelten EMA-Linien für Einfachheit und Zuverlässigkeit
  • Hinzufügt Wachstumsschwellen, um Fehltransactions während eines schwachen Wachstums zu vermeiden
  • Kann die maximale Verlustquote streng kontrollieren
  • Die EMA-Periodenparameter können flexibel für verschiedene Zyklen angepasst werden

Risikoanalyse

  • EMA-Linien haben Verzögerungseffekte, möglicherweise fehlende Preisumkehrpunkte
  • Linieüberquerungen haben eine gewisse Verzögerung, möglicherweise fehlen die besten Einstiegspunkte
  • Verlässt sich auf die Optimierung der Parameter, unsachgemäße Einstellungen können zu Überschreitungen oder zu unzureichenden Signalen führen

Optimierungsrichtlinien

  • Kombination mit anderen Indikatoren wie MACD, KD usw. zur Verbesserung der Signalgenauigkeit
  • Fügen Sie Stop-Loss-Strategien wie Trailing Stop-Loss hinzu, um Gewinne zu maximieren
  • Optimierung der EMA-Periodenparameter für die besten Einstellungen für verschiedene Produkte
  • Einbeziehung von Echtzeitdaten und Methoden des maschinellen Lernens zur Anpassung und Optimierung dynamischer Parameter

Zusammenfassung

Die Gesamtstrategie ist relativ einfach und zuverlässig, wobei doppelte EMA-Crossovers verwendet werden, um Preistrends zu bestimmen und Wachstumsrate-Schwellen zu setzen, um Handelssignale zu generieren. Im Vergleich zu Single-Line-Crossovers kann sie einige falsche Signale filtern. Aber EMA-Linien selbst haben Verzögerungsprobleme. Die Kombination anderer Indikatoren oder dynamischer Parameteranpassung kann die Strategieleistung weiter verbessern.


/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title="ema(ema10-21)", overlay=true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 15000, commission_type = strategy.commission.percent, commission_value = 0.2)

useTimeLimit    = input(defval = false, title = "Use Start Time Limiter?")
startYear       = input(defval = 2016, title = "Start From Year",  minval = 0, step = 1)
startMonth      = input(defval = 05, title = "Start From Month",  minval = 0,step = 1)
startDay        = input(defval = 01, title = "Start From Day",  minval = 0,step = 1)
startHour       = input(defval = 00, title = "Start From Hour",  minval = 0,step = 1)
startMinute     = input(defval = 00, title = "Start From Minute",  minval = 0,step = 1)

startTimeOk() => true

lenght0 = input(10)
lenght1 = input(21)

source = close

EmaShort = ema(ema(source, lenght0), lenght0)
EmaLong = ema(ema(source, lenght1),lenght1)
plot(EmaShort, color=red)
plot(EmaLong, color=purple)

growth = ((EmaShort-EmaLong)*100)/((EmaShort+EmaLong)/2)
thresholdUp = input(defval=0.05, title="Threshold Up", type=float, step=0.01)
thresholdDown = input(defval=-0.165, title="Threshold Down", type=float, step=0.001)

if( startTimeOk() )
    buy_condition = EmaShort > EmaLong and growth > thresholdUp
    buy_exit_condition = EmaShort < EmaLong and growth < thresholdDown
    strategy.entry("buy", strategy.long, comment="buy", when=buy_condition)
    strategy.close(id='buy', when=buy_exit_condition)

Mehr