Stratégie de trading bidirectionnelle basée sur l'indicateur MACD


Date de création: 2023-12-07 17:11:52 Dernière modification: 2023-12-07 17:11:52
Copier: 0 Nombre de clics: 829
1
Suivre
1619
Abonnés

Stratégie de trading bidirectionnelle basée sur l’indicateur MACD

Aperçu

La stratégie implique une stratégie de négociation bidirectionnelle basée sur l’indicateur MACD. Elle permet de faire des gains et des pertes sur l’indicateur MACD pendant les forks dorés et morts, et de filtrer certains signaux en combinaison avec d’autres jugements d’indicateurs.

Principe de stratégie

Cette stratégie utilise principalement l’indicateur MACD pour réaliser des transactions bidirectionnelles. Plus précisément, elle calcule les moyennes mobiles rapides, les moyennes mobiles lentes et les lignes de signaux MACD. Elle génère un signal de fourche dorée lorsque la moyenne mobile lente est traversée au-dessus de la moyenne mobile rapide.

Afin de filtrer certains signaux inefficaces, la stratégie utilise également une plage de ±30 comme filtre, qui ne déclenche le signal de transaction que lorsque la colonne MACD est au-delà de cette plage. De plus, la direction de la colonne MACD est déterminée lors de l’équilibre, et l’équilibre n’est atteint que lorsque les deux colonnes successives changent de direction.

Avantages stratégiques

  • Utilisation de l’indicateur MACD comme principal signal de négociation, qui est plus sensible à l’évolution des marchés boursiers bilatéraux
  • Ajout de filtres pour filtrer certains signaux inefficaces
  • La logique de placement en équilibre de deux colonnes successives permet d’éviter une certaine fausse rupture.

Risque stratégique

  • Les indicateurs MACD sont sujets à des signaux de trading fréquents, ce qui peut entraîner une fréquence de trading excessive.
  • La stratégie de l’indicateur unique, un léger retard dans le signal peut entraîner des pertes
  • La logique de placement de la colonne n’est pas assez rigoureuse et il peut y avoir un risque de perte de signal.

Orientation de l’optimisation de la stratégie

  • On peut envisager de confirmer le signal en le combinant avec d’autres indicateurs, tels que l’indicateur KDJ, l’indicateur Brin et autres.
  • D’autres indicateurs plus avancés peuvent être étudiés pour remplacer les MACD, tels que les KD
  • La logique de placement peut être optimisée, avec des paramètres de stop loss et de stop-loss pour contrôler les pertes individuelles

Résumer

Cette stratégie est une stratégie de trading bidirectionnelle fondamentalement utilisable. Elle utilise les avantages de l’indicateur MACD, tout en ajoutant un certain nombre de filtres pour contrôler la qualité du signal.

]

