Stratégie de trading basée sur l'EMA


Date de création: 2023-11-24 15:46:48 Dernière modification: 2023-11-24 15:46:48
Copier: 0 Nombre de clics: 1288
1
Suivre
1617
Abonnés

Stratégie de trading basée sur l’EMA

Aperçu

La stratégie utilise les moyennes des EMA de 4 périodes différentes pour former des signaux de négociation en fonction de leur ordre d’alignement, des trois voyants rouges, jaunes et verts qui ressemblent à des feux de circulation, d’où le nom de stratégie de négociation de feux de circulation de l’orange. Elle juge le marché de manière intégrée à partir de tendances et de retournements, dans le but d’améliorer la précision des décisions de négociation.

Principe de stratégie

  1. Le filtre est constitué d’une ligne moyenne EMA de 3 lignes (course rapide: 8 cycles, moyenne: 14 cycles, lente: 16 cycles) et d’une ligne moyenne EMA de 1 ligne (course longue: 100 cycles).

  2. Déterminez l’ordre d’alignement des lignes moyennes rapides et lentes 3 et leurs intersections avec le filtre, et déterminez le moment de faire plus et de faire moins:

  • Lorsque vous traversez un fil rapide sur un fil moyen ou un fil lent sur un fil moyen, jugez que vous faites plus de signaux

  • Le signal est considéré comme normal lorsque la ligne médiane est traversée par la ligne rapide.

  • Lorsque la ligne rapide traverse la ligne moyenne ou la ligne moyenne traverse la ligne lente, elle est considérée comme un signal de vide

  • La ligne médiane est considérée comme un signal de vide.

  1. Déterminez la direction et la force de la tendance par une séquence de lignes moyennes rapides et lentes, en combinant les lignes moyennes et les points de retournement de jugement croisés du filtre, pour réaliser une combinaison organique de suivi de tendance et de capture de retournement.

Analyse des avantages

Cette stratégie combine les avantages du suivi des tendances et de l’inversion des transactions pour mieux saisir les opportunités du marché. Les principaux avantages sont les suivants:

  1. Utilisation d’un ensemble de lignes moyennes d’EMA pour un meilleur jugement et une réduction des faux signaux
  2. La flexibilité est nécessaire pour éviter de manquer une opportunité de trading
  3. Ligne moyenne à longue et courte périodes, jugement complet
  4. Conditions d’arrêt personnalisables, contrôle du risque en place

Grâce à l’optimisation des paramètres, la stratégie peut s’adapter à plus de variétés et a montré une plus grande rentabilité et stabilité dans les tests de retour.

Analyse des risques

Les principaux risques de cette stratégie sont les suivants:

  1. La confusion dans l’ordre de l’alignement de plusieurs groupes d’EMA peut augmenter la difficulté de jugement et entraîner des retards de transaction.
  2. Faux signaux de fluctuations anormales du marché qui ne peuvent pas être filtrés efficacement et qui peuvent entraîner des pertes en cas de choc majeur
  3. Les paramètres ne sont pas réglés à temps et les conditions de stop-loss peuvent être trop laxistes ou trop strictes, ce qui entraîne des pertes ou des pertes excessives

Il est recommandé d’améliorer encore la stabilité de la stratégie et de contrôler les risques en optimisant les paramètres, en définissant des niveaux de stop-loss et en opérant prudemment.

Direction d’optimisation

Les principaux axes d’optimisation de la stratégie sont:

  1. Adaptation des paramètres périodiques de la moyenne EMA pour plus de variétés
  2. Ajout de filtres sur d’autres indicateurs, tels que MACD, Brinband et autres, pour une meilleure précision de jugement
  3. Optimiser le ratio de stop-loss pour obtenir le meilleur équilibre entre le risque et les gains
  4. Ajout de mécanismes d’arrêt adaptatifs, tels que l’arrêt ATR, pour une plus grande maîtrise du risque de baisse

La stabilité et la rentabilité de la stratégie peuvent être améliorées de manière continue par l’ajustement de paramètres multilatéraux et l’introduction de moyens de contrôle des risques.

Résumer

Cette stratégie de trading de feux de circulation intègre le suivi des tendances et le jugement de renversement, utilise 4 groupes d’EMA pour former un signal de trading uniforme, s’adapte à plus de variétés grâce à l’optimisation des paramètres, affiche une forte rentabilité dans la rétro-évaluation. Suivi par un contrôle supplémentaire du risque et l’introduction d’indicateurs de diversification, il est susceptible de devenir une stratégie de trading quantifiée stable et efficace.

Code source de la stratégie
/*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)