Estrategia de negociación de inversión MACD doble

El autor:¿ Qué pasa?, fecha: 2024-01-12 14:49:47
Las etiquetas:

img

Resumen general

La estrategia de negociación de reversión MACD es una estrategia de negociación cuantitativa que utiliza el indicador MACD para identificar señales de reversión de tendencia.

Estrategia lógica

La estrategia se basa principalmente en el indicador MACD. MACD es el promedio móvil rápido EMA ((12) menos el promedio móvil lento EMA ((26) para obtener la línea rápida, y luego usar SIGNAL(9) como la línea lenta. Cuando la línea rápida cruza por encima de la línea lenta para generar una Cruz Dorada, es alcista; Cuando la línea rápida cruza por debajo de la línea lenta para generar una Cruz Muerta, es bajista.

Esta estrategia utiliza indicadores MACD de doble marco de tiempo para identificar oportunidades de reversión. La estrategia utiliza el MACD de 6 horas para determinar la dirección general de la tendencia y el MACD de 1 hora para encontrar señales de reversión. Cuando el MACD de 6 horas está en una tendencia alcista, si la línea rápida de 1 hora cruza por debajo de la línea lenta para generar una señal de cruz de muerte, indica que el precio puede revertir hacia arriba. En este punto, combine el indicador RVI y el indicador CCI para confirmar y generar una señal de compra.

El indicador RVI mide la relación entre el precio de cierre y el precio de apertura de las velas más recientes frente a los precios más altos y más bajos. Un RVI por debajo de 0.2 se considera sobreventa. El indicador CCI por debajo de -100 indica sobreventa. Por lo tanto, la estrategia utiliza el indicador RVI por debajo de 0.2 y el indicador CCI por debajo de -95 para ayudar a confirmar la señal de compra.

Análisis de ventajas

Esta estrategia combina indicadores MACD y RVI y CCI de doble marco de tiempo para identificar con precisión las oportunidades de reversión y filtrar algunas señales falsas de reversión para mejorar la estabilidad de la estrategia.

  1. Utilice el MACD de 6 horas para determinar la tendencia principal y evitar negociar en entornos con mayor incertidumbre en el mercado en general.

  2. El MACD de 1 hora identifica el momento de la reversión y captura los ajustes de precios de ciclos más cortos.

  3. La combinación del indicador RVI y el indicador CCI puede determinar con mayor precisión el momento de la reversión.

  4. La estrategia incorpora un stop loss para reducir las pérdidas.

Análisis de riesgos

La estrategia también presenta algunos riesgos, que se reflejan principalmente en:

  1. El MACD en sí tiende a generar señales falsas, por lo que, aunque los indicadores auxiliares tienen un buen efecto de filtrado, es imposible evitar completamente las pérdidas.

  2. Los indicadores RVI y CCI pueden emitir señales incorrectas, perdiendo así mejores oportunidades de reversión o aumentando las pérdidas innecesarias.

  3. La configuración inadecuada de stop loss puede desencadenar un stop loss con demasiada frecuencia o no controlar las pérdidas a tiempo si es demasiado floja.

Direcciones de optimización

La estrategia se puede optimizar aún más en los siguientes aspectos:

  1. Actualmente se utilizan dos marcos de tiempo de 1 hora y 6 horas, se pueden probar más combinaciones de marcos de tiempo para encontrar parámetros más estables.

  2. Se pueden introducir más indicadores, como KDJ, WR, OBV, etc. para ayudar a juzgar los puntos de negociación.

  3. Los parámetros se pueden optimizar continuamente para diferentes variedades y se pueden establecer bibliotecas de parámetros.

  4. Se puede configurar un mecanismo dinámico de stop loss para mover gradualmente el punto de stop loss a medida que aumentan las ganancias o ajustar la magnitud de stop loss en tiempo real según la volatilidad del mercado.

Resumen de las actividades

La estrategia de negociación de reversión MACD doble considera de manera exhaustiva el juicio de tendencia y las señales de reversión, y es asistida por los indicadores RVI y CCI para filtrar las señales.


/*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)

Más.