Estrategia de tiempo de la media móvil diferencial del oscilador

El autor:¿ Qué pasa?, Fecha: 2023-12-26 14:40:12
Las etiquetas:

img

Resumen general

Esta estrategia calcula la diferencia entre la EMA rápida y la EMA lenta para formar el oscilador MACD, y calcula la EMA del propio MACD para formar la línea de señal, construyendo así un sistema de doble filtrado.

Principio de la estrategia

El indicador central de esta estrategia es el oscilador MACD, que se calcula restando la EMA lenta (normalmente 26 días EMA) de la EMA rápida (normalmente 12 días EMA). La EMA rápida es más sensible y puede capturar las fluctuaciones de precios a corto plazo. La EMA lenta responde a los cambios de precios más lentamente. Restando los dos forma un oscilador que representa la diferencia entre los ciclos de precios a corto y mediano plazo.

Los parámetros de entrada de esta estrategia se establecen en la longitud de la línea rápida, la longitud de la línea lenta, la fuente de precios y el período de suavizado de la línea de señal, respectivamente. Estos se pueden ajustar de acuerdo con diferentes mercados para encontrar las combinaciones óptimas de parámetros. El bloque de color de fondo muestra el marco de tiempo de backtest. La estrategia abre posiciones solo dentro de este marco de tiempo.

Análisis de ventajas

  1. El indicador MACD es clásico y fácil de entender, capturando eficazmente las oportunidades de reversión a corto y mediano plazo.

  2. La construcción de la EMA dual del sistema MACD tiene una mejor suavidad que los sistemas de MA único.

  3. Los parámetros relativamente más ajustables permiten la optimización en diferentes mercados.

  4. La combinación con los indicadores de volumen ayuda a identificar señales de alta calidad.

Análisis de riesgos

  1. El MACD puede producir más señales falsas en mercados oscilantes.

  2. No puede determinar tendencias y puede producir pérdidas cuando se cruzan tendencias.

  3. El plazo de tiempo limitado de las pruebas de retroceso puede ignorar las condiciones extremas del mercado.

  4. El ajuste de parámetros requiere más datos de mercado para evitar una adaptación excesiva a períodos de mercado específicos.

Los riesgos pueden controlarse mediante la incorporación de indicadores de tendencia y mecanismos de stop loss.

Direcciones de optimización

  1. Prueba diferentes fuentes de precios como los precios cerrados, medianos, de restablecimiento, etc.

  2. Busque conjuntos de parámetros óptimos basados en datos más históricos.

  3. Integrar otros indicadores para juzgar la calidad de la señal, por ejemplo, las señales de volumen.

  4. Incorporar análisis de tendencias y ciclos para evitar conflictos significativos de tendencias.

Conclusión

Esta estrategia captura oportunidades de reversión a corto y mediano plazo mediante la construcción de un sistema de filtro EMA dual. Pertenece a una estrategia clásica y práctica de sincronización de mercado. Los riesgos se pueden controlar a través de la optimización de parámetros, el filtrado de señales y los medios de stop loss.


/*backtest
start: 2022-12-19 00:00:00
end: 2023-12-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="MACD Histogram Backtest", shorttitle="MACD")

// Getting inputs
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA(Signal Line)", type=input.bool, defval=false)

// Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00

// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal

grow = (hist[1] < hist)
fall = (hist[1] > hist) and hist >= 0
stop = (hist[1] > hist)

plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 )
plot(macd, title="MACD", color=col_macd, transp=0)
plot(signal, title="Signal", color=col_signal, transp=0)

//Strategy Testing

// Component Code Start
// Example usage:
// if testPeriod()
//   strategy.entry("LE", strategy.long)
testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(01, "Backtest Start Month")
testStartDay = input(2, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=input.bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() => true
// Component Code Stop

//Entry and Close settings
if testPeriod() 
    strategy.entry("grow", true, 10, when = grow, limit = close)
    strategy.close("grow", when = fall)
    strategy.close("grow", when = stop)
    
//if testPeriod() 
//   strategy.entry("fall", false, 1000, when = fall, limit = close)
//    strategy.close("fall", when = grow)    



Más.