Esta estrategia calcula el indicador MACD y su histograma MACD para detectar señales de divergencia entre el histograma MACD y el movimiento del precio, generando así señales de negociación. Cuando se detecta un nuevo máximo en el precio pero no se detecta ningún nuevo máximo en el histograma MACD, se genera una señal de divergencia bajista. Cuando se detecta un nuevo mínimo en el precio pero no se detecta ningún nuevo mínimo en el histograma MACD, se genera una señal de divergencia alcista. Combinado con el indicador ATR para detener pérdidas y obtener ganancias, realiza operaciones siguiendo la tendencia.
El principio básico de esta estrategia es utilizar el indicador MACD y su histograma MACD para reflejar los cambios en las tendencias de precios y detectar señales de divergencia entre el histograma MACD y el precio como condición de activación de las señales de negociación.
Específicamente, la estrategia primero calcula la línea MACD, la línea de señal y el histograma MACD. Luego, definiendo la función fractal para detectar picos y valles del histograma MACD para extraer máximos y mínimos locales. Combinado con el precio más alto y el precio más bajo, determina si existe una divergencia entre el histograma MACD y el precio.
Cuando el precio alcanza un nuevo máximo pero el histograma MACD no alcanza un nuevo máximo, se genera una señal de divergencia bajista regular_bearish_div. Cuando el precio cae a un nuevo mínimo pero el histograma MACD no cae a un nuevo mínimo, se genera una señal de divergencia alcista regular_bullish_div.
Por último, cuando se generan señales de divergencia bajista y alcista, la estrategia emite órdenes cortas y largas, respectivamente, y sale de las posiciones con ATR stop loss y take profit.
Esta estrategia tiene las siguientes ventajas:
Mediante la utilización de la característica de divergencia entre el histograma MACD y el precio, puede capturar los giros en las tendencias de precios temprano.
Los ajustes de stop loss y take profit de ATR son razonables para controlar eficazmente la pérdida máxima por operación.
El uso del método de seguimiento de tendencias puede maximizar el beneficio bloqueado.
La configuración de parámetros razonables filtra algunas señales comerciales ruidosas.
La lógica de la estrategia es clara y fácil de entender, fácil de validar en el comercio en vivo.
Esta estrategia también tiene algunos riesgos:
La divergencia del MACD no conduce necesariamente a una reversión de precios, existen algunos riesgos de señal falsa.
Los ajustes de stop loss y take profit no razonables pueden dar lugar a pérdidas excesivas o ganancias insuficientes.
Las señales de divergencia con ciclos cortos pueden ser causadas por ruido y deben filtrarse adecuadamente.
Los productos comerciales incompatibles y la configuración de parámetros también afectarán el rendimiento de la estrategia.
Soluciones correspondientes:
Aumentar los requisitos de longitud y magnitud de la divergencia para filtrar las señales falsas.
En el caso de las operaciones de negociación, el valor de las operaciones de negociación se calculará en función de las operaciones de negociación.
Seleccione diferentes parámetros para diferentes productos comerciales. Realice la optimización de parámetros para encontrar combinaciones óptimas de parámetros.
Esta estrategia también puede optimizarse en las siguientes direcciones:
Confirmación de divergencia más compleja, como la confirmación de divergencia de volumen.
Optimizar los parámetros MACD para encontrar la mejor combinación de parámetros.
Optimice los múltiplos de ATR stop loss y take profit.
Añadir algoritmos de aprendizaje automático para ayudar a juzgar la fiabilidad de las señales de divergencia.
Añadir la predicción del modelo para determinar la probabilidad de reversión de precios.
Ajustar dinámicamente los parámetros de la estrategia de acuerdo con los cambios en las condiciones del mercado.
En resumen, esta estrategia de seguimiento de tendencia de la divergencia del MACD de Candlestick Demigod utiliza la divergencia entre el histograma del MACD y el precio para capturar tendencias. Las configuraciones razonables de stop loss y take profit de ATR pueden controlar los riesgos por comercio. La lógica de la estrategia es clara y fácil de entender, vale la pena validarla en el comercio en vivo. Se pueden hacer optimizaciones de seguimiento en muchos aspectos para obtener mejores resultados.
/*backtest start: 2024-01-04 00:00:00 end: 2024-02-03 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © bigwin_sun // copyright: Tradingvue Limited //@version = 5 strategy(title = "Demigod : CDMA histogram Divergence strategy", shorttitle = "Demigod strategy", overlay = false, pyramiding = 100) //macd input fastMA = input.int(13, title = "fast Length", minval = 1, group = "CDMA") slowMA = input.int(34, title = "slow Length", minval = 1, group = "CDMA") src = input.source(title = "source", defval = close, group = "CDMA") signalSmooth = input.int(9, title="ma Length", minval = 1, group = "CDMA") //Divergenc divLength = input.int(title = "Divergenc Length", defval = 5, minval = 1, maxval = 50, inline = "ATRLength", group = "Divergence") divStren = input.float(title="Divergenc Strength", defval = 2, minval = 1.0, maxval = 5.0, inline = "ATRLength", group = "Divergence") //atr input atrLength = input.int(13, title = "ATR Length", minval = 1, inline = "ATRLength", group = "ATR") m = input.float(1.0, "ATR multyple", minval = 0.5, inline = "ATRLength", group = "ATR", step = 0.5) collong = input.color(color.teal, title = "upper color", inline = "ATR显示", group = "ATR") colshort = input.color(color.red, title = "under color", inline = "ATR显示", group = "ATR") // MACD--------------------------------------------------------------------------------------------------------------------------------- DivOffset = -2 macdLine = ta.ema(src, fastMA) - ta.ema(src, slowMA) signalLine = ta.ema(macdLine, signalSmooth) histogram = macdLine - signalLine histogramColor = if histogram > 0 histogram > histogram[1] ? color.lime : color.green else histogram < histogram[1] ? color.maroon : color.red // cdma histogram plot(histogram, title = "MACD histogram", linewidth = 2, style = plot.style_histogram, color = histogramColor) plot(0, title = "zero line", linewidth = 1, color = color.gray) // Divergenc calculation------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //peak / valley fundation f_top_fractal(_src)=>_src[4] < _src[2] and _src[3] < _src[2] and _src[2] > _src[1] and _src[2] > _src[0] and _src > 0 f_bot_fractal(_src)=>_src[4] > _src[2] and _src[3] > _src[2] and _src[2] < _src[1] and _src[2] < _src[0] and _src < 0 f_fractalize(_src)=>f_top_fractal(_src) ? 1 : f_bot_fractal(_src) ? -1 : 0 //peak / valley value fractal_top1 = f_fractalize(histogram) > 0 ? true : false //histogram[2] : na fractal_bot1 = f_fractalize(histogram) < 0 ? true : false //histogram[2] : na //previouse peak or valley high_prev1 = ta.valuewhen(fractal_top1, histogram[2], 0)[2] high_price1 = ta.valuewhen(fractal_top1, high[2], 0)[2] low_prev1 = ta.valuewhen(fractal_bot1, histogram[2], 0)[2] low_price1 = ta.valuewhen(fractal_bot1, low[2], 0)[2] //Divergenc : cdma histogram against candle value regular_bearish_div1 = high[2] > high_price1 + divStren and histogram[2] < high_prev1 / divStren and ta.barssince(fractal_top1[1]) > divLength regular_bullish_div1 = low[2] < low_price1 - divStren and histogram[2] > low_prev1 / divStren and ta.barssince(fractal_bot1[1]) > divLength //-------------------------cdma Divergenc range------------------------------------------------ //histogramColor col1 = regular_bearish_div1 ? color.red : na col2 = regular_bullish_div1 ? #00FF00EB : na //plot plot(title='看跌背离', series= fractal_top1 ? histogram[2] : na, color=col1, linewidth=3, offset=DivOffset) plot(title='看涨背离', series= fractal_bot1 ? histogram[2] : na, color=col2, linewidth=3, offset=DivOffset) // calculate ATR -------------------------------------------------------------------------------------------------------------------------------------------------- atr = ta.ema(ta.tr(true), atrLength) * m up = atr + high dw = low - atr //stratety : enrty and exit--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- if regular_bearish_div1 and fractal_top1 //if regular_bullish_div1 and fractal_bot1 //label.new(bar_index, histogram[2], text = "Short", textcolor = color.white, color = color.gray, style = label.style_label_lower_left) strategy.entry("Short", strategy.short, qty = 1) strategy.exit("exitShort", "Short", stop = up, limit = dw - atr) if regular_bullish_div1 and fractal_bot1 //if regular_bearish_div1 and fractal_top1 //label.new(bar_index, histogram[2], text = "Long", textcolor = color.white, color = color.fuchsia, style = label.style_label_upper_left) strategy.entry("Long", strategy.long, qty = 1) strategy.exit("exitLong", "Long", stop = dw, limit = up + atr)