Stratégie d'impulsion pour la percée du croisement moyen mobile et du train supérieur

Auteur:ChaoZhang est là., Date: 2023-11-13 11:52:22 Je suis désolé
Les étiquettes:

img

Résumé

Cette stratégie utilise les signaux de croisement de la ligne rapide et de la ligne lente du MACD, combinés à des jugements basés sur plusieurs autres indicateurs, pour capturer les signaux de percée de la ligne de l'indice de moyenne mobile en temps opportun et prendre des décisions d'achat ou de vente.

La logique de la stratégie

  1. Utilisez le croisement de la ligne rapide MACD et de la ligne lente comme signal de trading principal. Lorsque la ligne rapide traverse au-dessus de la ligne lente, prenez une position longue. Lorsque la ligne rapide traverse au-dessous de la ligne lente, prenez une position courte.

  2. Incorporer l'indicateur RSI pour déterminer les conditions de surachat et de survente.

  3. Comparer le prix de clôture actuel à la ligne SMA d'une certaine période.

  4. Calculer le niveau de 0,5 Fibonacci de la valeur la plus élevée d'une certaine période comme la résistance pour long. Calculer le niveau de 0,5 Fibonacci de la valeur la plus basse d'une certaine période comme le support pour court.

  5. Prenez long lorsque la ligne rapide traverse au-dessus et que le prix est en dessous du support. Prenez court lorsque la ligne rapide traverse en dessous et que le prix est au-dessus de la résistance.

  6. Adopter un mécanisme de stop-loss de suivi. Le stop-loss est fixé à un certain pourcentage du prix d'entrée au début. Lorsque la perte atteint un certain niveau, passez à un stop-loss de suivi graduel.

Les avantages

  1. La stratégie utilise pleinement les signaux croisés MACD, qui sont un signal de trading classique et efficace d'indicateur technique.

  2. L'incorporation de confirmations provenant de plusieurs indicateurs tels que RSI et SMA peut filtrer les faux signaux et améliorer la fiabilité.

  3. Le calcul des niveaux de support et de résistance dynamiques pour les échanges de rupture peut capturer des tendances plus larges.

  4. Le stop-loss de suivi peut bloquer la plupart des bénéfices tout en contrôlant le risque.

  5. La logique de la stratégie est claire et simple, facile à comprendre et à maîtriser pour les débutants.

Les risques

  1. L'indicateur MACD présente des problèmes de retard et peut manquer les points d'entrée et de sortie optimaux.

  2. La combinaison de plusieurs indicateurs augmente la complexité et les risques de signaux contradictoires.

  3. Il existe des risques de ruptures incorrectes lors du calcul dynamique du support et de la résistance.

  4. Le stop loss de suivi peut sortir prématurément dans des tendances fortes, ne parvenant pas à suivre les tendances.

  5. Les paramètres nécessitent des tests et une optimisation répétitifs, les paramètres inappropriés ont un impact négatif sur les performances.

Directions d'optimisation

  1. Testez différentes combinaisons de paramètres pour optimiser les périodes MACD.

  2. Introduire plus d'indicateurs comme les bandes de Bollinger, KDJ pour une analyse multidimensionnelle.

  3. Incorporer plus de facteurs pour juger de la raisonnabilité du soutien et de la résistance.

  4. Recherchez des mécanismes de stop loss plus avancés comme les stops basés sur le temps ou la volatilité.

  5. Ajouter un module d'optimisation automatique pour l'optimisation automatique des paramètres.

Résumé

Cette stratégie combine le MACD, le RSI, le SMA et d'autres indicateurs pour capturer les signaux de percée moyenne mobile de manière opportuniste. Elle appartient aux stratégies de trading de rupture à court terme typiques. Il y a un certain retard dans sa génération de signaux, mais la précision peut être améliorée grâce à l'optimisation des paramètres. Dans l'ensemble, il s'agit d'une stratégie avec une logique simple et claire, facile à saisir pour la plupart, et qui mérite d'être testée et optimisée.


/*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


Plus de