Estrategia de seguimiento de la media móvil dual del MACD

El autor:¿ Qué pasa?, Fecha: 2023-12-18 12:25:13
Las etiquetas:

img

Resumen general

Esta estrategia se llamaEstrategia de seguimiento de la media móvil dual del MACDUtiliza el indicador MACD de cruz de oro y la cruz de muerte de las medias móviles duales como señales de negociación, combinadas con el precio más bajo del día anterior como punto de stop loss para rastrear el movimiento de los precios a corto plazo.

Estrategia lógica

  1. Calcular la EMA rápida (cerca de 5), la EMA lenta (cerca de 8) y la SMA de la señal (cerca de MACD, 3)
  2. Definir la señal larga: cuando el MA rápido cruza el MA lento
  3. Definir la señal corta: cuando el MA rápido se cruza por debajo del MA lento o el precio de cierre es inferior al precio más bajo del día anterior
  4. El tamaño de la posición es el capital inicial de 2000 USD dividido por el precio de cierre
  5. Utilice la señal corta para cerrar la posición larga como stop loss

Análisis de ventajas

  1. Utilice el indicador MACD para determinar las zonas de sobrecompra y sobreventa, con dos MAs para formar señales de negociación, evitando una falsa ruptura
  2. Seguimiento de las tendencias a corto plazo, stop loss oportuno
  3. El ajuste dinámico del tamaño de la posición evita pérdidas individuales excesivamente grandes

Análisis de riesgos

  1. El indicador MACD tiene un efecto retardante, puede perder oportunidades a corto plazo
  2. Las señales de negociación de doble MA pueden producir señales falsas
  3. El punto de stop loss es demasiado agresivo, con una alta frecuencia de ser detenido

Direcciones de optimización

  1. Optimizar la combinación de parámetros MACD para mejorar la sensibilidad del indicador
  2. Añadir un juicio de tendencia para evitar señales falsas de consolidación del mercado
  3. Combinar con el índice de volatilidad para evaluar la volatilidad del mercado, ajustar el punto de stop loss

Resumen de las actividades

Esta estrategia utiliza el clásico indicador de combinación de dos promedios móviles MACD para determinar las zonas de sobrecompra y sobreventa, generando señales comerciales, al tiempo que introduce el tamaño dinámico de la posición y el precio más bajo del día anterior como diseño de punto de stop loss para capturar las fluctuaciones de precios a corto plazo.


/*backtest
start: 2023-12-10 00:00:00
end: 2023-12-13 02:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
// macd/cam v1 strategizing Chris Moody Macd indicator https://www.tradingview.com/script/OQx7vju0-MacD-Custom-Indicator-Multiple-Time-Frame-All-Available-Options/
// macd/cam v2 changing to macd 5,8,3
// macd/cam v2.1 
//      Sell when lower than previous day low. 
//      Initial capital of $2k. Buy/sell quantity of initial capital / close price
//      Quitar short action
//      Note: custom 1-week resolution seems to put AMD at 80% profitable

strategy(title="MACD/CAM 2.1", shorttitle="MACD/CAM 2.1") //
source = close
//get inputs from options
useCurrentRes = input(true, title="Use Current Chart Resolution?")
resCustom = input(title="Use Different Timeframe? Uncheck Box Above", defval="60")
smd = input(true, title="Show MacD & Signal Line? Also Turn Off Dots Below")
sd = input(true, title="Show Dots When MacD Crosses Signal Line?")
sh = input(true, title="Show Histogram?")
macd_colorChange = input(true,title="Change MacD Line Color-Signal Line Cross?")
hist_colorChange = input(true,title="MacD Histogram 4 Colors?")
venderLowerPrev = input(true,title="Vender cuando closing price < previous day low?")

res = useCurrentRes ? timeframe.period : resCustom

fastLength = input(5, minval=1), slowLength=input(8,minval=1)
signalLength=input(3,minval=1)

// find exponential moving average of price as x and fastLength var as y
fastMA = ema(source, fastLength)
slowMA = ema(source, slowLength)

macd = fastMA - slowMA
// simple moving average
signal = sma(macd, signalLength)
hist = macd - signal

outMacD = request.security(syminfo.tickerid, res, macd)
outSignal = request.security(syminfo.tickerid, res, signal)
outHist = request.security(syminfo.tickerid, res, hist)

histA_IsUp = outHist > outHist[1] and outHist > 0
histA_IsDown = outHist < outHist[1] and outHist > 0
histB_IsDown = outHist < outHist[1] and outHist <= 0
histB_IsUp = outHist > outHist[1] and outHist <= 0

//MacD Color Definitions
macd_IsAbove = outMacD >= outSignal
macd_IsBelow = outMacD < outSignal

plot_color = hist_colorChange ? histA_IsUp ? aqua : histA_IsDown ? blue : histB_IsDown ? red : histB_IsUp ? maroon :yellow :gray
macd_color = macd_colorChange ? macd_IsAbove ? lime : red : red
signal_color = macd_colorChange ? macd_IsAbove ? yellow : yellow : lime

circleYPosition = outSignal
 
plot(smd and outMacD ? outMacD : na, title="MACD", color=macd_color, linewidth=4)
plot(smd and outSignal ? outSignal : na, title="Signal Line", color=signal_color, style=line ,linewidth=2)
plot(sh and outHist ? outHist : na, title="Histogram", color=plot_color, style=histogram, linewidth=4)

circleCondition = sd and cross(outMacD, outSignal)

// Determine long and short conditions
longCondition  = circleCondition and macd_color == lime

redCircle = circleCondition and macd_color == red
redCirclePrevLow = redCircle or low<low[1]
shortCondition = redCircle
if (venderLowerPrev)
    shortCondition = redCirclePrevLow

strategy.initial_capital = 20000
// Set quantity to initial capital / closing price
cantidad = strategy.initial_capital/close

// Submit orders
strategy.entry(id="long", long=true, qty=cantidad, when=longCondition)
strategy.close(id="long", when=shortCondition)
plot(circleCondition ? circleYPosition : na, title="Cross", style=cross, linewidth=10, color=macd_color)
// hline(0, '0 Line', linestyle=solid, linewidth=2, color=white)

Más.