Die Ressourcen sind geladen. Beförderung...

Trendhandelsstrategie auf Basis von EMA-Crossover

Schriftsteller:ChaoZhang, Datum: 2023-10-31 14:37:38
Tags:

img

Übersicht

Die Kernidee dieser Strategie besteht darin, das goldene Kreuz und die toten Kreuzsignale des EMA-Indikators zu verwenden, um Kauf- und Verkaufsentscheidungen zu treffen.

Strategie Logik

Die Strategie definiert zunächst mehrere EMA-Linien, einschließlich schneller EMAs ema1 bis ema6 und langsamer EMAs ema7 bis ema12. Sie definiert dann das Kaufsignal buy_signal und das Verkaufssignal sell_signal:

  • Das Kaufsignal buy_signal wird erzeugt, wenn ema1 über ema3 kreuzt.

  • Das Verkaufssignal sell_signal wird erzeugt, wenn ema1 unter ema3 überschreitet.

Wenn also die kurzfristige EMA über die langfristige EMA geht, zeigt sie einen Aufwärtstrend auf dem Markt an und ein Kaufsignal wird ausgelöst.

Die Strategie überwacht die Überschneidung der EMA-Linien, um die Trendrichtung zu bestimmen und entsprechend Kauf-/Verkaufsentscheidungen zu treffen.

Analyse der Vorteile

Zu den Vorteilen dieser Strategie gehören:

  1. Die Verwendung von EMA-Linien zur Bestimmung des Trends kann kurzfristige Marktgeräusche filtern und Handelssignale zuverlässiger machen.

  2. Durch die Erstellung mehrerer EMAs können Trendveränderungen genauer erkannt werden.

  3. Die Strategie ist einfach und klar. Handelssignale werden durch EMA-Kreuzungen generiert, was sie für den Quant-Trading leicht zu verstehen und umzusetzen macht.

  4. Die EMA-Periodenparameter können an unterschiedliche Produkte und Märkte angepasst werden.

Risikoanalyse

Zu den Risiken dieser Strategie gehören:

  1. EMA-Linien haben Verzögerungseffekte, die die Handelssignale verzögern können.

  2. Eine unsachgemäße Auswahl der EMA-Parameter kann zu falschen Signalen führen.

  3. EMA-Kreuzungen sind nicht in der Lage, falsche Signale in unterschiedlichen Märkten effektiv auszufiltern.

  4. Die Risiken einer Überanpassung bestehen aufgrund des begrenzten Optimierungsraums für die EMA-Parameter.

Lösungen:

  1. Fügen Sie Filter mit anderen Indikatoren hinzu, um falsche Signale in verschiedenen Märkten zu vermeiden.

  2. Prüfstabilität verschiedener Periodenparameter zur Vermeidung von Überanpassung.

  3. Anpassung von Parametern oder Hinzufügung von Ausgangmechanismen zur Risikokontrolle.

Optimierungsrichtlinien

Die Strategie kann in folgenden Bereichen weiter optimiert werden:

  1. Die Risikopositionen werden von den Risikokapitalgebern und den Finanzinstituten geprüft, um die Risikopositionen zu ermitteln.

  2. Implementieren Sie eine Wiedereintrittslogik mit zusätzlichen Kauf-/Verkaufssignalen.

  3. Optimierung der EMA-Übergangszeitparameter für optimale Ergebnisse.

  4. Einbeziehung anderer Indikatoren für die multifaktorielle Validierung zur Verbesserung der Signalqualität.

  5. Testparameter-Ausrichtung auf verschiedene Produkte, um eine optimale Anwendbarkeit zu finden.

  6. Betrachten Sie Slip in Live-Handel und optimieren Sie über Backtesting.

Zusammenfassung

Dies ist eine einfache Trend-Folge-Strategie, die auf einem EMA-Crossover basiert. Sie kann Trendänderungen erkennen, hat aber auch Risiken wie Verzögerungseffekte und Whipsaws. Verbesserungen mit Stop Loss, Parameteroptimierung, multifaktorialer Validierung usw. können die Strategieleistung beim Backtesting und Live-Handel weiter verbessern.


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

//@version=3
//Companion Strategy script to my Cloud Study. Enjoy! -MP
// study("MP's Cloud Study", overlay=true)
strategy(title="MP's Cloud Strat'", shorttitle="MP's Cloud Strat", overlay=true, precision=6, pyramiding=0, initial_capital=10000, currency="USD", default_qty_type=strategy.percent_of_equity,calc_on_order_fills= false, calc_on_every_tick=false, default_qty_value=100.0, commission_type=strategy.commission.percent, commission_value=0.05)

//bgcolor ( color=black, transp=20, title='Blackground', editable=true)

src = close, len1 = input(2, minval=1, title="Short EMA")
src2 = close, len3 = input(7, minval=1, title="Long EMA")
emaShort = ema(src, len1)
emaLong = ema(src2, len3)


StartYear = input(2018, "Start Year")
StartMonth = input(01, "Start Month")
StartDay = input(18, "Start Day")

 
StopYear = input(2018, "Stop Year")
StopMonth = input(12, "Stop Month")
StopDay = input(26, "Stop Day")
tradeStop = timestamp(StopYear,StopMonth,StopDay,0,0)

