
A estratégia de negociação de dupla MACD inversa é uma estratégia de negociação quantitativa que usa o indicador MACD para identificar sinais de reversão de tendência. A estratégia combina o indicador RVI com o indicador CCI para confirmar o momento de compra e filtrar algumas falsas reversões.
A estratégia baseia-se principalmente no indicador MACD. O MACD é a média móvel mais rápida EMA ((12)) menos a média móvel mais lenta EMA ((26) para obter a linha rápida, e depois usar o SIGNAL ((9) como linha lenta. Quando a linha rápida atravessa a linha lenta, gera Golden Cross; quando a linha rápida atravessa a linha lenta, gera Dead Cross.
A estratégia usa o MACD de dois períodos de tempo para encontrar oportunidades de reversão. A estratégia usa o MACD de 6 horas para determinar a direção da tendência geral e o MACD de 1 hora no dia para procurar um sinal de reversão. Quando o MACD de 6 horas está em uma tendência ascendente, o nível de 1 hora indica que o preço pode voltar para cima.
O indicador RVI mede a relação entre o preço de fechamento e o preço de abertura das últimas linhas K e o preço máximo e o preço mínimo. Quando o RVI é inferior a 0,2 é considerado um excesso de venda. O indicador CCI é inferior a 100 e significa um excesso de venda.
A estratégia, combinada com o MACD de dois períodos de tempo e os indicadores RVI e CCI, permite identificar com maior precisão as oportunidades de reversão e filtrar alguns falsos sinais de reversão, aumentando assim a estabilidade da estratégia. As vantagens específicas são as seguintes:
O MACD de 6 horas é usado para avaliar as grandes tendências e evitar negociações em ambientes de maior incerteza em grandes mercados.
O MACD de nível de 1 hora reconhece o tempo de reversão e pode capturar ajustes de preços em períodos mais curtos.
A combinação dos indicadores RVI e CCI permite uma avaliação mais precisa do momento da reversão.
A estratégia de adicionar um ponto de parada reduz os prejuízos.
A estratégia também apresenta alguns riscos, como:
Os indicadores MACD são propensos a produzir falsos sinais, portanto, mesmo que a filtragem dos indicadores auxiliares seja eficaz, não é possível evitar completamente os prejuízos. Recomenda-se reduzir o tamanho da posição.
Os indicadores RVI e CCI podem emitir sinais errados, perdendo melhores oportunidades de reversão ou aumentando perdas desnecessárias. Recomenda-se ajustar razoavelmente os parâmetros RVI e CCI.
A configuração inadequada do ponto de parada pode ser muito intensa para a ação de parada, ou pode ser muito relaxada para o controle de perda em tempo hábil. Recomenda-se ajustar a amplitude de parada de acordo com a volatilidade do mercado.
A estratégia pode ser melhorada nos seguintes aspectos:
Atualmente, são usados dois períodos de tempo de 1 hora e 6 horas, sendo possível testar mais combinações de períodos de tempo para encontrar parâmetros mais estáveis.
Pode-se introduzir mais indicadores, como KDJ, WR, OBV, etc. para auxiliar na determinação do ponto de compra e venda. Mas é preciso evitar que se produzam sinais de negociação muito complexos.
Pode-se otimizar continuamente de acordo com os parâmetros de diferentes variedades, criando um banco de parâmetros. Se as variedades são adequadas para o comércio de baixa e média frequência, o ciclo de parâmetros pode ser aumentado adequadamente.
Pode-se configurar um mecanismo de stop loss dinâmico, movendo os pontos de stop loss gradualmente após o lucro. Ou ajustar o tamanho do stop loss em tempo real de acordo com a volatilidade do mercado.
A estratégia de negociação de MACD binário invertido leva em consideração o julgamento de tendências e sinais de reversão, e é complementada por sinais de filtragem de indicadores RVI e CCI. A estratégia pode identificar de forma eficaz o ajuste da linha curta para oferecer uma melhor relação de retorno ao risco, adequada para negociações diárias e de linha curta, ou como parte de um portfólio de várias estratégias para fornecer diversidade de estratégias globais.
/*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)