
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.
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:
El punto de intersección:
El gráfico rectangular muestra el cambio de color para determinar la intensidad de la tendencia:
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
Los indicadores MACD ayudan a determinar las tendencias y la intensidad a corto plazo para aumentar la probabilidad de obtener ganancias
Los cambios de color en el diagrama vertical determinan el tamaño de la intensidad, lo que permite un mejor momento de entrada
El color de fondo de las marcas de puntos cruzados, a primera vista
Período medíocre personalizable para adaptarse a diferentes entornos del mercado
Se pueden ajustar los parámetros MACD para optimizar el efecto del indicador
Ofrece varias formas de confirmación de entrada: dirección de la línea media, cruce de indicadores, ruptura de forma
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.
Los parámetros del MACD están mal configurados, el indicador no funciona bien y emite una señal errónea
Hay cierta ceguera con sólo el ingreso de la línea media y la señal MACD
No se ha considerado el mecanismo de suspensión de pérdidas y existe el riesgo de que las pérdidas aumenten
Falta de estricta gestión de fondos y control de posiciones
Soluciones posibles:
En combinación con otros indicadores para limitar el rango de fluctuación a corto plazo y controlar el riesgo
Optimización de los parámetros MACD para probar el efecto en diferentes mercados
Aumentar las señales de confirmación por factores como la forma y el momento
Establecer mecanismos de detención de pérdidas para evitar pérdidas excesivas
Adición de un módulo de administración de fondos para controlar las posiciones individuales según el tamaño de los fondos
Prueba de combinaciones de parámetros de línea media optimizadas para adaptarse a más situaciones de mercado
Prueba diferentes tipos de línea media, como VWAP, línea media de banda ancha, etc.
Aumentar el volumen de tráfico y evitar falsas brechas
Indicadores como el RSI confirman el exceso de compra y venta
Establecer mecanismos de detención de pérdidas, tales como detención de movimiento, detención de vibraciones, etc.
Unirse a un mecanismo de gestión de posiciones para controlar las posiciones individuales en función del tamaño de los fondos
Se puede considerar la optimización de parámetros en combinación con algoritmos de aprendizaje automático
Expansión de la estrategia Universe y profundización de las direcciones de inversión de la cartera
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.
/*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")