Système de trading Double EMA jaune et vert


Date de création: 2023-10-26 17:15:46 Dernière modification: 2023-10-26 17:15:46
Copier: 0 Nombre de clics: 680
1
Suivre
1617
Abonnés

Système de trading Double EMA jaune et vert

Aperçu

Le système de trading à double EMA est un système de suivi des tendances basé sur des moyennes mobiles à deux indices. Il utilise deux moyennes EMA de différentes périodes pour juger de la direction de la tendance actuelle et prendre des décisions de négociation en fonction de la relation entre le prix et la moyenne EMA.

Principe de stratégie

La stratégie repose principalement sur deux EMA moyennes, une EMA moyenne à période plus rapide et une EMA moyenne à période plus lente. Quand une EMA rapide est au-dessus d’une EMA lente, elle est considérée comme haussière; quand une EMA rapide est en dessous d’une EMA lente, elle est considérée comme baissière.

La ligne K peut être divisée en différentes zones de négociation en fonction de la relation entre le prix et les deux lignes équivalentes de l’EMA:

  • Lorsque l’EMA rapide est au-dessus de l’EMA lente et que le prix est au-dessus de l’EMA rapide (G1), il est possible d’acheter une zone d’achat forte.

  • Lorsque l’EMA est en dessous de l’EMA lente et que le prix est en dessous de l’EMA rapide (R1), il est possible de vendre la zone pour la force.

  • Lors d’une croisement rapide ou lente d’une EMA, les prix peuvent être divisés en zones jaunes (avertissement) et orange (attente) en fonction de leur relation avec les deux EMA. Ces deux zones représentent la possibilité d’un renversement de tendance et doivent être combinées avec d’autres zones et d’autres indicateurs pour décider de la transaction.

La stratégie émet des signaux d’achat et de vente en fonction de la variation des prix dans les différentes zones de négociation. Dans les zones de force G1 et R1, la stratégie génère directement un signal. Dans les zones d’alerte et de veille, d’autres indicateurs doivent être confirmés.

En outre, la stratégie a introduit le StochRSI pour aider à déterminer le moment d’acheter ou de vendre. Le StochRSI peut être utilisé comme un signal supplémentaire de vente ou d’achat.

Avantages stratégiques

  • La logique de la stratégie est simple et claire, facile à comprendre et à mettre en œuvre.

  • Le fonctionnement basé sur les tendances permet de capturer efficacement les tendances à moyen et long terme.

  • la distinction entre les zones de force et les zones d’alerte/d’observation contre la tendance, où les signaux de négociation sont plus fiables;

  • Le StochRSI, combiné à l’indicateur de volatilité, permet de déterminer avec plus de précision le moment de l’achat ou de la vente.

Risque stratégique

  • Les systèmes purement tendanciels peuvent être moins efficaces dans les marchés où il n’y a pas de tendance claire.

  • Une mauvaise configuration des cycles EMA peut entraîner de faux signaux;

  • Les zones d’alerte précoce et de veille présentent un risque élevé de transaction et doivent être traitées avec prudence.

  • Le risque d’accroissement des pertes n’a pas été pris en compte.

Les méthodes suivantes peuvent être utilisées pour réduire le risque:

  1. Choisir des variétés qui ont une tendance évidente et suspendre la négociation si la tendance est faible;

  2. Optimisation des paramètres du cycle EMA pour réduire la probabilité de faux signaux;

  3. la confirmation de l’introduction d’autres indicateurs dans les zones d’alerte précoce et d’observation afin de réduire le risque de transaction;

  4. Il est important de mettre en place des points de rupture pour contrôler les pertes individuelles.

Orientation de l’optimisation de la stratégie

Cette stratégie peut être optimisée dans les domaines suivants:

  1. L’introduction de plus d’indicateurs de confirmation, tels que MACD, KDJ, etc., pour améliorer la qualité du signal;

  2. L’introduction de conditions de filtrage dans les zones de négociation, telles que l’augmentation du volume des transactions, améliore le taux de réussite des transactions;

  3. Adapter les paramètres EMA en fonction de la dynamique du marché et définir les paramètres d’optimisation;

  4. l’augmentation des stratégies de stop loss, qui s’arrêtent lorsque les pertes atteignent un certain pourcentage;

  5. Optimisation de la gestion des fonds et mise en place d’une gestion rationnelle des positions;

  6. Optimisation des tests sur différentes variétés pour trouver la meilleure combinaison de paramètres.

Cette stratégie permet d’obtenir de meilleurs résultats en introduisant plus d’indicateurs de jugement auxiliaires, l’optimisation des paramètres dynamiques, des stratégies d’arrêt des pertes, etc. pour améliorer la stabilité du système et réduire les risques du point de vue de la gestion des fonds.

Résumer

Le système de négociation double EMA est un système de suivi de tendance basé sur la comparaison de la moyenne double EMA. Il sépare les différentes zones de négociation, juge l’orientation de la tendance en fonction de la relation entre le prix et la moyenne EMA et génère un signal de négociation.

