Eine Breakout EMA-Cross-Strategie ist eine Handelsstrategie, die auf der Kreuzung von Preis-Breakout und Index-Moving Average (EMA) basiert. Die Strategie verwendet den höchsten Preis in einer bestimmten Periode als Kaufsignal und die EMA als Verkaufssignal. Wenn der Schlusskurs den höchsten Preis in einer bestimmten Periode überschreitet, erzeugt die Strategie ein Kaufsignal.
Das Kernprinzip der Breakout EMA-Cross-Strategie besteht darin, Markttrends durch die Nutzung von Preis-Breakouts und EMA-Cross-Strategie zu erfassen. Wenn der Preis den höchsten Preis innerhalb des angegebenen Zeitraums überschreitet, zeigt dies an, dass der Markt möglicherweise in einen Aufwärtstrend eintritt, so dass die Strategie ein Kaufsignal erzeugt. Gleichzeitig ist die EMA als Trendverfolgungsindikator ein Trend, der zeigt, dass der Aufwärtstrend möglicherweise beendet ist, wenn der Preis die EMA überschreitet, so dass die Strategie ein Verkaufssignal erzeugt.
Die Strategie umfasst folgende Schritte:
Durch die oben genannten Schritte kann die Strategie im Aufwärtstrend profitieren und gleichzeitig das Abwärtsrisiko mit Stop-Loss kontrollieren.
Eine Strategie, die die EMA-Kreuzung über die Höchstpreise durchbricht, hat folgende Vorteile:
Obwohl es einige Vorteile gibt, die EMA-Kreuzung durch die Höchstpreise zu durchbrechen, ist es mit folgenden Risiken verbunden:
Um diese Risiken zu verringern, können folgende Maßnahmen in Erwägung gezogen werden:
Um die Leistung der Breakout-Höchstpreis-EMA-Kreuzungsstrategie weiter zu verbessern, können folgende Optimierungsrichtungen in Betracht gezogen werden:
Durch diese Optimierungsmaßnahmen können die Stabilität, Anpassungsfähigkeit und Ertragsfähigkeit der Breakthrough-Hochpreis-EMA-Kreuzungsstrategien verbessert werden, so dass sie in mehr Marktumgebungen gut abschneiden können.
Breakout EMA-Kreuzungen sind eine einfache und effektive Trend-Tracking-Strategie, die Markttrends durch die Nutzung von Preiskreuzungen und EMA-Kreuzungen erfasst und zugleich mit Stop-Losses das Abwärtsrisiko kontrolliert. Die Strategie ist klar in der Logik, flexibel in den Parametern und leicht zu verstehen und umzusetzen. Obwohl die Strategie bestimmte Risiken wie Marktschwankungen, Trendwechselrisiken und Parameterrisiken birgt, können diese Risiken durch geeignete Risikokontrollmaßnahmen gemildert werden, z. B. durch Anpassung der Parameter, Kombination anderer Indikatoren und die Einrichtung eines angemessenen Stop-Losses usw.
/*backtest
start: 2024-02-01 00:00:00
end: 2024-02-29 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// @version = 5
strategy(title="BreakHigh Strategy", overlay=true)
Period = input.int(34, "Number of previous bars(34,52 Recommend)")
showbg = input(defval = false,title = "Show BackGround Color")
showema = input(defval = true ,title = "Show Line")
MarkBuySig = input(defval = true ,title = "Show Buy/Sell Signal")
Risk_Per_Trade = input(2.5, '% of Risk Per Trade') / 100 // Risk% Per Trade Switch
SLDAY = input(title='Lowest price of the previous number of bars', defval=9)
Buysig = input(defval=true, title='Start Strategy')
UseSl = input(defval=false, title='Use Stoploss Price')
Compound = input(defval = false ,title = "Compound Profit")
xtf = input.timeframe(title='** Fix chart to which time frame ? **)', defval='D')
//BUY
float buyLine = na
buyLine := ta.highest(high,Period)[1]
plot(showema ? buyLine : na, linewidth=1, style=plot.style_linebr, color=color.new(color.green, 0))
//SELL
output = ta.ema(close, Period)
show = request.security(syminfo.tickerid, xtf, output)
FastL = plot(showema ? show : na, color=color.new(color.white, 0), linewidth=2, title='Slow EMA')
//Buy-Sell Signal
Green = close > buyLine // Buy
Red = close < show // Sell
buycond = Green and Green[1] == 0
sellcond = Red and Red[1] == 0
bullish = ta.barssince(buycond) < ta.barssince(sellcond)
bearish = ta.barssince(sellcond) < ta.barssince(buycond)
buy = bearish[1] and buycond
sell = bullish[1] and sellcond
plotshape(MarkBuySig ? buy : na, style=shape.labelup, text='Buy Next Bar', textcolor=color.new(color.black, 0), location=location.belowbar, color=color.new(color.green, 0))
plotshape(MarkBuySig ? sell : na, style=shape.labeldown, text='Sell Next Bar', textcolor=color.new(color.black, 0), location=location.abovebar, color=color.new(color.red, 0))
bgcolor(showbg ? bullish ? color.new(color.green,90) : color.new(color.red,90) : na )
// === BACKTEST RANGE === //
use_date_range = input(true)
FromYear = input.int(defval=2012, title='From Year', minval=1950)
FromMonth = input.int(defval=1, title='From Month', minval=1)
FromDay = input.int(defval=1, title='From Day', minval=1)
ToYear = input.int(defval=9999, title='To Year', minval=1950)
ToMonth = input.int(defval=1, title='To Month', minval=1)
ToDay = input.int(defval=1, title='To Day', minval=1)
in_date_range = use_date_range ? time > timestamp(FromYear, FromMonth, FromDay, 00, 00) and time < timestamp(ToYear, ToMonth, ToDay, 23, 59) : true
//****************************************************************************//
//////////////////////////////////////////////
// define strategy entry / exit //
//////////////////////////////////////////////
//****************************************************************************//
// LONG CONDITIONS
Select_Long_Condition_1 = close > buyLine // Buy when Have Signal
Open_Long_Condition = Select_Long_Condition_1 and strategy.opentrades == 0
//****************************************************************************//
// STOP LOSS Price
float longSL = na
longSL := Open_Long_Condition ? ta.lowest(low, SLDAY)[1] : longSL[1]
//****************************************************************************//
// Cal StopLoss
Long_Entry_Price = close
Diff_OPEN_to_SL = math.abs(Long_Entry_Price - longSL)
// Exit CONDITIONS
Exit_Long_Condition = close < show // Sell when Have Signal
//****************************************************************************//
// POSITION SIZE CAP
strategy.initial_capital = 50000
float portSize = Compound ? strategy.netprofit + strategy.initial_capital : strategy.initial_capital
float LossAmoutUnit = portSize * Risk_Per_Trade //50
float PercentSL = ( Diff_OPEN_to_SL / Long_Entry_Price ) * 100
float PositionSize = LossAmoutUnit / Diff_OPEN_to_SL
//****************************************************************************//
// ENTRY/EXIT
if Buysig
if Open_Long_Condition and in_date_range
strategy.entry('LONG', strategy.long, qty=PositionSize)
if Exit_Long_Condition and in_date_range
strategy.close('LONG')
if close < longSL and UseSl
strategy.close('LONG')
//****************************************************************************//
// PLOT STOP LOSS
longPlotSL = strategy.opentrades > 0 and strategy.position_size > 0 ? longSL : na
// label.new(bar_index, high, text=str.tostring(longPlotSL),color=color.white, textcolor=color.black)
plot(longPlotSL, title="", linewidth=2, style=plot.style_linebr, color=color.new(color.red, 0))
//****************************************************************************//