Estrategia de impulso de cruce de medias móviles dobles


Fecha de creación: 2023-11-16 17:25:13 Última modificación: 2023-11-16 17:25:13
Copiar: 0 Número de Visitas: 651
1
Seguir
1617
Seguidores

Estrategia de impulso de cruce de medias móviles dobles

Descripción general

La estrategia utiliza el principio de doble cruce de líneas uniformes, combinando el juicio de tendencia del indicador MACD y los cruces de destaque de fondo, complementado con el punto de forma, con el objetivo de capturar la tendencia intermedia del mercado. La lógica principal es entrar en el mercado cuando se produce una conversión en la dirección de la línea uniforme, entrar en el cruce de destaque a través del color de fondo MACD, en combinación con el juicio de cambio de color del diagrama rectangular MACD.

Principio de estrategia

La estrategia utiliza el EMA rápido y el EMA lento para construir dos líneas medias, y las líneas rápidas y lentas se cruzan para determinar la dirección de la tendencia. Al mismo tiempo, se calculan el MACD y el Signal, cuya diferencia se traza como un gráfico rectangular.

De acuerdo con el código, la longitud de la línea rápida es de 12, la longitud de la línea lenta es de 26, lo que indica tendencias a corto y largo plazo. La longitud de la señal es de 9, para un procesamiento de suavización adicional.

Logía cruzada:

  • trend_up = macd > signal: una línea lenta en una línea rápida, que representa una tendencia alcista a corto plazo
  • trend_dn = macd < signal: la línea rápida atraviesa la línea lenta, lo que representa una tendencia bajista a corto plazo

El punto de intersección:

  • cross_UP = signal[1] >= macd[1] and signal < macd: la línea rápida atraviesa la línea lenta desde abajo
  • cross_DN = signal[1] <= macd[1] and signal > macd: la línea rápida atraviesa la línea lenta desde arriba hacia abajo

El gráfico rectangular muestra el cambio de color para determinar la intensidad de la tendencia:

  • histA_IsUp = columna de la gráfica vertical crece y es mayor que 0, lo que representa el aumento de la fuerza de ascenso
  • histA_IsDown = columnas del diagrama rectangular menores y mayores que 0, que representan la disminución de la fuerza ascendente
  • El mismo que abajo.

Ventajas estratégicas

  1. Utiliza dos líneas de equilibrio para determinar la dirección de la tendencia a medio plazo, evitando ser interrumpido por el ruido del mercado a corto plazo

  2. Los indicadores MACD ayudan a determinar las tendencias y la intensidad a corto plazo para aumentar la probabilidad de obtener ganancias

  3. Los cambios de color en el diagrama vertical determinan el tamaño de la intensidad, lo que permite un mejor momento de entrada

  4. El color de fondo de las marcas de puntos cruzados, a primera vista

  5. Período medíocre personalizable para adaptarse a diferentes entornos del mercado

  6. Se pueden ajustar los parámetros MACD para optimizar el efecto del indicador

  7. Ofrece varias formas de confirmación de entrada: dirección de la línea media, cruce de indicadores, ruptura de forma

Riesgo estratégico

  1. La línea de paridad binaria determina que la tendencia intermedia no es sensible a las fluctuaciones a corto plazo y puede perder oportunidades de línea corta.

  2. Los parámetros del MACD están mal configurados, el indicador no funciona bien y emite una señal errónea

  3. Hay cierta ceguera con sólo el ingreso de la línea media y la señal MACD

  4. No se ha considerado el mecanismo de suspensión de pérdidas y existe el riesgo de que las pérdidas aumenten

  5. Falta de estricta gestión de fondos y control de posiciones

Soluciones posibles:

  1. En combinación con otros indicadores para limitar el rango de fluctuación a corto plazo y controlar el riesgo

  2. Optimización de los parámetros MACD para probar el efecto en diferentes mercados

  3. Aumentar las señales de confirmación por factores como la forma y el momento

  4. Establecer mecanismos de detención de pérdidas para evitar pérdidas excesivas

  5. Adición de un módulo de administración de fondos para controlar las posiciones individuales según el tamaño de los fondos

