Estratégia de negociação de reversão MACD dupla

Autora:ChaoZhang, Data: 2024-01-12 14:49:47
Tags:

img

Resumo

A estratégia de negociação de reversão MACD dupla é uma estratégia de negociação quantitativa que usa o indicador MACD para identificar sinais de reversão de tendência. Esta estratégia também combina o indicador RVI e o indicador CCI para confirmar sinais de compra e filtrar algumas falsas reversões. Esta estratégia é adequada para negociação intradiária e de curto prazo.

Estratégia lógica

A estratégia é baseada principalmente no indicador MACD. O MACD é a média móvel rápida EMA ((12) menos a média móvel lenta EMA ((26) para obter a linha rápida, e depois usar SIGNAL ((9) como a linha lenta. Quando a linha rápida cruza acima da linha lenta para gerar uma Cruz Dourada, é alta; Quando a linha rápida cruza abaixo da linha lenta para gerar uma Cruz Morta, é baixa.

Esta estratégia usa indicadores MACD de quadro de tempo duplo para identificar oportunidades de reversão. A estratégia usa o MACD de 6 horas para determinar a direção geral da tendência e o MACD de 1 hora para encontrar sinais de reversão. Quando o MACD de 6 horas está em uma tendência de alta, se a linha rápida de 1 hora cruzar abaixo da linha lenta para gerar um sinal de cruz de morte, ele indica que o preço pode reverter para cima. Neste ponto, combine o indicador RVI e o indicador CCI para confirmar e gerar um sinal de compra.

O indicador RVI mede a relação entre o preço de fechamento e o preço de abertura dos poucos candelabros mais recentes em relação aos preços mais altos e mais baixos. Um RVI abaixo de 0,2 é considerado supervendido. O indicador CCI abaixo de -100 indica supervendido. Portanto, a estratégia usa o indicador RVI abaixo de 0,2 e o indicador CCI abaixo de -95 para ajudar a confirmar o sinal de compra.

Análise das vantagens

Esta estratégia combina indicadores MACD e RVI e CCI de dois quadros de tempo para identificar com precisão oportunidades de reversão e filtrar alguns falsos sinais de reversão para melhorar a estabilidade da estratégia.

  1. Utilize o MACD de 6 horas para determinar a tendência principal e evitar negociações em ambientes com maior incerteza no mercado mais amplo.

  2. O MACD de 1 hora identifica o calendário de reversão e capta os ajustamentos de preços de ciclos mais curtos.

  3. A combinação do indicador RVI e do indicador CCI permite determinar com mais precisão o momento da reversão.

  4. A estratégia inclui um stop loss para reduzir as perdas.

Análise de riscos

A estratégia apresenta igualmente alguns riscos, que se refletem principalmente em:

  1. O próprio MACD tende a gerar sinais falsos, por isso, embora os indicadores auxiliares tenham um bom efeito de filtragem, é impossível evitar completamente as perdas.

  2. Os indicadores RVI e CCI podem emitir sinais incorretos, perdendo assim melhores oportunidades de reversão ou aumentando perdas desnecessárias.

  3. A configuração inadequada de stop loss pode desencadear stop loss com muita frequência ou não controlar as perdas no tempo se for muito frouxa.

Orientações de otimização

A estratégia pode ser melhorada a partir dos seguintes aspectos:

  1. Atualmente, usando dois quadros de tempo de 1 hora e 6 horas, mais combinações de quadros de tempo podem ser testadas para encontrar parâmetros mais estáveis.

  2. Mais indicadores podem ser introduzidos, como KDJ, WR, OBV, etc. para ajudar a julgar pontos de negociação.

  3. Os parâmetros podem ser continuamente otimizados para diferentes variedades e bibliotecas de parâmetros podem ser estabelecidas.

  4. Um mecanismo dinâmico de stop loss pode ser configurado para mover gradualmente o ponto de stop loss à medida que os lucros aumentam.

Resumo

A Estratégia de Negociação de Reversão MACD Dupla considera de forma abrangente o julgamento da tendência e os sinais de reversão, e é assistida por indicadores RVI e CCI para filtrar os sinais. Esta estratégia pode identificar efetivamente ajustes de curto prazo com boas taxas de risco-retorno, adequada para negociação intradiária e de curto prazo, e também pode ser usada como parte de um portfólio de estratégias múltiplas para fornecer diversidade de estratégia geral.


/*backtest
start: 2023-01-05 00:00:00
end: 2024-01-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Bat MACD", overlay=true)

fastLength = input(12)
slowlength = input(26)
MACDLength = input(9)
h=1.05

MACD = ema(close, fastLength) - ema(close, slowlength)
aMACD = ema(MACD, MACDLength)
delta = MACD - aMACD
hmacd= aMACD>0? h*aMACD: -(1/h)*abs(MACD) 

MACDD= (request.security(syminfo.tickerid,'360',ema(close, fastLength)) - request.security(syminfo.tickerid,'360',ema(close,slowlength)))
aMACDD = (request.security(syminfo.tickerid,'360',ema(ema(request.security(syminfo.tickerid,'360',close), fastLength)-ema(request.security(syminfo.tickerid,'360',close),slowlength), MACDLength)))
deltad= MACDD-aMACDD
L= input(0.95, title="SL")
SL = L*ema(close,10)

//MACD
slow = input(26,"Short period")
fast = input(12, "Long period")
signal = input(9, "Smoothing period")
//MACD = ema(close,fast)-ema(close,slow)
dMACD= MACD<0? ema(MACD,5):0
Mcond= rising(dMACD,1)
mcount=0.0
mcount := Mcond ? nz(mcount[1]) + 1 : nz(mcount[1])
counter=0
counter := (mcount-mcount[1]==0) ? nz(counter[1]) + 1 : 0
//counter := counter==3 ? 0: nz(counter[1])
pp=0.0
mc=0.0
pp:= (counter-counter[1]<0)? close[1] : nz(pp[1])
mc:= (counter-counter[1]<0)? MACD[1] : nz(mc[1])

bull = (pp-pp[1]<-close*0.005 and mc-mc[1]>0.02*abs(MACD) and MACD<0 and MACD[1]<0)? 1:0

//bgcolor(bull?green:white)
//RVI
p=10
CO=close-open
HL=high-low
value1 = (CO + 2*CO[1] + 2*CO[2] + CO[3])/6
value2 = (HL + 2*HL[1] + 2*HL[2] + HL[3])/6
num=sum(value1,p)
denom=sum(value2,p)
rvi=denom!=0?num/denom:0

//RVI
drvi= (rvi<0.2)? ema(rvi-0.20,3):0
RVcond= rising(drvi,1)
rvcount=0.0
rvcount := RVcond ? nz(rvcount[1]) + 1 : nz(rvcount[1])
rvcounter=0
rvcounter := (rvcount-rvcount[1]==0) ? nz(rvcounter[1]) + 1 : 0
//counter := counter==3 ? 0: nz(counter[1])
rvpp=0.0
rvmc=0.0
rvpp:= (rvcounter-rvcounter[1]<0)? close[1] : nz(rvpp[1])
rvmc:= (rvcounter-rvcounter[1]<0)? drvi[1] : nz(rvmc[1])
rvbull = (rvpp-rvpp[1]<-close*0.005 and rvmc-rvmc[1]>0.02 and drvi<0 and drvi[1]<0)? 1:0

//VolCCI
length1 = input(10, minval=1)
xMAVolPrice = ema(volume * close, length1)
xMAVol = ema(volume, length1)
src1 = xMAVolPrice / xMAVol
map = sma(src1, length1)
cci = (src1 - map) / (0.015 * dev(src1, length1))
cfi= (cci<0)? ema(cci,3) :0
CCcond= rising(cfi,1)
cccount=0.0
cccount := CCcond ? nz(cccount[1]) + 1 : nz(cccount[1])
cccounter=0
cccounter := (cccount-cccount[1]==0) ? nz(cccounter[1]) + 1 : 0
//counter := counter==3 ? 0: nz(counter[1])
ccpp=0.0
ccmc=0.0
ccpp:= (cccounter-cccounter[1]<0)? close[1] : nz(ccpp[1])
ccmc:= (cccounter-cccounter[1]<0)? cci[1] : nz(ccmc[1])
ccbull = (ccpp-ccpp[1]<-close*0.003 and ccmc-ccmc[1]>20 and cci<-95 and cci[1]<-95)? 1:0

A= bull+ccbull+rvbull
if ((MACD>hmacd)  and deltad>0 and delta>delta[1])
    strategy.entry("Long", strategy.long, comment="Buy", qty=10000/close)
if (crossunder(delta, 0) or crossunder(close,SL))
    strategy.close("Long")
if(crossover(low,SL) and SL-SL[1]<close*0.005 and SL-SL[1]>-close*0.005)    
    strategy.entry("Long", strategy.long, comment="Buy", qty=10000/close)
if A 
    strategy.entry("Long", strategy.long, comment="Buy", qty=10000/close)
plot(SL)

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

Mais.