Verkehrslichthandelsstrategie auf der Grundlage der EMA

Schriftsteller:ChaoZhang, Datum: 23.11.2023
Tags:

img

Übersicht

Diese Strategie verwendet 4 EMA-Linien aus verschiedenen Perioden, um Handelssignale basierend auf ihrer Anordnung zu generieren, ähnlich wie die rote, gelbe und grüne Ampel.

Strategieprinzip

  1. Setzen Sie 3 EMA-Linien aus schnellen (8 Perioden), mittleren (14 Perioden) und langsamen (16 Perioden) sowie eine EMA-Line mit langer Periode (100 Perioden) als Filter ein.

  2. Lange und kurze Chancen anhand der Reihenfolge der drei EMA-Linien und ihrer Überschneidung mit dem Filter ermitteln:

  • Wenn eine schnelle Linie über eine mittlere Linie oder eine mittlere Linie über eine langsame Linie kreuzt, wird sie als langes Signal bestimmt.

  • Wenn die mittlere Linie unterhalb der schnellen Linie kreuzt, wird sie als langes Signal bestimmt.

  • Wenn die schnelle Linie unterhalb der mittleren Linie oder die mittlere Linie unterhalb der langsamen Linie kreuzt, wird sie als Kurzsignal bestimmt.

  • Wenn die mittlere Linie über der schnellen Linie kreuzt, wird sie als schließendes Kurzsignal bestimmt.

  1. Beurteilen Sie die Trendrichtung und -stärke anhand der Reihenfolge der 3 EMA-Linien, kombiniert mit der Überschneidung zwischen den EMA-Linien und dem Filter, um Umkehrpunkte zu bestimmen, die organisch Trendfolgen und Umkehrhandel umfassen.

Analyse der Vorteile

Diese Strategie integriert die Vorteile des Trendfolgs und des Umkehrhandels, die Marktchancen gut nutzen können.

  1. Die Verwendung mehrerer EMA-Linien macht das Urteil solider und reduziert falsche Signale.
  2. Durch flexible Einstellungen für lange und kurze Konditionen werden keine fehlenden Handelsmöglichkeiten vermieden.
  3. Die Kombination von langfristigen und kurzfristigen EMA-Linien macht umfassende Beurteilungen.
  4. Die Anpassung von Gewinn und Stop-Loss ermöglicht eine bessere Risikokontrolle.

Durch die Optimierung der Parameter kann sich diese Strategie an mehr Produkte anpassen und hat bei Rückversuchen eine starke Rentabilität und Stabilität gezeigt.

Risikoanalyse

Die wichtigsten Risiken dieser Strategie bestehen in:

  1. Wenn die Reihenfolge der mehrfachen EMA-Linien unordentlich wird, erhöht sich die Schwierigkeit des Urteils und verursacht Zögern beim Handel.
  2. Sie kann die falschen Signale nicht wirksam aus abnormalen Marktschwankungen herausfiltern, die zu erheblichen Verlusten bei der Volatilität führen können.
  3. Bei falschen Parameter-Einstellungen können zu entspannte oder zu strenge Stop-Profit-/Loss-Kriterien entstehen, was zu fehlenden Gewinnen oder zu großen Verlusten führt.

Es wird vorgeschlagen, die Stabilität der Strategie weiter zu verbessern und die Risiken durch Optimierung der Parameter, Festlegung des Stop-Loss-Niveaus, vorsichtigem Handel usw. zu kontrollieren.

Optimierungsrichtlinien

Die wichtigsten Optimierungsrichtungen dieser Strategie sind:

  1. Anpassung der Zyklusparameter der EMA-Linien an mehr Produkte.
  2. Hinzufügen von anderen Indikatoren wie MACD, Bollinger Bands usw. zur Erhöhung der Richtigkeit des Urteils.
  3. Optimieren Sie den Profit-Take/Stop-Loss-Verhältnis, um das beste Gleichgewicht zwischen Risiko und Rendite zu erreichen.
  4. Zusätzlich werden adaptive Stop-Loss-Mechanismen wie ATR Stop Loss hinzugefügt, um das Abwärtsrisiko weiter zu kontrollieren.

Eine kontinuierliche Steigerung der Stabilität und Rentabilität der Strategie kann durch die Einführung von Anpassungen der Parameter und Risikokontrollmaßnahmen in mehreren Aspekten erreicht werden.

Schlussfolgerung

Diese Traffic Light Trading Strategie beinhaltet Trend-Folgen und Umkehrhandel, indem sie 4 Sätze von EMA-Linien verwendet, um Handelssignale zu bilden. Sie hat durch Parameteroptimierung eine starke Rentabilität gezeigt, um sich an mehr Produkte anzupassen.


