10EMA Double Crossover Trendfolgestrategie


Erstellungsdatum: 2023-12-29 16:03:55 zuletzt geändert: 2023-12-29 16:03:55
Kopie: 1 Klicks: 807
1
konzentrieren Sie sich auf
1621
Anhänger

10EMA Double Crossover Trendfolgestrategie

Überblick

Die Strategie basiert auf einer 10 EMA und einer 50 EMA Doppelkreuzung. Sie kombiniert die 10 EMA der Stundenlinie als Hilfsentscheidung, um die Richtung des Trends dynamisch in einem Markt zu finden, in dem sich die Bullen und die Bären abwechseln, und ermöglicht die automatische Verfolgung von Stopps.

Strategieprinzip

Die Kernlogik der Strategie basiert auf dem Goldfork von 10 EMA und 50 EMA. Konkret wird ein Aufwärtstrend beurteilt, wenn 10 EMA von unten 50 EMA durchbricht, um einen Goldfork zu bilden; ein Abwärtstrend wird beurteilt, wenn 10 EMA von oben 50 EMA durchbricht, um einen Todesfork zu bilden.

Innerhalb der K-Linien 1-5 nach dem Goldfork-Todesfork wird zusätzliche Kaufschaltung vorgenommen. Darüber hinaus wird die Strategie mit einem 10 EMA der Stundenzeile als Hilfsentscheidung eingeführt, um nur dann Positionen nach dem Goldfork zu eröffnen, wenn der 10 EMA der Stundenzeile im Aufwärtstrend ist, und nur dann, wenn der 10 EMA der Stundenzeile im Abwärtstrend ist.

Nach der Eröffnung der Position verwendet die Strategie einen Ausgang, bei dem Stop-Loss + Stop-Loss verfolgt werden. Der Stop-Loss kann den Gewinn sperren und den Gewinn des Handels maximieren. Der Stop-Loss sorgt dafür, dass die Position geschlossen wird, wenn der Preis das Ziel erreicht.

Strategische Vorteile

Der größte Vorteil dieser Strategie besteht darin, dass die EMA-Kreuzung verwendet wird, um die Richtung des Haupttrends zu bestimmen, während die Hilfsindikatoren-Filtersignale eingeführt werden, um die Falschkreuzung effektiv zu filtern und so die Reliabilität des Signals zu verbessern. Darüber hinaus kann die doppelte EMA-Kreuzung in Kombination mit dem Tracking-Stop und dem Limit-Stop sowohl die Gewinne aus dem Tracking-Trend maximieren als auch das Handelsrisiko effektiv kontrollieren.

Im Vergleich zu einer einzelnen Indikatorstrategie kann die Strategie die Richtung und die Amplituden des Trends genauer bestimmen. Im Vergleich zu herkömmlichen Stop-Loss-Stopps verwendet die Strategie eine fortschrittlichere Tracking-Stop-Technologie, um die Gewinne besser abzuschließen.

Risikoanalyse

Die Strategie besteht hauptsächlich aus dem Risiko eines intermittierenden Whipsaws und einer Trendwende. Es kann dazu führen, dass die Strategie eingeschränkt wird, wenn eine Reihe von falschen Kreuzungssignalen auftreten. Außerdem kann eine Preiswende nach der Position ein Verlust verursachen.

Um die Gefahr einer Whipsaw zu verringern, wird die Strategie mit Hilfe von Hilfsindikatoren gefiltert. Um die Gefahr einer Trendwende zu kontrollieren, verwendet die Strategie eine tolerantere Stop-Range, während die Limit-Stop-Einstellung auch dazu beiträgt, diese Gefahr zu verringern.

Optimierungsrichtung

Die Strategie kann in mehreren Optimierungsrichtungen optimiert werden: Erstens können verschiedene Kombinationen von Parametern, wie EMA-Zyklen, Eröffnungs-Verzögerungs-Wurzeln usw. getestet werden, um die optimalen Parameter zu finden. Zweitens können mehr Hilfsindikatoren, wie MACD, BOLL usw., eingeführt werden, um die Signalqualität zu verbessern und die Signalqualität zu verbessern.

Zusammenfassen

Die 10 EMA-Doppel-Kreuz-Trend-Tracking-Strategie, die die aktuelle Trendrichtung durch EMA-Golden-Cross und Death-Cross beurteilt, Stop-Loss- und Stop-Loss-Strecken eingerichtet, um Gewinne zu locken und Risiken zu kontrollieren, und die Signalqualität durch die Kombination von Hilfsindikatoren zu verbessern, ist eine vollständige Trend-Trading-Strategie. Im Vergleich zu einem einzigen Indikator und einem herkömmlichen Stop-Loss hat die Strategie die Vorteile der Richtigkeit der Beurteilung, der Stop-Loss-Optimierung und der gleichzeitigen Risikokontrolle, die den Trendertrag effektiv nutzen kann.

