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.
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.
El indicador MACD es clásico y fácil de entender, capturando eficazmente las oportunidades de reversión a corto y mediano plazo.
La construcción de la EMA dual del sistema MACD tiene una mejor suavidad que los sistemas de MA único.
Los parámetros relativamente más ajustables permiten la optimización en diferentes mercados.
La combinación con los indicadores de volumen ayuda a identificar señales de alta calidad.
El MACD puede producir más señales falsas en mercados oscilantes.
No puede determinar tendencias y puede producir pérdidas cuando se cruzan tendencias.
El plazo de tiempo limitado de las pruebas de retroceso puede ignorar las condiciones extremas del mercado.
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.
Prueba diferentes fuentes de precios como los precios cerrados, medianos, de restablecimiento, etc.
Busque conjuntos de parámetros óptimos basados en datos más históricos.
Integrar otros indicadores para juzgar la calidad de la señal, por ejemplo, las señales de volumen.
Incorporar análisis de tendencias y ciclos para evitar conflictos significativos de tendencias.
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)