Trendverfolgung der EMA-Breakout-Strategie

Schriftsteller:ChaoZhang, Datum: 2024-01-12 14:23:11
Tags:

img

Übersicht

Dies ist eine Trend-Tracking-Breakout-Strategie, die auf dem exponentiellen gleitenden Durchschnitt (EMA) basiert. Sie beurteilt die Trendrichtung in den monatlichen, wöchentlichen und täglichen Zeitrahmen und führt spezifische Ein- und Ausstiegsaktionen auf dem täglichen Chart aus.

Strategie Logik

Trendbeurteilung

  1. Auf dem Monatsdiagramm liegt der Preis über der 8-tägigen EMA und die 8-tägige EMA über der 21-tägigen EMA, was auf einen Aufwärtstrend hinweist.
  2. Auf dem wöchentlichen Diagramm liegt der Kurs über der 8-Tage-EMA und die 8-Tage-EMA liegt über der 21-Tage-EMA, was auf einen Aufwärtstrend hinweist.
  3. Auf dem Tagesdiagramm liegt der Preis über der 8-Tage-EMA und die 8-Tage-EMA über der 21-Tage-EMA, was auf einen Aufwärtstrend hinweist.

Eintrittssignal

  1. Auf dem Tagesdiagramm wird ein Rückgang beobachtet, wobei der Tiefpunkt den gestrigen 8-Tage-EMA berührt;
  2. Der Pullback bildet ein Ring-Low-Muster mit unterem Hoch und unterem Tief.
  3. Der Schlusskurs ist höher als der Vortagshöchstwert und bildet ein Trendumkehrsignal.

Ausfahrtssignal

Festlegen von Profit- und Stop-Loss-Standards für den Ausstieg.

Analyse der Vorteile

  1. Das Beurteilen des Trends auf drei Zeitrahmen verbessert die Genauigkeit;
  2. Der Rückzug zur EMA unterstützt und erhöht die Eintrittssicherheit;
  3. Die Verfolgung von Trendläufen hat ein hohes Gewinnpotenzial;

Risikoanalyse

  1. Inkonsequente Urteile in Zeitrahmen können zu falschen Signalen führen;
  2. Eine übermäßige Rücknahme kann die Strategie ungültig machen;
  3. Bei Flash-Abstürzen kann ein Stop-Loss-Sweep auftreten.

Optimierungsrichtlinien

  1. Hinzufügen von MACD, RSI zur ergänzenden Beurteilung;
  2. Optimierung der EMA-Parameter-Einstellungen
  3. Anpassung der Gewinnspanne und des Stop-Loss-Bereichs anhand der Volatilität.

Zusammenfassung

Die Strategie hat ein sehr gutes Gewinnpotenzial, wenn der Trend richtig beurteilt wird. Man muss auf ungenaue Trendbeurteilung und übermäßigen Rückzug achten, der falsche Signale verursacht. In der Zwischenzeit ist die Optimierung der Gewinn- und Stop-Loss-Einstellungen der Schlüssel zur weiteren Verbesserung des Randes.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © the_daily_trader

//@version=5
// ---------------------        Start of Code        ---------------------
strategy("Swing Trades Validator", overlay=true, margin_long=100, pyramiding = 0)

// Indicator Display Checks
TakeProfitPercent       = input.float(title="Profit Target %", defval=10, minval=1, step=0.05)
StopLossPercent         = input.float(title="Stop Loss %", defval=10, minval=1, step=0.05)
pullbackchoice          = input.bool(false, "Relaxed Entry Rules")

