Die BreakHigh EMA Crossover Strategie ist eine Handelsstrategie, die auf dem Preis-Breakout und dem Exponential Moving Average (EMA) Crossover basiert. Die Strategie verwendet den höchsten Preis innerhalb eines bestimmten Zeitraums als Kaufsignal und die EMA als Verkaufssignal. Wenn der Schlusskurs über den höchsten Preis innerhalb des angegebenen Zeitraums bricht, erzeugt die Strategie ein Kaufsignal. Wenn der Schlusskurs unter die EMA fällt, erzeugt die Strategie ein Verkaufssignal. Die Strategie legt auch einen Stop-Loss-Preis fest, um das Risiko zu kontrollieren. Darüber hinaus bietet die Strategie den Benutzern mehrere Parameter, die sie anpassen können, um sich an verschiedene Handelsstile und Marktbedingungen anzupassen.
Das Kernprinzip der BreakHigh EMA Crossover Strategie besteht darin, Markttrends mithilfe von Preisbruch und EMA Crossover zu erfassen. Wenn der Preis innerhalb eines bestimmten Zeitraums über den höchsten Preis bricht, zeigt dies an, dass der Markt einen Aufwärtstrend betreten kann, so dass die Strategie ein Kaufsignal erzeugt. Gleichzeitig dient die EMA als Trend-Nachfolgungsindikator. Wenn der Preis unter die EMA fällt, zeigt sie an, dass der Aufwärtstrend enden kann, so dass die Strategie ein Verkaufssignal erzeugt.
Die Strategie setzt folgende Schritte zur Umsetzung des Handels ein:
Durch die oben genannten Schritte kann die Strategie von dem steigenden Markttrend profitieren und gleichzeitig Stop-Loss zur Kontrolle des Abwärtsrisikos verwenden.
Die BreakHigh EMA Crossover-Strategie hat folgende Vorteile:
Obwohl die BreakHigh EMA Crossover-Strategie gewisse Vorteile hat, birgt sie auch folgende Risiken:
Zur Verringerung dieser Risiken können folgende Maßnahmen in Betracht gezogen werden:
Um die Leistung der BreakHigh EMA Crossover Strategie weiter zu verbessern, können folgende Optimierungsrichtungen in Betracht gezogen werden:
Durch die oben genannten Optimierungsmaßnahmen können die Stabilität, Anpassungsfähigkeit und Rentabilität der BreakHigh EMA Crossover-Strategie verbessert werden, sodass sie in mehr Marktumgebungen eine gute Performance erzielen kann.
Die BreakHigh EMA-Crossover-Strategie ist eine einfache und effektive Trend-folgende Strategie, die Markttrends erfasst, indem Preis-Breakout und EMA-Crossover verwendet werden, während Stop-Loss verwendet wird, um das Abwärtsrisiko zu kontrollieren. Die Strategielogik ist klar, die Parameter sind flexibel und ist leicht zu verstehen und umzusetzen. Obwohl die Strategie bestimmte Risiken wie Marktvolatilitätsrisiko, Trendumkehrrisiko und Parameterrisiko hat, können diese Risiken durch geeignete Risikokontrollmaßnahmen, wie Anpassung von Parametern, Kombination mit anderen Indikatoren und Einstellung eines angemessenen Stop-Loss, gemildert werden. Darüber hinaus hat die Strategie einen weiteren Optimierungsraum wie dynamische Parameteranpassung, Einführung eines Long-Short-Loss-Mechanismus, Optimierung von Stop- und Take-Profit und Kombination mit Fundamentalanalyse usw., um die Leistungsfähigkeit und Anpassungsfähigkeit der Strategie zu verbessern.
/*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)) //****************************************************************************//