//src = close, 
//len1 = input(3, minval=1, title="Fast EMA 1")
len2 = input(3, minval=1, title="Fast EMA 2")
//len3 = input(8, minval=1, title="Fast EMA 3")
len4 = input(5, minval=1, title="Fast EMA 4")
len5 = input(8, minval=1, title="Fast EMA 5")
len6 = input(10, minval=1, title="Fast EMA 6")
//Slow EMA
len7 = input(30, minval=1, title="Slow EMA 7")
len8 = input(35, minval=1, title="Slow EMA 8")
len9 = input(40, minval=1, title="Slow EMA 9")
len10 = input(45, minval=1, title="Slow EMA 10")
len11 = input(50, minval=1, title="Slow EMA 11")
len12 = input(60, minval=1, title="Slow EMA 12")

//Fast EMA
ema1 = ema(src, len1)
ema2 = ema(src, len2)
ema3 = ema(src, len3)
ema4 = ema(src, len4)
ema5 = ema(src, len5)
ema6 = ema(src, len6)
//Slow EMA
ema7 = ema(src, len7)
ema8 = ema(src, len8)
ema9 = ema(src, len9)
ema10 = ema(src, len10)
ema11 = ema(src, len11)
ema12 = ema(src, len12)

//Fast EMA Color Rules
//colfastL = (ema1 > ema2 and ema2 > ema3 and ema3 > ema4 and ema4 > ema5 and ema5 > ema6)
colfastS = (ema1 < ema2 and ema2 < ema3 and ema3 < ema4 and ema4 < ema5 and ema5 < ema6)
//Slow EMA Color Rules
//colslowL = ema7 > ema8 and ema8 > ema9 and ema9 > ema10 and ema10 > ema11 and ema11 > ema12 
//colslowS = ema7 < ema8 and ema8 < ema9 and ema9 < ema10 and ema10 < ema11 and ema11 < ema12 
//Fast EMA Final Color Rules
//colFinal = colfastL and colslowL? aqua : colfastS and colslowS? orange : gray
//Slow EMA Final Color Rules
//colFinal2 = colslowL  ? lime : colslowS ? red : gray
//Fast EMA Plots
p1=plot(ema1, title="Fast EMA 1", style=line, linewidth=2, color=silver)
plot(ema2, title="Fast EMA 2", style=line, linewidth=1, color=silver)
plot(ema3, title="Fast EMA 3", style=line, linewidth=1, color=silver)
plot(ema4, title="Fast EMA 4", style=line, linewidth=1, color=silver)
plot(ema5, title="Fast EMA 5", style=line, linewidth=1, color=silver)
p2=plot(ema6, title="Fast EMA 6", style=line, linewidth=2, color=silver)
fill(p1,p2,color=silver, transp=60)
//Slow EMA Plots
//p3=plot(ema7, title="Slow EMA 7", style=line, linewidth=4, color=colFinal2)
//plot(ema8, title="Slow EMA 8", style=line, linewidth=3, color=colFinal2)
//plot(ema9, title="Slow EMA 9", style=line, linewidth=3, color=colFinal2)
//plot(ema10, title="Slow EMA 10", style=line, linewidth=3, color=colFinal2)
//plot(ema11, title="Slow EMA 11", style=line, linewidth=3, color=colFinal2)
//p4=plot(ema12, title="Slow EMA 12", style=line, linewidth=4, color=colFinal2)
//fill(p3,p4, color=silver, transp=60)



//Plot the Ribbon
ma1=plot( emaShort,color=rising(emaShort,2)?green:red,linewidth=1,join=true,transp=20,title="Short")
ma2=plot( emaLong,color=rising(emaLong,2)?green:red,linewidth=1,join=true,transp=20,title="Long")
fcolor = emaShort>emaLong?green:red
fill(ma1,ma2,color=fcolor,transp=80,title="Ribbon Fill")


//fast = 4, slow = 16
//fastMA = ema(close, fast)
//slowMA = ema(close, slow)
//plot(fastMA, color=green, title = "buy/sell")
//plot(slowMA, color=red, title = "base")


//Conditions
buy_signal = crossover(ema1,ema3)
sell_signal = crossunder(ema1,ema3)

plotshape(sell_signal, style=shape.triangleup, color = red, text="Start Short")
plotshape(buy_signal, style=shape.triangledown, color = green, text="Start Long")

alertcondition(sell_signal, title = 'Sell/Short', message = 'e= s= c=position b=long t=market l= | delay=30 | e= s= b=short l= t=market q=0.01')
alertcondition(buy_signal, title = 'Buy/Long', message =  'e= s= c=position b=short t=market l= | delay=30 | e= s= b=long l= t=market q=0.01')

//alertcondition(sell_signal, title = 'Sell/Short', message = 'e= s= c=order b=buy | delay=3 | e= b=sell q=99% p=0.70% u=currency')
//alertcondition(buy_signal, title = 'Buy/Long', message =  'e= s= c=order b=sell | delay=30 | e= b=buy q=80 p=0.1% u=currency')


testStartYear = input(2018, "From Year") 
testStartMonth = input(1, "From Month")
testStartDay = input(1, "From Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2019, "To Year")
testStopMonth = input(1, "To Month")
testStopDay = input(1, "To Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

testPeriod() => true

if testPeriod()
    if buy_signal
        strategy.entry("Long", true)
    

    if sell_signal
        strategy.close("Long")

Mehr