Dirección de optimización de la estrategia

  1. Prueba de combinaciones de parámetros de línea media optimizadas para adaptarse a más situaciones de mercado

  2. Prueba diferentes tipos de línea media, como VWAP, línea media de banda ancha, etc.

  3. Aumentar el volumen de tráfico y evitar falsas brechas

  4. Indicadores como el RSI confirman el exceso de compra y venta

  5. Establecer mecanismos de detención de pérdidas, tales como detención de movimiento, detención de vibraciones, etc.

  6. Unirse a un mecanismo de gestión de posiciones para controlar las posiciones individuales en función del tamaño de los fondos

  7. Se puede considerar la optimización de parámetros en combinación con algoritmos de aprendizaje automático

  8. Expansión de la estrategia Universe y profundización de las direcciones de inversión de la cartera

Resumir

La estrategia integra el juicio de tendencia de doble línea y el indicador de movimiento MACD, agrega características de forma, y construye una estrategia de negociación a medio plazo relativamente estable. La ventaja central es capturar la dirección de la tendencia principal y evitar ser interrumpido por el ruido del mercado a corto plazo. Pero también hay algunos espacios para la optimización, como el mecanismo de suspensión de pérdidas, la gestión de riesgos, etc. En general, la estrategia tiene un buen valor de referencia como prueba de concepto, pero el descenso en el mercado cerrado aún necesita una prueba completa y un ajuste optimizado.

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

//@version=5
strategy(title="Histogram MacD MVP_V2.1", shorttitle="Histogram MacD MVP_2.1")
//Plot Inputs
res           = input.timeframe("",  "Indicator TimeFrame")
fast_length   = input.int(title="Fast Length", defval=12)
slow_length   = input.int(title="Slow Length", defval=26)
src           = input.source(title="Source", defval=close)
signal_length = input.int(title="Signal Smoothing", minval = 1, maxval = 999, defval = 9)
sma_source    = input.string(title="Oscillator MA Type", defval="EMA", options=["SMA", "EMA"])
sma_signal    = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])
// Show Plots T/F
show_macd     = input.bool(true, title="Show MACD Lines", group="Show Plots?", inline="SP10")
show_macd_LW  = input.int(3, minval=0, maxval=5, title = "MACD Width", group="Show Plots?", inline="SP11")
show_signal_LW= input.int(2, minval=0, maxval=5, title = "Signal Width", group="Show Plots?", inline="SP11")
show_Hist     = input.bool(true, title="Show Histogram", group="Show Plots?", inline="SP20")
show_hist_LW  = input.int(5, minval=0, maxval=5, title = "-- Width", group="Show Plots?", inline="SP20")
show_trend    = input.bool(true, title = "Show MACD Lines w/ Trend Color", group="Show Plots?", inline="SP30")
show_HB       = input.bool(false, title="Show Highlight Price Bars", group="Show Plots?", inline="SP40")
show_cross    = input.bool(false, title = "Show BackGround on Cross", group="Show Plots?", inline="SP50")
show_dots     = input.bool(true, title = "Show Circle on Cross", group="Show Plots?", inline="SP60")
show_dots_LW  = input.int(5, minval=0, maxval=5, title = "-- Width", group="Show Plots?", inline="SP60")

