EMA Golden Cross Pullback-Strategie


Erstellungsdatum: 2023-12-21 11:48:54 zuletzt geändert: 2023-12-21 11:48:54
Kopie: 2 Klicks: 877
1
konzentrieren Sie sich auf
1623
Anhänger

EMA Golden Cross Pullback-Strategie

Überblick

Die EMA Gold Cross-Return-Strategie ist eine quantitative Handelsstrategie, die auf EMA-Indikatoren basiert. Die Strategie verwendet die EMA-Kurve für drei verschiedene Perioden, um ein Handelssignal zu erstellen, und kombiniert mit der Preis-Return-Mechanik, um einen Stop-Loss-Stop einzurichten, um den Handel zu automatisieren.

Strategieprinzip

Die Strategie verwendet drei EMA-Kurven:

  • EMA1: Kurze Periode, die als Default 33 Zyklen verwendet wird, um die Unterstützung/Widerstandslage für die Preisrückführung zu bestimmen.
  • EMA2: wird verwendet, um einen Teil des Umkehrsignals zu filtern, mit einer 5-fachen Periodizität von EMA1 und einer Default von 165 Zyklen.
  • EMA3: 11 mal so häufig wie EMA1 und 365 mal so häufig wie EMA1

Die Erzeugung von Handelssignalen folgt der folgenden Logik:

Mehrfaches Signal: Nach dem Auftritt der EMA1-Konstitute tritt ein Umschwung ein, der über EMA1 einen höheren Tiefpunkt bildet, ohne EMA2 zu berühren. Nachdem die Bedingung erfüllt ist, wird beim erneuten Auftritt der EMA1 ein Plus gemacht.

Hohes Signal: Nach dem Durchbruch der EMA1 erfolgt ein Rückschlag, der unterhalb der EMA1 einen niedrigeren Höchststand bildet, der die Rückschlagstärke nicht erreicht hat EMA2. Nach Erfüllung der Bedingungen wird beim erneuten Durchbruch der EMA1 ein Rückschlag gemacht.

Die Stop-Loss-Methode besteht darin, den Mindestpreis/Höchstpreis zurückzusetzen. Die Stop-Loss-Methode ist auf das Doppelte der Stop-Loss-Einstellung festgelegt.

Strategische Vorteile

Diese Strategie hat folgende Vorteile:

  1. Die EMA-Indikatoren werden verwendet, um Handelssignale zu erstellen, die zuverlässig sind.
  2. In Kombination mit einem Preisrückführungssystem kann man sich effektiv vor einer Geldbuße schützen.
  3. Der Stop-Loss-Punkt ist auf die vorherige Höhen- und Tieflage eingestellt, um das Risiko effektiv zu kontrollieren.
  4. Setzen Sie die Stop-Loss-Ratio für die Stop-Loss-Ratio, um die Gewinn- und Verlustquote zu erfüllen.
  5. Die EMA-Parameter können je nach Markt für unterschiedliche Zeiträume angepasst werden.

Strategisches Risiko

Die Strategie birgt einige Risiken:

  1. Die EMA-Indikatoren sind nachlässig und könnten einen Trendwendepunkt verpassen.
  2. Überschreiten von EMA2 kann falsche Signale erzeugen.
  3. Der Trend könnte durchbrochen werden.
  4. Die falsche Einstellung der Parameter kann zu zu häufigen Transaktionen oder zu verpassten Gelegenheiten führen.

Die Parameter können durch Anpassung der EMA-Periode, Rückschaltung des Grenzbereichs und andere Methoden optimiert werden. Sie können auch mit anderen Indikatoren kombiniert werden, um die Filtersignale zu filtern.

Richtung der Strategieoptimierung

Die Strategie kann auch in folgenden Bereichen optimiert werden:

  1. Zunahme der Trendmessung und Vermeidung von Rückschlüssen. Zum Beispiel die Aufnahme in den MACD.
  2. Hinzufügen von Handelsvolumenindikatoren, um falsche Durchbrüche zu vermeiden.
  3. Optimierung der EMA-Zyklusparameter oder Anpassung der EMA.
  4. Dynamische Optimierungsparameter für Machine-Learning-Methoden, wie z. B. das Wortsäcke-Modell.
  5. Modellvorhersagen mit Adaptive Stop-Loss-Satz

Zusammenfassen

Die EMA-Gold-Cross-Return-Strategie ermöglicht den automatisierten Handel durch den Aufbau von drei EMA-Handelssystemen, die mit Stop-Loss-Sets kombiniert werden. Die Strategie kontrolliert das Handelsrisiko effektiv und kann durch Anpassung der Parameter an den Markt optimiert werden. Insgesamt ist die Strategie logisch und praktisch anwendbar.

