
La estrategia de negociación de reversión doble MACD es una estrategia de negociación cuantitativa que utiliza el indicador MACD para identificar señales de reversión de tendencia. La estrategia combina al mismo tiempo el indicador RVI y el indicador CCI para confirmar el momento de compra y filtrar algunos falsos reveses.
La estrategia se basa principalmente en el indicador MACD. El MACD es el promedio móvil más rápido EMA ((12)) menos el promedio móvil más lento EMA ((26) para obtener una línea rápida, y luego usar SIGNAL ((9) como línea lenta. Cuando se cruza una línea larga en la línea rápida, se obtiene una cruz dorada; cuando se cruza una línea lenta en la línea rápida, se obtiene una cruz muerta.
La estrategia utiliza el MACD de dos períodos de tiempo para buscar oportunidades de reversión. La estrategia utiliza el MACD de 6 horas para determinar la dirección de la tendencia general y el MACD de 1 hora en el día para buscar una señal de reversión. Cuando el MACD de 6 horas está en una tendencia alcista, el nivel de 1 hora indica que el precio puede revertir hacia arriba.
El indicador RVI mide la relación entre el precio de cierre y el precio de apertura de las líneas K más recientes y el precio más alto y el precio más bajo. Cuando el RVI está por debajo de 0.2, se considera que está sobrevendido. El indicador CCI es inferior a 100, lo que significa que está sobrevendido.
La estrategia, combinada con el MACD de doble período de tiempo y los indicadores RVI y CCI, permite identificar con mayor precisión las oportunidades de reversión y filtrar algunas señales de falsa reversión, lo que mejora la estabilidad de la estrategia. Las ventajas específicas son las siguientes:
Utiliza el MACD a nivel de 6 horas para determinar las tendencias y evitar el comercio en un entorno de mayor incertidumbre en el mercado.
El MACD a nivel de 1 hora reconoce el tiempo de reversión y puede capturar ajustes de precios en períodos más cortos.
La combinación de los indicadores RVI y CCI permite determinar con mayor precisión el momento de la reversión.
Las estrategias para reducir las pérdidas incluyen puntos de parada.
La estrategia también tiene ciertos riesgos, que se reflejan principalmente en:
Los indicadores MACD son propensos a generar falsas señales, por lo que no se puede evitar por completo la pérdida, incluso si el filtro de los indicadores auxiliares es bueno. Se recomienda reducir el tamaño de la posición.
Los indicadores RVI y CCI pueden emitir señales erróneas, lo que hace que se pierda una mejor oportunidad de reversión o se aumenten las pérdidas innecesarias. Se recomienda ajustar razonablemente los parámetros de RVI y CCI.
La configuración inadecuada del punto de parada puede ser demasiado intensa para desencadenar el paro, o puede ser demasiado flexible para no controlar las pérdidas a tiempo. Se recomienda ajustar la magnitud del paro según la volatilidad del mercado.
La estrategia puede seguir optimizándose en los siguientes aspectos:
Actualmente se utilizan dos períodos de tiempo de 1 hora y 6 horas, se pueden probar más combinaciones de períodos de tiempo para buscar parámetros más estables.
Se pueden introducir más indicadores, como KDJ, WR, OBV, etc., para ayudar a determinar el punto de compra y venta. Pero se debe evitar que se generen señales de negociación demasiado complejas.
Se puede optimizar continuamente de acuerdo con los parámetros de las diferentes variedades, estableciendo una base de parámetros. Si las variedades son adecuadas para el comercio de baja y media frecuencia, se puede aumentar el ciclo de parámetros de manera adecuada.
Se puede configurar un mecanismo de stop loss dinámico para mover el punto de stop loss gradualmente después de la ganancia. O se puede ajustar el nivel de stop loss en tiempo real según la volatilidad del mercado.
La estrategia de negociación de MACD doble inversa tiene en cuenta de manera integral el juicio de tendencias y las señales de reversión, y se complementa con las señales de filtración de los indicadores RVI y CCI. La estrategia puede identificar de manera efectiva el ajuste de la línea corta para proporcionar una mejor relación de riesgo-retorno, adecuada para el comercio intradiario y de línea corta, o como parte de una combinación de múltiples estrategias para proporcionar diversidad en la estrategia general.
/*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)