Estrategia de sincronización de media móvil diferencial de osciladores


Fecha de creación: 2023-12-26 14:40:12 Última modificación: 2023-12-26 14:40:12
Copiar: 0 Número de Visitas: 374
1
Seguir
1179
Seguidores

Estrategia de sincronización de media móvil diferencial de osciladores

Descripción general

Esta estrategia forma un oscillador MACD calculando la diferencia entre el EMA de la línea rápida y el EMA de la línea lenta, y luego forma una línea de señal calculando la línea media de la MACD, para construir un sistema de doble filtro. Cuando la línea MACD cruza la línea de señal desde abajo, genera una señal de compra, y cuando la línea MACD cruza la línea de señal desde arriba, genera una señal de venta.

Principio de estrategia

El indicador central de esta estrategia es el oscilador MACD, que se calcula a partir de la línea rápida EMA (generalmente establecida en 12 días de EMA) menos la línea lenta EMA (generalmente establecida en 26 días de EMA). La línea rápida EMA es más sensible y capta las fluctuaciones a corto plazo de los precios; la línea lenta EMA responde más lentamente a los cambios de precios.

Esta estrategia establece los parámetros de entrada en la longitud de la línea rápida, la longitud de la línea lenta, la fuente de precios y la longitud de la línea de señal. El ciclo de suavización. Se pueden ajustar los parámetros de acuerdo con los diferentes mercados para buscar la combinación de parámetros óptima.

Análisis de las ventajas

  1. Los indicadores MACD son clásicos y fáciles de entender, lo que permite aprovechar las oportunidades de inversiones a corto y medio plazo.

  2. Los sistemas MACD construidos con dos EMA tienen una mejor suavidad que los sistemas MA individuales.

  3. Se pueden ajustar más parámetros para optimizar los parámetros para diferentes mercados.

  4. La combinación de indicadores de tráfico permite identificar señales de alta calidad.

Análisis de riesgos

  1. En situaciones convulsivas, el MACD produce más señales erróneas.

  2. No se puede juzgar la tendencia y puede haber pérdidas si se cruza con la tendencia.

  3. La limitación en el tiempo de detección puede ignorar situaciones extremas.

  4. La configuración de los parámetros requiere combinar más datos de mercado para optimizarlos, de lo contrario, podría sobreajustar un segmento de mercado.

El riesgo puede ser controlado mediante la combinación de indicadores de tendencia, el establecimiento de mecanismos de suspensión de pérdidas. Al mismo tiempo, se amplía el alcance de la resonancia y el espacio de muestra del mercado para la optimización de los parámetros.

Dirección de optimización

  1. Prueba diferentes fuentes de precios, como el precio de cierre, el precio promedio, el precio de reposición, etc.

  2. Buscar la mejor combinación de parámetros basada en más datos históricos.

  3. Integración de otros indicadores para determinar la calidad de la señal. Por ejemplo, la señal de tráfico.

  4. Combinando tendencias y juicios de bandas, se evita un conflicto importante con las tendencias.

Resumir

Esta estrategia es una estrategia clásica y práctica de elección de tiempo, mediante la construcción de un doble filtro EMA, para capturar el fenómeno de la inversión de los ciclos de línea corta en los precios. Se puede controlar el riesgo a través de la optimización de parámetros, filtración de señales y medios de detención de pérdidas.

Código Fuente de la Estrategia
/*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)