Strategiequellcode
/*backtest
start: 2022-12-22 00:00:00
end: 2023-12-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("10ema Strat 9", overlay=true, format=format.price)
//#region // inputs for candles
//time
t1 = time(timeframe.period,"0930-1500") //last hour of market is not ideal for trading
// candle status
bullish = close > open and barstate.isconfirmed
bearish = open > close and barstate.isconfirmed
bullcandle = ta.valuewhen(bullish, close, 0)
bearcandle = ta.valuewhen(bearish, close, 0)
ema1 = input.int(10, minval=1, title="short ema")
ema2 = input.int(50, minval=1, title="long ema")
ema3 = input.int(200, minval=1, title="hourly 10 ema")
//@variable Input for source
src = input(close, title="Source")
offsetema = input.int(title="Offset", defval=0, minval=-500, maxval=500)
sema = ta.ema(src, ema1)//@variable Input for smaller ema1
lema = ta.ema(src, ema2)//@variable Input for longer ema2
hema = ta.ema(src, ema3)// @variable Input for hourly ema3
bullcrosscount = ta.barssince(ta.crossover(sema,lema)) //@variable Input 10/50 cross higher
bearcrosscount = ta.barssince(ta.crossunder(sema,lema)) //@variable Input 10/50 cross lower
ideallong = bullcrosscount <= 5 //number of candles after the cross
idealshort = bearcrosscount <= 5 //number of candles after the cross

emabull = (sema > lema) and bearish and close > sema and close > hema and ideallong and t1 and barstate.isconfirmed
xemabull = ta.barssince(emabull)
dbullema = emabull and emabull[1] and xemabull <=1
bullentry = if dbullema
    ta.valuewhen(emabull[1], high + 0.05, 0)
else 
    ta.valuewhen(emabull, high + 0.05, 0)
bullentryh = dbullema ? bullentry[1] : bullentry
bullentrylow = ta.valuewhen(emabull, low - 0.05, 0)
bullstop = (bullentryh - bullentrylow) <= 1.00 ? bullentryh - 1.00 : (bullentryh - bullentrylow) <= 10.40 ? bullentrylow : na
bulltarget = (bullentryh - bullstop) * 1.62 + bullentryh

// bear setup
emabear = (sema < lema) and bullish and close < sema and close < hema and idealshort and t1 and barstate.isconfirmed
xemabear = ta.barssince(emabear)
dbearema = emabear and emabear [1] and xemabear <=1
bearentry = if dbearema
    ta.valuewhen(emabear[1], low - 0.05, 0)
else
    ta.valuewhen(emabear, low - 0.05, 0)
bearentryh = dbearema ? bearentry[1] : bearentry
bearentryhigh = ta.valuewhen(emabear, high + 0.05, 0)
bearstop = (bearentryhigh - bearentryh) <= 1.00 ? bearentryh + 1.00 : (bearentryh - bearentryhigh) <= 10.40 ? bearentryhigh : na
beartarget = bearentryh - (bearstop-bearentryh) * 1.62

bullclose = (xemabull <=7) and bullish and bullcrosscount >=1 and barstate.isconfirmed //number of candles for a close above
bearclose = (xemabear <=7) and bearish and bearcrosscount >=1 and barstate.isconfirmed //number of candles for a close below
buyzone = ta.barssince(bullclose)
shortzone =  ta.barssince(bearclose)
idealbuy = close >= bullentryh and bullclose and (buyzone<=7)
idealsell = close <= bearentryh and bearclose and (shortzone<=7)

// // bull setup on chart
// if sema > lema and xemabull < 50
//     var line line_bullentry = line.new(bar_index, na, bar_index + 1, na, color=color.rgb(0, 200, 0), style=line.style_solid, width=1)
//     if emabull
//         line.set_xy1(line_bullentry, x=bar_index, y=bullentryh)
//         line.set_xy2(line_bullentry, x=bar_index, y=bullentryh)
//         alert("EMA-bullish", alert.freq_once_per_bar_close)
//     line.set_x2(line_bullentry, x=bar_index)
//     var line line_bullstop = line.new(bar_index, na, bar_index + 1, na, color=color.rgb(250, 0, 0), style=line.style_solid, width=1)
//     if emabull
//         line.set_xy1(line_bullstop, x=bar_index, y=bullstop)
//         line.set_xy2(line_bullstop, x=bar_index, y=bullstop)
//     line.set_x2(line_bullstop, x=bar_index)    
//     var line line_bulltarget = line.new(bar_index, na, bar_index + 1, na, color=color.rgb(200, 100, 200), style=line.style_solid, width=1)
//     if emabull
//         line.set_xy1(line_bulltarget, x=bar_index, y=bulltarget)
//         line.set_xy2(line_bulltarget, x=bar_index, y=bulltarget)
//     line.set_x2(line_bulltarget, x=bar_index)

// //bear setup on chart
// if sema < lema and xemabear < 50
//     var line line_bearentry = line.new(bar_index, na, bar_index, na, color=color.rgb(0, 200, 0), style=line.style_solid, width=1)
//     if emabear
//         line.set_xy1(line_bearentry, x=bar_index, y=bearentryh)
//         line.set_xy2(line_bearentry, x=bar_index, y=bearentryh)
//         alert("EMA-bearish", alert.freq_once_per_bar_close)
//     line.set_x2(line_bearentry, x=bar_index)
//     var line line_bearstop = line.new(bar_index, na, bar_index, na, color=color.rgb(250, 0, 0), style=line.style_solid, width=1)
//     if emabear
//         line.set_xy1(line_bearstop, x=bar_index, y=bearstop)
//         line.set_xy2(line_bearstop, x=bar_index, y=bearstop)
//     line.set_x2(line_bearstop, x=bar_index)
//     var line line_beartarget = line.new(bar_index, na, bar_index, na, color=color.rgb(200, 100, 200), style=line.style_solid, width=1)
//     if emabear
//         line.set_xy1(line_beartarget, x=bar_index, y=beartarget)
//         line.set_xy2(line_beartarget, x=bar_index, y=beartarget)
//     line.set_x2(line_beartarget, x=bar_index)

//#endregion
//execution 
if idealbuy
    strategy.close("sell", comment=na)	
    strategy.entry("buy", strategy.long, limit=bullentryh, stop=bullstop, comment="buy")
strategy.exit("exit","buy", trail_points = low, trail_offset = 5, qty_percent=100, limit=bulltarget, stop=bullstop)

if idealsell
	strategy.close("buy",comment=na)
    strategy.entry("sell", strategy.short, limit=bearentryh, stop=bearstop, comment="sell")
strategy.exit("exit","sell", trail_points = low, trail_offset = 5, qty_percent=100, limit=beartarget, stop=bearstop)
// strategy.close_all(time == close_day) 
//#region // graphical analysis
//Plots
plotshape(emabull, location=location.belowbar, title='emabull')
plotshape(idealbuy, style=shape.circle, color=color.green, title="bull close")
plotshape(emabear, title='emabear')
plotshape(idealsell, location=location.belowbar, style=shape.circle, color=color.red, title="bear close")

// //Dashboard
// var label id = na
// label.delete(id)   // Delete last label
// i_offsetLabel = input(15, "Data Dashboard Offset") 
// offset = i_offsetLabel * (time - time[1])
// dynamicText = "= Bull Setup ="
// id := label.new(x=time + offset, y=open, xloc=xloc.bar_time, text=dynamicText, color=color.rgb(255, 255, 255), size=size.normal)
// label.set_textcolor(id, color.rgb(0, 0, 0))
// label.set_text(id=id, text=dynamicText)
// label.set_textalign(id, text.align_left)
// label.set_text(id=id, text=dynamicText)
// f_round( _val, _decimals) => 
//     _p = math.pow(10, _decimals)
//     math.round(math.abs(_val) * _p) / _p * math.sign(_val)
// dynamicText := dynamicText + "\n" + str.tostring(f_round(bulltarget,2)) + "  :Target"
// label.set_text(id=id, text=dynamicText)
// dynamicText := dynamicText + "\n" + str.tostring(f_round(bullentryh,2)) + "  :Entry"
// label.set_text(id=id, text=dynamicText)
// dynamicText := dynamicText + "\n" + str.tostring(f_round(bullstop,2)) + "  :Stop"
// label.set_text(id=id, text=dynamicText)
// dynamicText := dynamicText + "\n"
// label.set_text(id=id, text=dynamicText)
// dynamicText := dynamicText + "\n" + "= Bear Setup ="
// label.set_text(id=id, text=dynamicText)
// dynamicText := dynamicText + "\n" + str.tostring(f_round(bearstop,2)) + "  :Stop"
// label.set_text(id=id, text=dynamicText)
// dynamicText := dynamicText + "\n" + str.tostring(f_round(bearentryh,2)) + "  :Entry"
// label.set_text(id=id, text=dynamicText)
// dynamicText := dynamicText + "\n" + str.tostring(f_round(beartarget,2)) + "  :Target"
// label.set_text(id=id, text=dynamicText)
// //#endregion