//show_trend    = input(true, title = "Colors MACD Lines w/ Trend Color", group="Show Plots?", inline="SP5")
// MACD Lines colors
col_macd      = input.color(#FF6D00, "MACD Line  ",  group="Color Settings", inline="CS1")
col_signal    = input.color(#2962FF, "Signal Line  ",  group="Color Settings", inline="CS1")
col_trnd_Up   = input.color(#4BAF4F, "Trend Up      ",  group="Color Settings", inline="CS2")
col_trnd_Dn   = input.color(#B71D1C, "Trend Down    ",  group="Color Settings", inline="CS2")
// Histogram Colors
col_grow_above = input.color(#26A69A, "Above   Grow",  group="Histogram Colors", inline="Hist10")
col_fall_above = input.color(#FF5252, "Fall",  group="Histogram Colors", inline="Hist10")
col_grow_below = input.color(#FF5252, "Below Grow",  group="Histogram Colors", inline="Hist20")
col_fall_below = input.color(#f8f524, "Fall",  group="Histogram Colors", inline="Hist20")
// Alerts T/F Inputs
alert_Long    = input.bool(true, title = "MACD Cross Up", group = "Alerts", inline="Alert10")
alert_Short   = input.bool(true, title = "MACD Cross Dn", group = "Alerts", inline="Alert10")
alert_Long_A  = input.bool(false, title = "MACD Cross Up & > 0", group = "Alerts", inline="Alert20")
alert_Short_B = input.bool(false, title = "MACD Cross Dn & < 0", group = "Alerts", inline="Alert20")
// Calculating
fast_ma = request.security(syminfo.tickerid, res, sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length))
slow_ma = request.security(syminfo.tickerid, res, sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length))
macd = fast_ma - slow_ma
signal = request.security(syminfo.tickerid, res, sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length))
hist = macd - signal
// MACD Trend and Cross Up/Down conditions
trend_up   = macd > signal
trend_dn   = macd < signal
cross_UP   = signal[1] >= macd[1] and signal < macd
cross_DN   = signal[1] <= macd[1] and signal > macd
cross_UP_A = (signal[1] >= macd[1] and signal < macd) and macd > 0
cross_DN_B = (signal[1] <= macd[1] and signal > macd) and macd < 0
// Condition that changes Color of MACD Line if Show Trend is turned on..
trend_col = show_trend  and trend_up ? col_trnd_Up : trend_up ? col_macd : show_trend  and trend_dn ? col_trnd_Dn: trend_dn ? col_macd : na 

//Var Statements for Histogram Color Change
var bool histA_IsUp = false
var bool histA_IsDown = false
var bool histB_IsDown = false
var bool histB_IsUp = false
histA_IsUp   := hist == hist[1] ? histA_IsUp[1] : hist > hist[1] and hist > 0
histA_IsDown := hist == hist[1] ? histA_IsDown[1] : hist < hist[1] and hist > 0
histB_IsDown := hist == hist[1] ? histB_IsDown[1] : hist < hist[1] and hist <= 0
histB_IsUp   := hist == hist[1] ? histB_IsUp[1] : hist > hist[1] and hist <= 0

hist_col =  histA_IsUp ? col_grow_above : histA_IsDown ? col_fall_above : histB_IsDown ? col_grow_below : histB_IsUp ? col_fall_below :color.silver 

// Plot Statements
//Background Color
bgcolor(show_cross and cross_UP ? col_trnd_Up : na, editable=false)
bgcolor(show_cross and cross_DN ? col_trnd_Dn : na, editable=false)
//Highlight Price Bars
barcolor(show_HB and trend_up ? col_trnd_Up : na, title="Trend Up", offset = 0, editable=false)
barcolor(show_HB and trend_dn ? col_trnd_Dn : na, title="Trend Dn", offset = 0, editable=false)
//Regular Plots
plot(show_Hist and hist ? hist : na, title="Histogram", style=plot.style_columns, color=color.new(hist_col ,0),linewidth=show_hist_LW)
plot(show_macd  and signal ? signal : na, title="Signal", color=color.new(col_signal, 0),  style=plot.style_line ,linewidth=show_signal_LW)
plot(show_macd  and macd ? macd : na, title="MACD", color=color.new(trend_col, 0),  style=plot.style_line ,linewidth=show_macd_LW)
hline(0, title="0 Line", color=color.new(color.gray, 0), linestyle=hline.style_dashed, linewidth=1, editable=false)
plot(show_dots and cross_UP ? macd : na, title="Dots", color=color.new(trend_col ,0), style=plot.style_circles, linewidth=show_dots_LW, editable=false)
plot(show_dots and cross_DN ? macd : na, title="Dots", color=color.new(trend_col ,0), style=plot.style_circles, linewidth=show_dots_LW, editable=false)

//Alerts
if alert_Long and cross_UP
    alert("Symbol = (" + syminfo.tickerid + ") TimeFrame = (" + timeframe.period + ") Current Price (" + str.tostring(close) + ") MACD Crosses Up.", alert.freq_once_per_bar_close)

if alert_Short and cross_DN
    alert("Symbol = (" + syminfo.tickerid + ") TimeFrame = (" + timeframe.period + ") Current Price (" + str.tostring(close) + ") MACD Crosses Down.", alert.freq_once_per_bar_close)
//Alerts - Stricter Condition - Only Alerts When MACD Crosses UP & MACD > 0 -- Crosses Down & MACD < 0
if alert_Long_A and cross_UP_A
    alert("Symbol = (" + syminfo.tickerid + ") TimeFrame = (" + timeframe.period + ") Current Price (" + str.tostring(close) + ") MACD > 0 And Crosses Up.", alert.freq_once_per_bar_close)

if alert_Short_B and cross_DN_B
    alert("Symbol = (" + syminfo.tickerid + ") TimeFrame = (" + timeframe.period + ") Current Price (" + str.tostring(close) + ") MACD < 0 And Crosses Down.", alert.freq_once_per_bar_close)


if (histA_IsUp)
	strategy.entry("buy", strategy.long, comment="buy")
if (histA_IsDown)
	strategy.entry("sell", strategy.short, comment="sell")