Estrategia cuantitativa MACD: estrategia de ruptura de media móvil de doble cruce


Fecha de creación: 2024-02-22 15:32:42 Última modificación: 2024-02-22 15:32:42
Copiar: 0 Número de Visitas: 679
1
Seguir
1617
Seguidores

Estrategia cuantitativa MACD: estrategia de ruptura de media móvil de doble cruce

Descripción general

La estrategia se basa en el cálculo de la diferencia entre la media móvil rápida y la media móvil lenta para formar el indicador MACD, y luego se combina con la línea de señal para determinar la tendencia del mercado financiero y la zona de sobreventa y sobreventa. Se hace más cuando el MACD y la línea de señal forman un forzador múltiple y el precio está por encima de la media de 200 días, y se forma un forzador vacío y el precio está por debajo de la media de 200 días.

Principio de estrategia

El principio básico es calcular el diferencial entre la media móvil rápida y la media móvil lenta para formar el indicador MACD y determinar la dirección de la tendencia del mercado, y luego usar la línea de señal para determinar la zona de sobreventa y sobreventa. Cuando la MACD y la línea de señal forman un tenedor de oro, la señal de más cabezas es más, y cuando se forma un tenedor de muertos, la señal de vacío está vacía. Al mismo tiempo, la relación de los precios con la media de 200 días para filtrar la señal, solo se hace un tenedor de oro cuando el precio está por encima de la media de 200 días, y se hace un tenedor de muertos cuando el precio está por debajo de la media de 200 días.

El método de cálculo es el siguiente:

  1. La media móvil rápida (EMA de 12 días) menos la media móvil lenta (EMA de 26 días) obtiene MACD
  2. El EMA del 9 de MACD tiene una línea de señal
  3. MACD menos la línea de señal para obtener el rectángulo MACD

Cuando el MACD está por encima de la línea de señal y el MACD y la línea de señal están al mismo tiempo por debajo de 0, haga una señal de más para el tenedor de oro. Cuando el MACD está por debajo de la línea de señal y el MACD y la línea de señal están por encima de 0, haga una señal de vacío para el tenedor de oro.

Ventajas estratégicas

  1. El uso de doble indicador evita las limitaciones de un solo indicador y mejora la precisión de la señal
  2. Combinación de un doble filtro de precios y la relación de la línea media para evitar señales de confusión en una tendencia fuerte
  3. El espacio para la optimización de parámetros es amplio y puede adaptarse a diferentes entornos de mercado ajustando los parámetros de la línea media
  4. La configuración conservadora de los parámetros hace que la señal sea menor pero más precisa
  5. Ideas estratégicas fáciles de entender y de implementar

Riesgo estratégico

  1. Cuando los mercados fluctúan fuertemente, los indicadores se ven afectados y producen señales erróneas
  2. El retraso del sistema de línea media en sí mismo puede afectar la puntualidad de la estrategia.
  3. Las señales son pocas y las oportunidades de tendencia se pierden fácilmente.
  4. PARAMETERS Optimización con riesgo de optimización excesiva
  5. Mecanismos de control de retiro y de retirada de pérdidas aún no se han perfeccionado

Se puede reducir el riesgo mediante la reducción adecuada del ciclo promedio, la adición de otros indicadores de juicio y la adición de medidas de deterioro.

Dirección de optimización de la estrategia

1.tested on different timeframes from 15m upto 1D, where optimal results where on 4H timeframe in terms of risk adjusted returns

2.optimize fast ma and slow ma so that macd represents cycle, I found 7-21 performs good for 15m chart

3.also tested hull moving average for MACD which gave good results

4.stoploss can also be trailed for better risk management

Resumir

En general, esta estrategia es muy sencilla y práctica, produce una señal de negociación de alta probabilidad a través de un doble criterio de juicio y filtración de precios, una alta tasa de ganancias marginales, utiliza el conjunto de parámetros clásicos de MACD y no se optimiza en exceso. El espacio para la optimización es grande, y se puede mejorar aún más el rendimiento de la estrategia mediante el ajuste del conjunto de parámetros promedio, la adición de otros indicadores de juicio y medidas de detención de pérdidas. En general, es una estrategia cuantitativa típica basada en los fundamentos.

Código Fuente de la Estrategia
/*backtest
start: 2024-02-14 00:00:00
end: 2024-02-21 00:00:00
period: 1h
basePeriod: 15m
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/
// © Hurmun

//@version=4
strategy("Simple MACD strategy ", overlay=true, margin_long=100, margin_short=100)


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


movinga2 = input(title="movinga 2", type=input.integer, defval=200)

movinga200 = sma(close, movinga2)

plot(movinga200, "MA", color.orange)
longCondition = crossover(macd, signal) and macd < 0 and signal < 0 and close > movinga200
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

shortCondition = crossunder(macd, signal) and macd > 0 and signal > 0 and close < movinga200
if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)
    
shortProfitPerc = input(title="Short Take Profit (%)", minval=0.0, step=0.1, defval=2) / 100
longProfitPerc = input(title="Long Take Profit (%)", minval=0.0, step=0.1, defval=2) / 100
    
stoploss = input(title="stoploss in %", minval = 0.0, step=1, defval=2) /100

longStoploss = strategy.position_avg_price * (1 - stoploss)
longExitPrice  = strategy.position_avg_price * (1 + longProfitPerc)

shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc)
shortStoploss = strategy.position_avg_price * (1 + stoploss)
    
if (strategy.position_size > 0 )
    strategy.exit(id="XL TP", limit=longExitPrice, stop=longStoploss)






if (strategy.position_size < 0 )
    strategy.exit(id="XS TP", limit=shortExitPrice, stop=shortStoploss)