Code source de la stratégie
/*backtest
start: 2023-01-01 00:00:00
end: 2023-10-25 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/
// © Vvaz_
//base-on CDC ActionZone By Piriya   a simple 2EMA and is most suitable for use with medium volatility market
//@version=4
strategy(title="Vin's Playzone" ,shorttitle="VPz", overlay=true, margin_long=4, margin_short=2)

//variable
srcf = input(title="Source",type=input.source,defval=close)
tffix = input(title="Fixed Timeframe",type=input.bool,defval=true)
tfn = input(title="Timeframe in",type=input.resolution,defval="D")
ema1 = input(title="Fast EMA",type=input.integer,defval=12)
ema2 = input(title="Slow EMA",type=input.integer,defval=26)
ema3 = input(title="EMA 100",type=input.bool,defval=true)
smooter =input(title="Smoothing period (1 = no smoothing)",type=input.integer,defval=2)
fillbar =input(title="Fill Bar Color",type=input.bool,defval=true)
emasw = input(title="Show EMA",type=input.bool,defval=true)
bssw = input(title="Show Buy-Sell signal",type=input.bool,defval=true)
plotmm = input(title="Show Buy-Sell Momentum",type=input.bool,defval=true)
plotmmsm = input(title="RSI Smoothing",type=input.integer,defval=0,minval=0,maxval=2)

//math
xcross =ema(srcf,smooter)
efast = tffix ?  ema(security(syminfo.tickerid,tfn,ema(srcf,ema1), gaps = barmerge.gaps_off,lookahead = barmerge.lookahead_on),smooter) :ema(xcross,ema1)
eslow = tffix ?  ema(security(syminfo.tickerid,tfn,ema(srcf,ema2), gaps = barmerge.gaps_off,lookahead = barmerge.lookahead_on),smooter) :ema(xcross,ema2)
ema3x = ema(xcross,100)


//Zone
Bull = efast > eslow
Bear = efast < eslow

G1 = Bull and xcross > efast //buy
G2 = Bear and xcross > efast and xcross > eslow //pre-buy1
G3 = Bear and xcross > efast and xcross < eslow //pre-buy2

R1 = Bear and xcross < efast //sell
R2 = Bull and xcross < efast and xcross < eslow //pre-sell1
R3 = Bull and xcross < efast and xcross > eslow //pre-sell2

//color
bcl =   G1 ? color.green :  G2 ? color.yellow : G3 ? color.orange :R1 ? color.red :R2 ? color.orange : R3 ? color.yellow : color.black
barcolor(color=fillbar ? bcl : na )

//plots
line1 = plot(ema3 ? ema3x : na ,"EMA100",color=color.white)
line2 = plot(emasw ? efast : na ,"Fast EMA",color=color.green)
line3 = plot(emasw ? eslow : na ,"Slow EMA",color=color.red)
fillcl = Bull ? color.green : Bear ? color.red : color.black
fill(line2,line3,fillcl)

//actions
buywhen = G1 and G1[1]==0
sellwhen = R1 and R1[1]==0

bullish = barssince(buywhen) < barssince(sellwhen)
bearish = barssince(sellwhen) < barssince(buywhen)

buy = bearish[1] and buywhen
sell = bullish[1] and sellwhen

bullbearcl = bullish ? color.green : bearish ? color.red : color.black

//plot trend
plotshape(bssw ? buy : na ,style=shape.arrowup,title="BUY",location=location.belowbar,color=color.green)
plotshape( bssw ? sell : na ,style=shape.arrowdown ,title="Sell",location=location.abovebar,color=color.red)

// Momentum Signal using StochRSI

smoothK = input(5,"StochRSI smooth K",type=input.integer,minval=1)
smoothD = input(4,"StochRSI smooth D",type=input.integer,minval=1)
RSIlen = input(14,"RSI length",type=input.integer,minval=1)
STOlen = input(14,"Stochastic length",type=input.integer,minval=1)
SRsrc = input(close,"Source for StochasticRSI",type=input.source)
OSlel = input(20,"Oversold Threshold",type=input.float,minval=0.00)
OBlel = input(80,"Oversold Threshold",type=input.float,minval=0.00)
rsil = rsi(SRsrc,RSIlen)
K = sma(stoch(rsil,rsil,rsil,STOlen),smoothK)
D = sma(K,smoothD)

buymore = iff( bullish ,iff(D < OSlel and crossover(K,D),	2,	 iff(D > OSlel and crossover(K,D),	 1,0)),0)
sellmore = iff( bearish,iff(D > OBlel and crossunder(K,D),	2,	 iff(D < OBlel and crossunder(K,D),	 1,0)),0)
//plot momentum
plotshape(plotmm ? buymore > plotmmsm ? buymore : na : na ,"Buy More!" ,style=shape.triangleup,location=location.belowbar,color=color.green)
plotshape(plotmm ? sellmore > plotmmsm ? sellmore : na : na ,"Sell More!" ,style=shape.triangledown,location=location.abovebar,color=color.red)


// === INPUT BACKTEST RANGE ===
FromYear  = input(defval = 2009, title = "From Year", minval = 2009)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2009)
ToMonth   = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 31, title = "To Day", minval = 1, maxval = 31)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"

//stratgy excuter
strategy.entry("Long",true,when=window() and buy or buymore)
strategy.close("Long",when=window() and sell or sellmore,comment="TP Long")
strategy.entry("Short",false,when=window() and sell or sellmore)
strategy.close("Short",when=window() and buy or buymore,comment="TP Short")