Strategiequellcode
/*backtest
start: 2023-11-20 00:00:00
end: 2023-12-20 00:00:00
period: 1h
basePeriod: 15m
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/
// created by Space Jellyfish
//@version=4

strategy("EMA pullback strategy", overlay = true, initial_capital=10000, commission_value = 0.075)

target_stop_ratio = input(title="Take Profit Stop Loss ratio", type=input.float, defval=2.06, minval=0.5, maxval=100)
riskLimit_low =  input(title="lowest risk per trade", type=input.float, defval=0.008, minval=0, maxval=100)
riskLimit_high =  input(title="highest risk per trade", type=input.float, defval=0.02, minval=0, maxval=100)
//give up the trade, if the risk is smaller than limit, adjust position size if risk is bigger than limit

ema_pullbackLevel_period = input(title="EMA1 for pullback level Period", type=input.integer, defval=33, minval=1, maxval=10000)
ema_pullbackLimiit_period = input(title="EMA2 for pullback limit Period", type=input.integer, defval=165, minval=1, maxval=10000)
ema_trend_period = input(title="EMA3 for trend Period", type=input.integer, defval=365, minval=1, maxval=10000)

startDate = input(title="Start Date", type=input.integer, defval=1, minval=1, maxval=31)
startMonth = input(title="Start Month", type=input.integer, defval=1, minval=1, maxval=12)
startYear = input(title="Start Year", type=input.integer, defval=2018, minval=2008, maxval=2200)

inDateRange = (time >= timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0))

ema_pullbackLevel = ema(close, ema_pullbackLevel_period)
ema_pullbackLimit = ema(close, ema_pullbackLimiit_period)
ema_trendDirection = ema(close, ema_trend_period)

//ema pullback 
float pricePullAboveEMA_maxClose = na
float pricePullAboveEMA_maxHigh = na

float pricePullBelowEMA_minClose = na
float pricePullBelowMA_minLow = na

if(crossover(close, ema_pullbackLevel))
    pricePullAboveEMA_maxClose := close
    pricePullAboveEMA_maxHigh := high
else
    pricePullAboveEMA_maxClose := pricePullAboveEMA_maxClose[1]
    pricePullAboveEMA_maxHigh := pricePullAboveEMA_maxHigh[1]

if(close > pricePullAboveEMA_maxClose)
    pricePullAboveEMA_maxClose := close
if(high > pricePullAboveEMA_maxHigh)
    pricePullAboveEMA_maxHigh := high

if(crossunder(close, ema_pullbackLevel))
    pricePullBelowEMA_minClose := close
    pricePullBelowMA_minLow := low
else
    pricePullBelowEMA_minClose :=pricePullBelowEMA_minClose[1]
    pricePullBelowMA_minLow:=pricePullBelowMA_minLow[1]
    
if(close < pricePullBelowEMA_minClose)
    pricePullBelowEMA_minClose := close
if(low < pricePullBelowMA_minLow)
    pricePullBelowMA_minLow := low


long_strategy = crossover(close, ema_pullbackLevel) and pricePullBelowEMA_minClose < ema_pullbackLimit and ema_pullbackLevel>ema_trendDirection 
short_strategy = crossunder(close, ema_pullbackLevel) and pricePullAboveEMA_maxClose > ema_pullbackLimit and ema_pullbackLevel<ema_trendDirection


var open_long_or_short = 0// long = 10000, short = -10000, no open = 0

//check if position is closed
if(strategy.position_size == 0)
    open_long_or_short := 0
else
    open_long_or_short := open_long_or_short[1]

float risk_long = na
float risk_short = na
float stopLoss = na
float takeProfit = na
float entry_price = na

float entryContracts = 0



risk_long := risk_long[1]
risk_short := risk_short[1]
    
//open a position determine the position size
if (strategy.position_size == 0 and long_strategy and inDateRange)
    risk_long := (close - pricePullBelowMA_minLow) / close

    if(risk_long < riskLimit_high)
        entryContracts := strategy.equity / close
    else
        entryContracts := (strategy.equity * riskLimit_high / risk_long)/close
    
    if(risk_long > riskLimit_low)
        strategy.entry("long", strategy.long, qty = entryContracts, when = long_strategy)


    open_long_or_short := 10000
    
if (strategy.position_size == 0 and short_strategy and inDateRange)
    risk_short := (pricePullAboveEMA_maxHigh - close) / close
    if(risk_short < riskLimit_high)
        entryContracts := strategy.equity / close
    else
        entryContracts := (strategy.equity * riskLimit_high / risk_short)/close

    if(risk_short > riskLimit_low)
        strategy.entry("short", strategy.short, qty = entryContracts, when = short_strategy)

    
    open_long_or_short := -10000

//take profit / stop loss
if(open_long_or_short == 10000)

    stopLoss :=   strategy.position_avg_price*(1 - risk_long)
    takeProfit :=  strategy.position_avg_price*(1 + target_stop_ratio * risk_long)
    entry_price := strategy.position_avg_price
    strategy.exit("Long exit","long", limit = takeProfit , stop = stopLoss)
    
if(open_long_or_short == -10000)
    stopLoss :=  strategy.position_avg_price*(1 + risk_short)
    takeProfit :=  strategy.position_avg_price*(1 - target_stop_ratio * risk_short)
    entry_price := strategy.position_avg_price
    strategy.exit("Short exit","short", limit = takeProfit, stop = stopLoss)



plot(ema_pullbackLevel, color=color.aqua,  title="ema pullback level")
plot(ema_pullbackLimit, color=color.purple,  title="ema pullback limit")
plot(ema_trendDirection, color=color.white,  title="ema trend")

plot(entry_price, color = color.yellow, linewidth = 1, style = plot.style_linebr)
plot(stopLoss, color = color.red, linewidth = 1, style = plot.style_linebr)
plot(takeProfit, color = color.green, linewidth = 1, style = plot.style_linebr)





//