Code source de la stratégie
/*backtest
start: 2022-11-30 00:00:00
end: 2023-12-06 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3

//Created by user ChrisMoody updated 4-10-2014
//Regular MACD Indicator with Histogram that plots 4 Colors Based on Direction Above and Below the Zero Line
//Update allows Check Box Options, Show MacD & Signal Line, Show Change In color of MacD Line based on cross of Signal Line.
//Show Dots at Cross of MacD and Signal Line, Histogram can show 4 colors or 1, Turn on and off Histogram.
//Special Thanks to that incredible person in Tech Support whoem I won't say you r name so you don't get bombarded with emails
//Note the feature Tech Support showed me on how to set the default timeframe of the indicator to the chart Timeframe, but also allow you to choose a different timeframe.
//By the way I fully disclose that I completely STOLE the Dots at the MAcd Cross from "TheLark"

strategy("MACD Strategy", overlay=false)
// study(title="CM_MacD_Ult_MTF", shorttitle="CM_Ult_MacD_MTF")
source = close
useCurrentRes = input(true, title="Use Current Chart Resolution?")
resCustom = input(title="Use Different Timeframe? Uncheck Box Above", defval="60")
smd = input(true, title="Show MacD & Signal Line? Also Turn Off Dots Below")
sd = input(true, title="Show Dots When MacD Crosses Signal Line?")
sh = input(true, title="Show Histogram?")
macd_colorChange = input(true,title="Change MacD Line Color-Signal Line Cross?")
hist_colorChange = input(true,title="MacD Histogram 4 Colors?")

res = useCurrentRes ? timeframe.period : resCustom

fastLength = input(12, minval=1), slowLength=input(26,minval=1)
signalLength=input(9,minval=1)

fastMA = ema(source, fastLength)
slowMA = ema(source, slowLength)

macd = fastMA - slowMA
signal = sma(macd, signalLength)
hist = macd - signal

outMacD = request.security(syminfo.tickerid, res, macd)
outSignal = request.security(syminfo.tickerid, res, signal)
outHist = request.security(syminfo.tickerid, res, hist)

histA_IsUp = outHist > outHist[1] and outHist > 0
histA_IsDown = outHist < outHist[1] and outHist > 0
histB_IsDown = outHist < outHist[1] and outHist <= 0
histB_IsUp = outHist > outHist[1] and outHist <= 0

//MacD Color Definitions
macd_IsAbove = outMacD >= outSignal
macd_IsBelow = outMacD < outSignal



// strategy.entry("Long", strategy.long, 1, when = shouldPlaceLong) 
       
// strategy.close("Long", shouldExitLong)
    

// strategy.entry("Short", strategy.short, 1, when = shouldPlaceShort) 
       
// strategy.close("Short", shouldExitShort)
    
    
isWithinZeroMacd = outHist < 30 and outHist > -30 

delta = hist
// shouldExitShort = false//crossover(delta, 0)    
// shouldExitLong = false//crossunder(delta, 0)

// if(crossover(delta, 0))// and not isWithinZeroMacd)
//     strategy.entry("Long", strategy.long, comment="Long")

// if (crossunder(delta, 0))// and not isWithinZeroMacd)
//     strategy.entry("Short", strategy.short, comment="Short")
    
shouldPlaceLong = crossover(delta, 0)
    
strategy.entry("Long", strategy.long, 1, when = shouldPlaceLong) 

shouldExitLong = not histA_IsUp and histA_IsDown

shouldExitShort = not histA_IsUp and not histA_IsDown and not histB_IsDown and histB_IsUp

shouldPlaceShort = crossunder(delta, 0)
strategy.entry("Short", strategy.short, 1, when = shouldPlaceShort) 
       
// plot_color = gray
plot_color = if(hist_colorChange)
	if(histA_IsUp)
	    aqua
	else
		if(histA_IsDown)
			//need to sell
// 			if(not isWithinZeroMacd)
// 			shouldExitLong = true
			    //   strategy.entry("Short", strategy.short, comment="Short")
			
			blue
		else
			if(histB_IsDown)
				red 
			else
				if(histB_IsUp)
					//need to buy
				// 	if(not isWithinZeroMacd)
				// 	shouldExitShort = true
					   // strategy.entry("Long", strategy.long, comment="Long")
					    
					    
					maroon
				else
					yellow
else
	gray


// plot_color = hist_colorChange ? histA_IsUp ? aqua : histA_IsDown ? blue : histB_IsDown ? red : histB_IsUp ? maroon :yellow :gray
macd_color = macd_colorChange ? macd_IsAbove ? lime : red : red
signal_color = macd_colorChange ? macd_IsAbove ? orange : orange : lime

circleYPosition = outSignal

plot(smd and outMacD ? outMacD : na, title="MACD", color=macd_color, linewidth=4)
plot(smd and outSignal ? outSignal : na, title="Signal Line", color=signal_color, style=line ,linewidth=2)
plot(sh and outHist ? outHist : na, title="Histogram", color=plot_color, style=histogram, linewidth=4)
plot(sd and cross(outMacD, outSignal) ? circleYPosition : na, title="Cross", style=circles, linewidth=4, color=macd_color)

// plot( isWithinZeroMacd ? outHist : na, title="CheckSmallHistBars", style=circles, linewidth=4, color=black)

hline(0, '0 Line',  linewidth=2, color=white)




strategy.close("Short", shouldExitShort)
strategy.close("Long", shouldExitLong)

// fastLength = input(12)
// slowlength = input(26)
// MACDLength = input(9)

// MACD = ema(close, fastLength) - ema(close, slowlength)
// aMACD = ema(MACD, MACDLength)
// delta = MACD - aMACD


// if (crossover(delta, 0))
   // strategy.entry("MacdLE", strategy.long, comment="MacdLE")

//if last two macd bars are higher than current, close long position

// if (crossunder(delta, 0))
   // strategy.entry("MacdSE", strategy.short, comment="MacdSE")

//if last two macd bars are higher than current, close long position

// plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)