/*backtest
start: 2023-01-01 00:00:00
end: 2023-11-23 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/
// © maxits

// 4HS Crypto Market Strategy
// This strategy uses 4 ema to get Long or Short Signals
// Length are: 8, 14, 16, 100
// We take long positions when the order of the emas is the following:
// green > yellow > red (As the color of Traffic Lights) and they are above white ema (Used as a filter for long positions)
  
// We take short positions when the order of the emas is the following:
// green < yellow < red (As the color of inverse Traffic Lights) and they are below white ema (Used as a filter for short positions)

//@version=4
strategy(title="Trafic Lights Strategy",
         shorttitle="TLS",
         overlay=true,
         initial_capital=1000,
         default_qty_value=20,
         default_qty_type=strategy.percent_of_equity,
         commission_value=0.1,
         pyramiding=0
         )

// User Inputs
// i_time         = input(defval = timestamp("28 May 2017 13:30 +0000"), title = "Start Time", type = input.time) //Starting time for Backtesting

sep1           = input(title="============ System Conditions ============", type=input.bool, defval=false)

enable_Long    = input(true, title="Enable Long Positions")   // Enable long  Positions
enable_Short   = input(true, title="Enable Short Positions") // Enable short Positions

sep2           = input(title="============ Indicator Parameters ============", type=input.bool, defval=false)

f_length       = input(title="Fast EMA Length",   type=input.integer, defval=8,   minval=1) 
m_length       = input(title="Medium EMA Length", type=input.integer, defval=14,   minval=1) 
s_length       = input(title="Slow EMA Length",   type=input.integer, defval=16,  minval=1) 
filter_L       = input(title="EMA Filter",        type=input.integer, defval=100, minval=1) 
filterRes      = input(title="Filter Resolution", type=input.resolution, defval="D")        // ema Filter Time Frame

sep3           = input(title="============LONG Profit-Loss Parameters============", type=input.bool, defval=false)

e_Long_TP      = input(true, title="Enable a Profit Level?")
e_Long_SL      = input(false, title="Enable a S.Loss Level?")
e_Long_TS      = input(true, title="Enable a Trailing Stop?")           
long_TP_Input  = input(40.0,   title='Take Profit %',   type=input.float,   minval=0)/100
long_SL_Input  = input(1.0,   title='Stop Loss %',     type=input.float,   minval=0)/100 
atrLongMultip  = input(2.0,   title='ATR Multiplier',  type=input.float,   minval=0.1)   // Parameters to calculate Trailing Stop Loss
atrLongLength  = input(14,    title='ATR Length',      type=input.integer, minval=1)

sep4           = input(title="============SHORT Profit-Loss Parameters============", type=input.bool, defval=false)

e_Short_TP     = input(true, title="Enable a Profit Level?")
e_Short_SL     = input(false, title="Enable a S.Loss Level?")
e_Short_TS     = input(true, title="Enable a Trailing Stop?")
short_TP_Input = input(30.0,   title='Take Profit %',   type=input.float,   minval=0)/100
short_SL_Input = input(1.0,   title='Stop Loss %',     type=input.float,   minval=0)/100
atrShortMultip = input(2.0,   title='ATR Multiplier',  type=input.float,   minval=0.1)
atrShortLength = input(14,    title='ATR Length',      type=input.integer, minval=1)

// Indicators

fema   = ema(close, f_length)
mema   = ema(close, m_length)
sema   = ema(close, s_length)
filter = security(syminfo.tickerid, filterRes, ema(close, filter_L))

plot(fema,   title="Fast EMA",   color=color.new(color.green,  0))
plot(mema,   title="Medi EMA",   color=color.new(color.yellow, 0))
plot(sema,   title="Slow EMA",   color=color.new(color.red,    0))
plot(filter, title="EMA Filter", color=color.new(color.white,  0))

// Entry Conditions

longTrade  = strategy.position_size >  0
shortTrade = strategy.position_size <  0
notInTrade = strategy.position_size == 0
inTrade    = strategy.position_size != 0
priceEntry = strategy.position_avg_price

goLong  = fema > mema and mema > sema and fema > filter and  enable_Long  and (crossover (fema, mema) or crossover (mema, sema) or crossover (sema, filter))
goShort = fema < mema and mema < sema and fema < filter and  enable_Short and (crossunder (fema, mema) or crossunder (mema, sema) or crossunder (sema, filter))

close_L = crossunder(fema, mema)
close_S = crossover (fema, mema)

// Profit and Loss conditions

// Long
 
long_TP = priceEntry * (1 + long_TP_Input)  // Long Position Take Profit Calculation
long_SL = priceEntry * (1 - long_SL_Input)  // Long Position Stop Loss Calculation
atrLong = atr(atrLongLength)                // Long Position ATR Calculation
long_TS = low - atrLong * atrLongMultip

long_T_stop  = 0.0                          // Code for calculating Long Positions Trailing Stop Loss/
long_T_stop := if (longTrade)
    longStop = long_TS
    max(long_T_stop[1], longStop)
else 
    0
    
//Short

short_TP = priceEntry * (1 - short_TP_Input) // Long  Position Take Profit Calculation
short_SL = priceEntry * (1 + short_SL_Input) // Short Position Stop Loss Calculation
atrShort = atr(atrShortLength)               // Short Position ATR Calculation
short_TS = high + atrShort * atrShortMultip

short_T_stop   = 0.0                // Code for calculating Short Positions Trailing Stop Loss/
short_T_stop  := if shortTrade
    shortStop  = short_TS
    min(short_T_stop[1], shortStop)
else 
    9999999

// Strategy Long Entry

if goLong and notInTrade 
    strategy.entry("Go Long", long=strategy.long, comment="Go Long", alert_message="Open Long Position")

if longTrade and close_L
    strategy.close("Go Long", when=close_L, comment="Close Long", alert_message="Close Long Position")
    
if e_Long_TP    // Algorithm for Enabled Long Position Profit Loss Parameters
    if (e_Long_TS and not e_Long_SL)
        strategy.exit("Long TP & TS", "Go Long", limit = long_TP, stop = long_T_stop)
    else
        if (e_Long_SL and not e_Long_TS)
            strategy.exit("Long TP & TS", "Go Long",limit = long_TP, stop = long_SL)
        else 
            strategy.exit("Long TP & TS", "Go Long",limit = long_TP)
else
    if not e_Long_TP 
        if (e_Long_TS and not e_Long_SL)
            strategy.exit("Long TP & TS", "Go Long", stop = long_T_stop)
        else
            if (e_Long_SL and not e_Long_TS)
                strategy.exit("Long TP & TS", "Go Long",stop = long_SL)
    

// Strategy Short Entry

if goShort and notInTrade 
    strategy.entry("Go Short", long=strategy.short, comment="Go Short", alert_message="Open Short Position")

if shortTrade and close_S
    strategy.close("Go Short", comment="Close Short", alert_message="Close Short Position")

if e_Short_TP   // Algorithm for Enabled Short Position Profit Loss Parameters
    if (e_Short_TS and not e_Short_SL)
        strategy.exit("Short TP & TS", "Go Short", limit = short_TP, stop = short_T_stop)
    else
        if (e_Short_SL and not e_Short_TS)
            strategy.exit("Short TP & SL", "Go Short",limit = short_TP, stop = short_SL)
        else 
            strategy.exit("Short TP & TS", "Go Short",limit = short_TP)
else
    if not e_Short_TP 
        if (e_Short_TS and not e_Short_SL)
            strategy.exit("Short TS", "Go Short", stop = short_T_stop)
        else
            if (e_Short_SL and not e_Short_TS)
                strategy.exit("Short SL", "Go Short",stop = short_SL)

// Long  Position Profit and Loss Plotting

plot(longTrade and e_Long_TP  and long_TP                          ? long_TP      : na, title="TP Level", color=color.green, style=plot.style_linebr, linewidth=2)
plot(longTrade and e_Long_SL  and long_SL and not e_Long_TS        ? long_SL      : na, title="SL Level", color=color.red,   style=plot.style_linebr, linewidth=2)
plot(longTrade and e_Long_TS  and long_T_stop and not e_Long_SL    ? long_T_stop  : na, title="TS Level", color=color.red,   style=plot.style_linebr, linewidth=2)

// Short Position Profit and Loss Plotting

plot(shortTrade and e_Short_TP and short_TP                        ? short_TP     : na, title="TP Level", color=color.green, style=plot.style_linebr, linewidth=2)
plot(shortTrade and e_Short_SL and short_SL and not e_Short_TS     ? short_SL     : na, title="SL Level", color=color.red,   style=plot.style_linebr, linewidth=2)
plot(shortTrade and e_Short_TS and short_T_stop and not e_Short_SL ? short_T_stop : na, title="TS Level", color=color.red,   style=plot.style_linebr, linewidth=2)



Mehr