Dreifache EMA mit Stop-Loss-Strategie

Schriftsteller:ChaoZhang, Datum: 2023-10-17 15:05:41 Uhr
Tags:

img

Übersicht

Diese Strategie implementiert ein typisches dreifaches exponentielles gleitendes Durchschnitt (EMA) Handelssystem. Es erzeugt Handelssignale, indem es schnelle 5-tägige EMA, mittlere 20-tägige EMA und langsame 50-tägige EMA vergleicht.

Grundsätze

Wenn die 5-Tage-EMA über die 20-Tage-EMA hinausgeht und alle drei EMAs bullisch ausgerichtet sind (5-Tage-EMA > 20-Tage-EMA > 50-Tage-EMA) und die aktuelle Barschließung über den vorherigen Barschließungen bei bestimmten Tick-Werte liegt, geht man lang.

Nach dem Eintritt, wenn der Preis durch bestimmte Tickwellen läuft, wird ein nachfolgender Stop-Loss eingeleitet, um den Stop-Loss anhand der Kursschwankungen weiter anzupassen, um größere Gewinne zu erzielen.

Vorteile

  1. Die Verwendung von dreifachen EMAs zur Erzeugung von Signalen kann Marktlärm effektiv filtern und Trends identifizieren.

  2. Durch den Vergleich der aktuellen Bar-Schließungen mit früheren Bar-Schließungen werden weitere falsche Signale gefiltert und unnötige Trades reduziert.

  3. Trailing-Stop-Loss passt den Stop-Loss dynamisch an, basierend auf der Kursentwicklung, um die Gewinnverbindung zu maximieren.

  4. Die flexiblen Parameter-Einstellungen dieser Strategie ermöglichen die Optimierung für verschiedene Produkte und Zeitrahmen von täglich bis Minutenbalken.

Risiken

  1. Häufige EMA-Kreuzungen können zu übermäßigen Geschäften in unterschiedlichen Märkten führen und die Kosten für Provisionen und Slippage erhöhen.

  2. Ein Trailing Stop Loss kann den Trend bei riesigen Whipsaws vorzeitig verlassen.

  3. EMA-Verzögerung kann zu fehlenden wichtigen Wendepunkten und Verlusten führen.

  4. Parameter wie EMA-Perioden, nachlaufende Stopp-Ticks erfordern eine Optimierung für verschiedene Produkte und Zeitrahmen.

Anweisungen zur Verbesserung

  1. Einbeziehen Sie andere Indikatoren wie MACD, KD, um Handelssignale zu filtern.

  2. Test und Optimierung von Parametern für bestimmte Produkte und Zeitrahmen, um die besten Kombinationen zu finden.

  3. Dynamische Anpassung der Parameter durch menschliche Überwachung oder maschinelles Lernen.

  4. Überlegen Sie, ob Sie für spezifische Marktbedingungen den Trailing-Stop deaktivieren und die volle Position halten.

  5. Ersetzen Sie einfache Stop-Loss-Systeme durch fortschrittlichere automatische Profit-Taking-Mechanismen.

Schlussfolgerung

Diese Strategie integriert drei gängige Technische Analyse-Techniken - EMA-Crossover, Preis-Breakout und Trailing Stop-Loss in ein ziemlich umfassendes und robustes Trend-Folge-Handelssystem. Durch Parameteroptimierung kann sie an verschiedene Produkte und Zeitrahmen angepasst werden und funktioniert gut in starken Trending-Märkten.


/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-02 12:00:00
period: 1m
basePeriod: 1m
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/
// © Matt Dearden - IndoPilot
// @version=4

/////////////////////////////////////////////////////// Initial Parameters /////////////////////////////////////////////////////// 
SystemName = "Triple EMA Strategy"
ShortSystemName = "TEMA"
InitPosition = 0
InitCapital = 50000
InitCommission = 0.004 //approx value to compensate for Oanda spreads
InitPyramidMax = 0
CalcOnorderFills = true

