Estrategia de seguimiento de tendencia MACD de cruce de medias móviles dobles


Fecha de creación: 2024-01-23 11:22:02 Última modificación: 2024-01-23 11:22:02
Copiar: 1 Número de Visitas: 594
1
Seguir
1617
Seguidores

Estrategia de seguimiento de tendencia MACD de cruce de medias móviles dobles

Descripción general

Esta estrategia es una estrategia automática de negociación basada en indicadores técnicos MACD que se cruzan con dos medias móviles. Utiliza las señales de cruce de líneas rápidas y lentas de los indicadores MACD para determinar la dirección de la tendencia y realizar el seguimiento de la tendencia.

Principio de estrategia

La estrategia calcula primero las tres curvas del indicador MACD: la línea rápida, la línea lenta y la línea de diferencia. La línea rápida es la media móvil más rápida en un período determinado, y la línea lenta es la media móvil de un período más largo. La diferencia es la diferencia entre la línea rápida y la línea lenta.

La estrategia utiliza este principio para hacer más en el momento de la horquilla de oro y cerrar la posición en el momento de la horquilla de oro; o hacer vacío en el momento de la horquilla de oro y cerrar la posición en el momento de la horquilla de oro, para lograr un seguimiento automático de la tendencia. Al mismo tiempo, la estrategia también juzga que el valor absoluto de la línea MACD es positivo-negativo, evita falsas señales y asegura que realmente capte el punto de inflexión de la tendencia.

Ventajas estratégicas

  • El uso de medias móviles dobles para determinar la dirección de las tendencias y capturar con precisión las reversiones de tendencias
  • Los indicadores técnicos del MACD reducen las señales falsas y mejoran la calidad de las señales
  • Opciones flexibles para hacer más vacío o solo más/vacío
  • Los parámetros se pueden ajustar para adaptarse a diferentes entornos del mercado

Riesgo estratégico

  • El cruce de las medias móviles dobles está atrasado y puede perder parte de las ganancias al comienzo de la rotación
  • Los indicadores MACD son propensos a generar falsas señales en mercados convulsionados
  • Necesidad de ajustar adecuadamente los parámetros para evitar ser demasiado sensible o lento

La solución al riesgo:

  • Combinación con otros indicadores para filtrar señales
  • Ajuste de parámetros para reducir la frecuencia de las transacciones
  • Esta estrategia se utiliza sólo cuando la tendencia es evidente.

Dirección de optimización de la estrategia

La estrategia puede ser optimizada en los siguientes aspectos:

  1. En combinación con otras señales de confirmación de indicadores, como el indicador KDJ, el indicador Brin, etc., filtra las señales falsas

  2. Mecanismos de entrada modificados, como la inclusión de filtros de ruptura para evitar entradas anticipadas o tardías

  3. Optimización de la configuración de los parámetros para ajustar el ciclo de línea rápida y lenta según los diferentes ciclos y el entorno del mercado para adaptarse al mercado

  4. Adherirse a una estrategia de stop loss para controlar las pérdidas individuales

  5. Extensión a otras variedades, como divisas, monedas digitales, etc.

Resumir

La estrategia de seguimiento de tendencias MACD de doble media móvil cruzada utiliza indicadores MACD para determinar la dirección de la tendencia, junto con una señal de filtro de línea cruzada rápida y lenta, que puede capturar de manera efectiva el cambio de tendencia y seguir la tendencia automáticamente. La ventaja de la estrategia reside en la precisión de la tendencia, la flexibilidad de ajuste de parámetros y la optimización según el entorno del mercado. Se debe tener en cuenta el control del riesgo para evitar la generación de señales falsas.

Código Fuente de la Estrategia
/*backtest
start: 2023-01-16 00:00:00
end: 2024-01-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © DeMindSET

//@version=4
strategy("MACD Trend Follow Strategy", overlay=false)
// Getting inputs
LSB = input(title="Long/Short", defval="Long only", options=["Long only", "Short only" , "Both"]) 
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

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)
//
Bull= macd > signal
Bear= macd < signal
ConBull=macd>0
ConBear=macd<0
//
Green= Bull and ConBull
Red= Bear and ConBear
Yellow= Bull and ConBear
Blue= Bear and ConBull
//
bcolor = Green ? color.green : Red ? color.red : Yellow ? color.yellow : Blue ? color.blue : na
barcolor(color=bcolor)
// === INPUT BACKTEST RANGE ===
FromYear  = input(defval = 2019, title = "From Year", minval = 1920)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2009)
ToMonth   = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 31, title = "To Day", minval = 1, maxval = 31)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true // create function "within window of time"

if LSB == "Long only" and Green
    strategy.entry("L",true)
if LSB == "Long only" and Red
    strategy.close("L",qty_percent=100,comment="TP Long")
if LSB == "Both" and Green
    strategy.entry("L",true)
if LSB == "Both" and Red
    strategy.entry("S",false)
if LSB == "Short only" and Red
    strategy.entry("S",false)
if LSB == "Short only" and Green
    strategy.close("S",qty_percent=100,comment="TP Short")