// EMAs
emaH            = ta.ema(close, 8)
emaHyest        = ta.ema(close[1], 8)
emaHyest1       = ta.ema(close[2], 8)
emaHyest2       = ta.ema(close[3], 8)
emaL            = ta.ema(close, 21)
emaLyest        = ta.ema(close[1], 21)
emaLyest1       = ta.ema(close[2], 21)
emaLyest2       = ta.ema(close[3], 21)
emaf            = ta.ema(close, 50)
emath           = ta.ema(close, 200)
emathhigh       = ta.ema(high, 200)
emathlow        = ta.ema(low, 200)
emaslowmonthly  = request.security(syminfo.tickerid, "M", emaL) // Monthly 21ema
emafastmonthly  = request.security(syminfo.tickerid, "M", emaH) // Monthly 8ema
emaslowweekly   = request.security(syminfo.tickerid, "W", emaL) // Weekly 21ema
emafastweekly   = request.security(syminfo.tickerid, "W", emaH) // Weekly 8ema
emaslowdaily    = request.security(syminfo.tickerid, "D", emaL) // Daily 21ema
emafastdaily    = request.security(syminfo.tickerid, "D", emaH) // Daily 8ema
emafdaily       = request.security(syminfo.tickerid, "D", emaf) // Daily 50ema
emathdaily      = request.security(syminfo.tickerid, "D", emath) // Daily ema
emathdailyhigh  = request.security(syminfo.tickerid, "D", emathhigh) // Daily ema High
emathdailylow   = request.security(syminfo.tickerid, "D", emathlow) // Daily ema Low
ema21yest       = request.security(syminfo.tickerid, "D", emaLyest) // Daily 21ema 1 day ago
ema21yest1      = request.security(syminfo.tickerid, "D", emaLyest1) // Daily 21ema 2 days ago
ema21yest2      = request.security(syminfo.tickerid, "D", emaLyest2) // Daily 21ema 3 days ago
ema8yest        = request.security(syminfo.tickerid, "D", emaHyest) // Daily 8ema 1 day ago
ema8yest1       = request.security(syminfo.tickerid, "D", emaHyest1) // Daily 8ema 2 days ago
ema8yest2       = request.security(syminfo.tickerid, "D", emaHyest2) // Daily 8ema 3 days ago


// Prices
monthopen       = request.security(syminfo.tickerid, 'M', open, barmerge.gaps_off, barmerge.lookahead_on)
monthclose      = request.security(syminfo.tickerid, 'M', close, barmerge.gaps_off, barmerge.lookahead_on)
weekopen        = request.security(syminfo.tickerid, 'W', open, barmerge.gaps_off, barmerge.lookahead_on)
weekclose       = request.security(syminfo.tickerid, 'W', close, barmerge.gaps_off, barmerge.lookahead_on)
dayopen         = request.security(syminfo.tickerid, 'D', open, barmerge.gaps_off, barmerge.lookahead_on)
dayclose        = request.security(syminfo.tickerid, 'D', close, barmerge.gaps_off, barmerge.lookahead_on)
threedayhigh    = request.security(syminfo.tickerid, 'D', high[3], barmerge.gaps_off, barmerge.lookahead_on)
twodayhigh      = request.security(syminfo.tickerid, 'D', high[2], barmerge.gaps_off, barmerge.lookahead_on)
yesthigh        = request.security(syminfo.tickerid, 'D', high[1], barmerge.gaps_off, barmerge.lookahead_on)
yestlow         = request.security(syminfo.tickerid, 'D', low[1], barmerge.gaps_off, barmerge.lookahead_on)

// Conditions 
monthlybullish          = emafastmonthly > emaslowmonthly
monthlybullishprice     = close > emafastmonthly
monthlybullishcandle    = monthclose > monthopen
weeklybullish           = emafastweekly > emaslowweekly
weeklybullishprice      = close > emafastweekly
weeklybullishcandle     = weekclose > weekopen
dailybullish1           = emafdaily > emathdaily
dailybullish2           = emafastdaily > emaslowdaily
dailybullishprice       = close > emafastdaily
dailybullishcandle      = dayclose > dayopen
ringlow                 = yestlow <= ema8yest
aggropullback           = twodayhigh < threedayhigh
pullback                = (pullbackchoice ? aggropullback : 0)
pullbackfailure         = dayclose > yesthigh and yesthigh < twodayhigh or pullback
emasetup                = ema8yest > ema21yest and ema8yest1 > ema21yest1 and ema8yest2 > ema21yest2

// Target Profit and Stop Loss Inputs
// Input parameters can be found at the beginning of the code
ProfitTarget        = (close * (TakeProfitPercent / 100)) / syminfo.mintick
StopLoss            = (close * (StopLossPercent / 100)) / syminfo.mintick

longCondition = monthlybullish and monthlybullishprice and weeklybullish and weeklybullishprice and dailybullish1 and dailybullish2 and dailybullishprice and monthlybullishcandle and weeklybullishcandle and dailybullishcandle and ringlow and pullbackfailure and emasetup

if (longCondition)
    strategy.entry("Long", strategy.long)
    strategy.exit ("Exit", "Long", profit = ProfitTarget, loss = StopLoss)
    // strategy.close("Long", qty_percent = 100)


// -----------xxxxxxxxxxx-------------    End of Code     -----------xxxxxxxxxxx---------------

Mehr