Croisement de moyenne mobile exponentielle et stratégie d'intention instantanée de rupture de la voie supérieure


Date de création: 2023-11-13 11:52:22 Dernière modification: 2023-11-13 11:52:22
Copier: 1 Nombre de clics: 667
1
Suivre
1617
Abonnés

Croisement de moyenne mobile exponentielle et stratégie d’intention instantanée de rupture de la voie supérieure

Aperçu

La stratégie utilise les signaux croisés des lignes rapides et lentes de l’indicateur MACD, combinés à plusieurs autres indicateurs pour un jugement global, capturer les signaux de rupture de l’indice des moyennes mobiles instantanément et prendre une décision d’achat ou de vente.

Principe de stratégie

  1. Utilisez le croisement de la ligne rapide et de la ligne lente du MACD comme signal de trading principal.

  2. Le RSI est utilisé pour déterminer si le cours est en hausse ou en baisse lorsque le RSI est en dessous de la ligne médiane et en baisse lorsque le RSI est au-dessus.

  3. Le prix de clôture actuel est calculé en comparaison avec la moyenne SMA d’une période donnée. Le prix de clôture est à la hausse lorsque le prix de clôture est inférieur à la SMA et à la baisse lorsque le prix de clôture est supérieur à la SMA.

  4. Calculer la résistance à la baisse de 0,5 Fibonacci de la valeur la plus élevée sur une période donnée. Calculer la résistance à la baisse de 0,5 Fibonacci de la valeur la plus faible sur une période donnée.

  5. L’entrée en position baisse s’effectue lorsque la courbe est franchie et que le prix est en dessous du support. L’entrée en position baisse s’effectue lorsque la courbe est franchie et que le prix est en dessous du support.

  6. La méthode de stop-loss mobile progressive. Le stop-loss est fixé au début de l’entrée comme un certain pourcentage du prix d’ouverture de la position, puis modifié en un petit stop-loss progressif lorsque les pertes atteignent un certain pourcentage.

Avantages stratégiques

  1. La stratégie tire parti des signaux croisés du MACD, un signal de trading classique et efficace pour les indicateurs techniques.

  2. Le RSI, le SMA et d’autres indicateurs peuvent être utilisés pour filtrer les signaux faux et améliorer leur fiabilité.

  3. Le calcul de la résistance au support dynamique permet de réaliser des transactions de rupture afin de capturer des tendances plus importantes.

  4. Le stop-loss progressif permet de bloquer la majeure partie des bénéfices et de contrôler les risques.

  5. La logique des stratégies de trading est claire, simple, facile à comprendre et adaptée aux débutants.

Risque stratégique

  1. Le MACD est en retard et risque de rater le meilleur moment pour acheter ou vendre.

  2. Les jugements sur des combinaisons d’indicateurs multiples augmentent la complexité de la stratégie et sont sujets à des conflits d’indicateurs.

  3. Les calculs dynamiques permettent de penser qu’il existe un risque de rupture erronée de la résistance.

  4. Les pertes mobiles peuvent s’arrêter prématurément dans des conditions de marché élevées et ne peuvent pas générer de bénéfices durables.

  5. Les paramètres de la stratégie doivent être testés et optimisés à plusieurs reprises, les paramètres inappropriés peuvent affecter l’efficacité de la stratégie.

Orientation de l’optimisation de la stratégie

  1. Il est possible de tester différentes combinaisons de paramètres et d’optimiser les paramètres du cycle MACD.

  2. Il est possible d’ajouter d’autres indicateurs, tels que les lignes de Brin, les KDJ, etc. pour une analyse multidimensionnelle.

  3. Il est possible de combiner plusieurs facteurs pour juger de la rationalité d’un point de résistance de soutien.

  4. Des mécanismes d’arrêt de mouvement plus avancés peuvent être étudiés, tels que l’arrêt du temps, l’arrêt des vibrations, etc.

  5. Un module d’optimisation automatique des paramètres peut être ajouté pour optimiser automatiquement les paramètres.

