L’idée centrale de cette stratégie est de combiner les deux courbes et l’indicateur MACD pour déterminer la direction de la tendance et suivre la tendance. Lorsque la courbe moyenne à court terme traverse la courbe moyenne à long terme, elle est considérée comme une opportunité de hausse. Lorsque la courbe moyenne à court terme traverse la courbe moyenne à long terme, elle est considérée comme une opportunité de baisse.
Les lignes rapides (ligne 12), lentes (ligne 26) et signalées (ligne 9) sont calculées.
Calculer la colonne MACD ((ligne rapide - ligne lente) et la ligne de signal MACD ((ligne de 9 jours de MACD)
Les lignes de 50 jours et de 200 jours sont calculées comme des lignes moyennes pour déterminer les grandes tendances.
La ligne MACD passe sur l’axe 0 comme signe positif et sur l’axe 0 comme signe négatif.
Les lignes rapides sont traversées par les lignes lentes et les lignes moyennes à court terme par les lignes moyennes à long terme.
La ligne rapide traverse la ligne lente et la ligne moyenne à court terme traverse la moyenne à long terme comme signal baissier.
Chaque fois que la direction de la moyenne change, plusieurs transactions sont autorisées, contrôlées par les paramètres Max trades after EMA cross.
La position est levée par un stop loss après l’entrée.
Les deux lignes de parité permettent de juger les grandes tendances et d’éviter les échanges à contre-courant.
Le MACD détermine les points d’achat et de vente et capte les changements de tendance en temps opportun.
La combinaison de la double ligne d’équilibre et de l’indicateur MACD permet de saisir les meilleurs moments d’entrée dans la tendance.
Il s’agit d’un système de trading basé sur le nombre maximal de transactions pour éviter de suivre les pertes.
Le mécanisme de contrôle des risques d’arrêt des dommages.
Une meilleure combinaison de paramètres peut être obtenue par l’optimisation des paramètres.
Les erreurs de calcul des grandes tendances entraînent des pertes de négociation en contre-courant. Les exigences relatives à l’écart de la ligne moyenne peuvent être assouplies de manière appropriée pour garantir la capture des grandes tendances.
Les signaux d’achat et de vente MACD sont en retard, ce qui peut entraîner une entrée trop tôt ou trop tard. Les paramètres MACD peuvent être ajustés ou combinés avec d’autres signaux de filtrage d’indicateurs.
Le freinage est mal réglé et peut être trop relâché ou trop serré, ce qui entraîne une perte de freinage excessive ou insuffisante. Des tests d’optimisation des paramètres doivent être effectués pour différentes variétés.
La difficulté d’optimisation des paramètres, les différentes variétés et les périodes de temps nécessitent des combinaisons de paramètres différentes et nécessitent un grand nombre de tests préalables.
Essayez d’utiliser d’autres indicateurs de ligne moyenne pour déterminer les grandes tendances, comme l’indicateur KD.
Essayez de combiner les signaux de filtrage MACD avec d’autres indicateurs, tels que la bande de Brin, l’arrêt ATR.
Optimiser les paramètres de l’arrêt de perte et trouver la meilleure combinaison de paramètres pour les différents types de tests.
Les méthodes d’optimisation progressive et d’optimisation aléatoire sont utilisées pour trouver les meilleures combinaisons de paramètres.
L’ajout de mécanismes de réduction de la fréquence des transactions, tels que la mise en place d’une zone d’interdiction de transaction près de l’axe zéro du MACD.
Optimisation automatique des paramètres et des combinaisons pour plusieurs variétés.
Cette stratégie utilise les avantages de l’équilibre binaire pour déterminer la tendance générale et le MACD pour déterminer les points de vente et de vente, formant une stratégie de suivi de tendance plus forte. La performance de la stratégie peut être encore améliorée par l’optimisation des paramètres et la combinaison d’indicateurs.
/*backtest
start: 2023-10-02 00:00:00
end: 2023-11-01 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(title="ComiCo - Joel on Crypto - MACD Scalping", shorttitle="ComiCo - Joel on Crypto - MACD Scalping")
// Getting inputs
slow_length1 = input(title="EMA Trend 1", defval=50)
slow_length2 = input(title="EMA Trend 2 ", defval=200)
fast_length = input(title="MACD Fast Length", defval=12)
slow_length = input(title="MACD Slow Length", defval=26)
signal_length = input.int(title="MACD Signal Smoothing", minval = 1, maxval = 50, defval = 9)
src = input(title="MACD Source", defval=close)
i_switch = input.string(title="Tick Highlight", defval="Moving average" ,options=["Moving average","Fixed value" ])
i_switch2 = input.string(title="Tick Source", defval="Highest bar" ,options=["Highest bar","Average","Last bar"])
signal_lengthup = input.int(title="Upticks Avg. Length", minval = 1, maxval = 5000, defval = 72)
signal_lengthdown = input.int(title="Downticks Avg. Length", minval = 1, maxval = 5000, defval = 72)
signal_lengthMA = input.float(title="Ticks Avg. Multiplier", minval = 0, maxval = 5000, defval = 2, step = 0.1)
sma_source = "EMA"
sma_signal = "EMA"
// Plot colors
col_grow_above = #26A69A
col_fall_above =#B2DFDB
col_grow_below = #FFCDD2
col_fall_below = #FF5252
// Calculating
fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
time_macd=timeframe.period=="1"?"1": timeframe.period=="3"?"1": timeframe.period=="5"?"1": timeframe.period=="15"?"3":timeframe.period=="30"?"5":timeframe.period=="60"?"15":timeframe.period=="120"?"30":timeframe.period=="240"?"60":timeframe.period=="D"?"240":timeframe.period=="W"?"D":timeframe.period=="M"?"W":timeframe.period=="12M"?"M":timeframe.period
macd = fast_ma - slow_ma
macd1=request.security(syminfo.tickerid, time_macd, macd)
signal = sma_signal == "SMA" ? ta.sma(macd1, signal_length) : ta.ema(macd1, signal_length)
ema50=ta.ema(close,slow_length1)
ema200=ta.ema(close ,slow_length2)
var TradeCounter = 0
MaxCount = input.int(title = "Max trades after EMA cross", minval = 0, maxval = 1000, defval = 3)
bull = ema50>ema200
if bull != bull[1]
TradeCounter := 0
hist = request.security(syminfo.tickerid, time_macd, macd1 - signal)
f() => [hist[4],hist[3],hist[2],hist[1], hist]
ss=request.security(syminfo.tickerid, time_macd, hist, barmerge.gaps_on,barmerge.lookahead_off)
[ss5,ss4,ss3,ss2,ss1]=request.security(syminfo.tickerid, time_macd, f(), barmerge.gaps_on,barmerge.lookahead_off)
a = array.from(ss5,ss4,ss3,ss2,ss1)
s3=i_switch2=="Highest bar"?(ss>0? array.max(a, 0) : array.min(a, 0)):i_switch2=="Average"?array.avg(a):i_switch2=="Last bar"?ss1:0
saa=timeframe.period == '1'? ss:s3
saa2=timeframe.period == '1'? ss:s3*signal_lengthMA
colorss=(s3>=0 ? (s3[1] < s3 ? col_grow_above : col_fall_above) : (s3[1] < s3 ? col_grow_below : col_fall_below))
saadown = saa2
saaup = saa2
saadown:=saa>=0? saa2:saadown[1]
saaup:=saa<0? saa2:saaup[1]
verr=ta.ema(saadown,signal_lengthup)
dowww=ta.ema(saaup,signal_lengthdown)
ss22=plot(verr, title="Avg. Cloud Upper 1", color=color.new(color.white, 100))
ss33=plot(dowww, title="Avg. Cloud Lower 1", color=color.new(color.white, 100))
fill(ss22, ss33, color.new(color.white, 93), title="Avg. Cloud Background")
fixeduptick = input(title="Fixed Uptick Value", defval=30)
fixeddowntick = input(title="Fixed Downtick Value", defval=-30)
minl = i_switch=="Fixed value"? fixeduptick : verr
maxl = i_switch=="Fixed value"? fixeddowntick : dowww
plot(minl, title="Avg. Cloud Upper 2", color=color.new(color.white, 81))
plot(maxl, title="Avg. Cloud Lower 2", color=color.new(color.white, 81))
colors2= s3<=minl and s3>=maxl ? #2a2e39 : colorss
coro2=s3>0? ema50>ema200 ? #2a2e39 : colors2 : ema50<ema200 ? #2a2e39: colors2
plot(saa, title="Histogram", style=plot.style_columns, color=coro2)
LimitDiff = input.float(title="Limit Price Difference", minval = 0, maxval = 0.1, defval = 0.005, step = 0.0005)
TP = input.float(title="Take Profit", minval = 0, maxval = 0.1, defval = 0.005, step = 0.0005)
SL = input.float(title="Stop Loss", minval = 0, maxval = 0.1, defval = 0.004, step = 0.0005)
minEMAdiff = input.float(title = "Min EMA difference", defval = 100, step = 10)
if #2a2e39 != coro2
a22 = 0
if ema50<ema200 and TradeCounter < MaxCount and math.abs(ema50-ema200) > minEMAdiff
LimitPrice = close * (1 + LimitDiff)
strategy.entry("enter short", strategy.short, limit = LimitPrice)
strategy.exit("exit short", "enter short", limit = LimitPrice * (1 - TP), stop = LimitPrice * (1 + SL))
TradeCounter := TradeCounter + 1
if ema50>ema200 and TradeCounter < MaxCount and math.abs(ema50-ema200) > minEMAdiff
LimitPrice = close * (1 - LimitDiff)
strategy.entry("enter long", strategy.long, limit = LimitPrice)
strategy.exit("exit long", "enter long", limit = LimitPrice * (1 + TP), stop = LimitPrice * (1 - SL))
TradeCounter := TradeCounter + 1
//alertcondition(#2a2e39 != coro2 , title='MACD Tick Alert', message='Joel on Crypto - MACD Tick Alert')