strategy(title=SystemName, shorttitle=ShortSystemName, overlay=true, pyramiding=InitPyramidMax, 
 default_qty_type=strategy.cash, default_qty_value=InitPosition, commission_type=strategy.commission.percent, 
 commission_value=InitCommission, initial_capital=InitCapital, max_lines_count=500, 
 max_labels_count=500, process_orders_on_close=false, calc_on_every_tick=false) 

///////////////////////////////////////////////////////////// Inputs /////////////////////////////////////////////////////////////

DateFilter = input(false, "═════ Data Filtering ═════") 
InitYear = input(title="Year", type=input.integer, defval=2021, minval=2000, maxval=2021)
InitMonth = input(title="Month (0=ALL)", type=input.integer, defval=0, minval=0, maxval=12)
InitStopLoss = input(title="Stop Loss (ticks)", type=input.integer, defval=100, minval=0, maxval=1000) 
TrailingStopLoss = input(title="Trailing S/L (ticks)", type=input.integer, defval=130, minval=0, maxval=1000) 
InitBuffer = input(title="Buffer (ticks)", type=input.integer, defval=15, minval=0, maxval=1000) 
InitEMA1 = input(title="EMA 1", type=input.integer, defval=5, minval=0, maxval=1000) 
InitEMA2 = input(title="EMA 2", type=input.integer, defval=20, minval=0, maxval=1000) 
InitEMA3 = input(title="EMA 3", type=input.integer, defval=50, minval=0, maxval=1000) 

//////////////////////////////////////////////////////////// Variables ///////////////////////////////////////////////////////////

var StopLoss = float(0.0)
var StartPrice = float(0.0)
//setup multipliers and catch JPY difference
Multiplier = syminfo.currency == "JPY" ? 10 : 1000
//get the daily exchange rate from yesterday
//X_rate = security(AccountCurrency+syminfo.currency, "D", close[1]) 
OrderQty = 1  
Buffer = InitBuffer / (Multiplier * 100)

/////////////////////////////////////////////////////// Triple EMA Strategy //////////////////////////////////////////////////////

EMA1 = ema(close, InitEMA1)
EMA2= ema(close, InitEMA2)
EMA3 = ema(close, InitEMA3)

//entry conditions
longCondition = crossover(EMA1, EMA2) and close > EMA3 and EMA1 > EMA3 and EMA2 > EMA3 and close > (close[1] + Buffer) 
shortCondition = crossunder(EMA1, EMA2) and close < EMA3 and EMA1 < EMA3 and EMA2 < EMA3 and close < (close[1] - Buffer) 

/////////////////////////////////////////////////////// Trailing Stoploss ////////////////////////////////////////////////////////

if (strategy.position_size > 0 and (close > (StartPrice + (TrailingStopLoss / (100 * Multiplier)))))  
    StopLoss := max(StopLoss, close - (TrailingStopLoss / (100 * Multiplier))) 
    strategy.exit("Long Stoploss", "Long") 
    
if (strategy.position_size < 0 and (close < (StartPrice - (InitStopLoss / (100 * Multiplier))))) 
    StopLoss := min(StopLoss, close + (TrailingStopLoss / (100 * Multiplier)))
    strategy.exit("Short Stoploss", "Short") 
    
///////////////////////////////////////////////////////// Setup entries /////////////////////////////////////////////////////////

if (longCondition)
    StartPrice := close
    StopLoss := StartPrice - (InitStopLoss / (100 * Multiplier)) 
    strategy.entry("Long", strategy.long, qty=OrderQty)
    strategy.exit("Long Stoploss", "Long")

if (shortCondition)
    StartPrice := close
    StopLoss := StartPrice + (InitStopLoss / (100 * Multiplier)) 
    strategy.entry("Short", strategy.short, qty=OrderQty)
    strategy.exit("Short Stoploss", "Short")
    
///////////////////////////////////////////////////////// Draw the EMAs /////////////////////////////////////////////////////////
plot(EMA1, "EMA1", color=#00FF00)
plot(EMA2, "EMA2", color=#FF0000)
plot(EMA3, "EMA3", color=#4040FF)


Mehr