
A ideia central desta estratégia é combinar a linha de dupla média e o indicador MACD para determinar a direção da tendência e realizar negociações de acompanhamento de tendência. Quando a linha de média curta atravessa a linha de média longa, é considerada uma oportunidade de bullish; Quando a linha de média curta atravessa a linha de média longa, é considerada uma oportunidade de bearish. O indicador MACD é usado para determinar pontos de compra e venda.
Calcule as linhas rápida EMA (linha 12), lenta EMA (linha 26) e sinal EMA (linha 9).
Calcule a linha de coluna MACD ((linha rápida-linha lenta) e a linha de sinal MACD ((linha 9 de MACD))
Calcule a linha de 50 dias e a linha de 200 dias como a linha média para determinar a tendência geral.
A linha do MACD passa pelo eixo 0 como um sinal positivo e pelo eixo 0 como um sinal negativo.
A linha rápida atravessa a linha lenta e a linha média curta atravessa a linha média longa como sinal de alerta.
A linha rápida atravessa a linha lenta e a linha média curta atravessa a linha média longa como sinal de baixa.
Cada vez que a linha média muda de direção, é permitido entrar em campo várias vezes, através de Max trades after EMA cross controle de parâmetros.
A entrada é feita através do Stop Loss e a liquidação da posição.
O que você pode fazer é avaliar as grandes tendências e evitar negociações adversas.
O MACD determina os pontos de venda e compra para capturar a mudança de tendência.
A combinação de duas linhas de equilíbrio e indicadores MACD permite capturar melhores momentos de entrada na tendência.
A partir de agora, você pode definir o número máximo de transações, evitando que o seu negócio caia.
Controle de risco do mecanismo de suspensão.
A melhor combinação de parâmetros pode ser obtida com a otimização de parâmetros.
Os erros de julgamento de grandes tendências, que resultam em perdas de negociação em contrapartida. A exigência de diferença de linha média pode ser relaxada de forma apropriada para garantir a captura de grandes tendências.
Os sinais de compra e venda do MACD estão atrasados, podendo causar entrada prematura ou tardia. Os parâmetros do MACD podem ser ajustados, ou podem ser combinados com outros sinais de filtragem de indicadores.
O amortecedor de perda está mal configurado e pode ser muito relaxado ou muito apertado, resultando em perda excessiva ou insuficiência de amortecimento. Testes de otimização de parâmetros devem ser realizados para diferentes variedades.
Dificuldade de otimização de parâmetros, diferentes variedades e períodos de tempo exigem diferentes combinações de parâmetros, exigindo um grande número de testes antecipados.
Tente outros indicadores de linha média para determinar as grandes tendências, como o indicador KD.
Tente combinar o MACD com outros indicadores auxiliares de filtragem, como banda de Brin, ATR stop.
Optimizar os parâmetros de parada de perda para encontrar a melhor combinação de parâmetros para testes separados de diferentes variedades.
Otimizar a combinação de parâmetros usando métodos de otimização por etapas e otimização aleatória.
Adição de mecanismos para reduzir a frequência de transações, como a criação de zonas de bloqueio perto do eixo zero do MACD.
Optimização automática de parâmetros e combinações para várias variedades.
Esta estratégia combina a aplicação de duas linhas de equilíbrio para determinar a tendência geral e os pontos de venda e venda do MACD, formando uma estratégia de acompanhamento de tendências mais forte. A otimização de parâmetros e a combinação de indicadores também podem melhorar ainda mais o desempenho da estratégia.
/*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')