Résumer

La stratégie utilise plusieurs indicateurs tels que le MACD, le RSI et le SMA pour capturer les signaux de rupture des moyennes mobiles indicielles à tout moment. Elle appartient à la stratégie de rupture de courte ligne typique. La stratégie génère des signaux avec un certain retard, mais peut améliorer l’exactitude grâce à l’optimisation des paramètres.

Code source de la stratégie
/*backtest
start: 2023-11-05 00:00:00
end: 2023-11-09 23: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/
// © onurenginogutcu

//@version=4
strategy("R19 STRATEGY", overlay=true, calc_on_every_tick=true , margin_long=100, margin_short=100 ,  process_orders_on_close=true )



sym = input(title="Symbol", type=input.symbol, defval="BINANCE:BTCUSDT" , group = "SYMBOL") 
timeFrame = input(title="Strategy Decision Time Frame", type = input.resolution ,  defval="60")

adxlen = input(14, title="ADX Smoothing" , group = "ADX")
dilen = input(14, title="ADX DI Length", group = "ADX")
adxemalenght = input(30, title="ADX EMA", group = "ADX")
adxconstant = input(19, title="ADX CONSTANT", group = "ADX")

fibvar = input (title = "Fibo Look Back Canles" , defval = 50 , minval = 0 , group = "FIBO MACD SMA")
smaLookback = input (title = "SMA Look Back Candles" , defval = 30 , minval = 0 , group = "FIBO MACD SMA")
MACDFast = input (title = "MACD Fast Lenght" , defval = 15 , minval = 0 , group = "FIBO MACD SMA")
MACDSlow = input (title = "MACD Slow Lenght" , defval = 30 , minval = 0 , group = "FIBO MACD SMA")
MACDSmooth = input (title = "MACD Signal Smoothing" , defval = 9 , minval = 0 , group = "FIBO MACD SMA")
MACDLookback = input (title = "MACD Look Back Candles" , defval = 100 , minval = 0 , group = "FIBO MACD SMA")

trailingStopLong = input (title = "Trailing Long Stop %" , defval = 2.0 , step = 0.1, group = "TP & SL") * 0.01
trailingStopShort = input (title = "Trailing Short Stop %" , defval = 2.0 , step = 0.1 , group = "TP & SL") * 0.01
LongTrailingProfitStart = input (title = "Long Profit Start %" , defval = 2.0 , step = 0.1 , group = "TP & SL") * 0.01
ShortTrailingProfitStart = input (title = "Short Profit Start %" , defval = 2.0 , step = 0.1, group = "TP & SL") * 0.01

lsl = input(title="Max Long Stop Loss (%)",
     minval=0.0, step=0.1, defval=3.0, group = "TP & SL") * 0.01
     
ssl = input(title="Max Short Stop Loss (%)",
     minval=0.0, step=0.1, defval=2.5, group = "TP & SL") * 0.01
     
longtp = input(title="Long Take Profit (%)",
     minval=0.0, step=0.1, defval=100, group = "TP & SL") * 0.01
     
shorttp = input(title="Short Take Profit (%)",
     minval=0.0, step=0.1, defval=100, group = "TP & SL") * 0.01
     
capperc = input(title="Capital Percentage to Invest (%)",
     minval=0.0, maxval=100, step=0.1, defval=95, group = "CAPITAL TO INVEST") * 0.01
     

symClose = security(sym, timeFrame, close)
symHigh = security(sym, timeFrame, high)
symLow = security(sym, timeFrame, low)

atr = atr (14) 

/////////adx code

dirmov(len) =>
	up = change(symHigh)
	down = -change(symLow)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
	minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, len) / truerange)
	[plus, minus]
adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)
emasig = ema (sig , adxemalenght )


////////adx code over



i = ema (symClose , MACDFast) - ema (symClose , MACDSlow) 
r = ema (i , MACDSmooth)

sapust = highest (i , MACDLookback) * 0.729 
sapalt = lowest (i , MACDLookback) * 0.729  


simRSI = rsi (symClose , 50 ) 




fibtop = lowest (symLow , fibvar) + ((highest (symHigh , fibvar) - lowest (symLow , fibvar)) * 0.50)
fibbottom = lowest (symLow , fibvar) + ((highest (symHigh , fibvar) - lowest (symLow , fibvar)) * 0.50)





cond1 = 0
cond2 = 0
cond3 = 0
cond4 = 0


longCondition = crossover(i, r) and i < sapalt and sig > adxconstant and symClose < sma (symClose , smaLookback) and simRSI < sma (simRSI , 50) and symClose < fibbottom 
shortCondition = crossunder(i, r) and i > sapust and sig > adxconstant and  symClose > sma (symClose , smaLookback) and simRSI > sma (simRSI , 50) and symClose > fibtop 


//////////////////////probability long/short
if (crossover(i, r) and i < sapalt)
    cond1 := 35
else if (crossunder(i, r) and i > sapust)
    cond1 := -35
else
    cond1 := 0
    
if (symClose < sma (symClose , smaLookback))
    cond2 := 30
else if (symClose > sma (symClose , smaLookback))
    cond2 := -30
else
    cond2 := 0
    
if (simRSI < sma (simRSI , 50))
    cond3 := 25
else if (simRSI > sma (simRSI , 50))
    cond3 := -25
else
    cond3 := 0
    
if (symClose < fibbottom)
    cond4 := 10
else if (symClose > fibbottom)
    cond4 := -10
else
    cond4 := 0
    
probab = cond1 + cond2 + cond3 + cond4
////////////////////////////////////////////////////////////////

///////////////////////////////////////////STRATEGY ENTRIES AND STOP LOSSES /////
var startTrail = 0
var trailingLongPrice = 0.0
var trailingShortPrice = 0.0

if (longCondition and strategy.position_size == 0)
    strategy.entry("Long", strategy.long , qty = capperc * strategy.equity / close )

if (shortCondition and strategy.position_size == 0)
    strategy.entry("Short" , strategy.short , qty = capperc * strategy.equity / close )
    
    
if (strategy.position_size == 0)    
    trailingShortPrice := 0.0
    trailingLongPrice := 0.0  
    startTrail := 0
/////////////////////////////////strategy exit

if (strategy.position_size > 0 and close >= strategy.position_avg_price * (1 + LongTrailingProfitStart))
    startTrail := 1

if (strategy.position_size < 0 and close <= strategy.position_avg_price * (1 - ShortTrailingProfitStart))
    startTrail := -1
    



trailingLongPrice := if strategy.position_size > 0 and startTrail == 1
    stopMeasure = close * (1 - trailingStopLong)
    max (stopMeasure , trailingLongPrice [1])
else if strategy.position_size > 0 and startTrail == 0
    strategy.position_avg_price * (1 - lsl)


trailingShortPrice := if strategy.position_size < 0 and startTrail == -1
    stopMeasure = close * (1 + trailingStopShort)
    min (stopMeasure , trailingShortPrice [1])
else if strategy.position_size < 0 and startTrail == 0
    strategy.position_avg_price * (1 + ssl)




if (strategy.position_size > 0)
    strategy.exit("Exit Long", "Long", stop = trailingLongPrice , limit=strategy.position_avg_price*(1 + longtp))
 

if (strategy.position_size < 0)
    strategy.exit("Exit Short", "Short", stop = trailingShortPrice , limit=strategy.position_avg_price*(1 - shorttp))


////////////////////////vertical colouring signals
bgcolor(color=longCondition ? color.new (color.green , 70) : na)
bgcolor(color=shortCondition ? color.new (color.red , 70) : na)

plot (trailingLongPrice , color = color.green) ///long price trailing stop
plot (trailingShortPrice , color = color.red) /// short price trailing stop
plot (startTrail , color = color.yellow)
plot (probab , color = color.white) ////probability