Esta estrategia combina el indicador del canal de Donchian y el indicador MACD para determinar la tendencia. Pertenece a una estrategia típica de seguimiento de tendencia. Va largo cuando el precio rompe la banda superior y el MACD muestra cruz de oro, y va corto cuando el precio rompe la banda inferior y el MACD muestra cruz de muerte. El indicador ATR se utiliza para calcular el stop loss.
Calcular el indicador MACD, incluidas las líneas rápida, lenta e histograma.
Calcule las bandas superior e inferior del Canal de Donchian. La banda superior es el precio más alto durante N días, la banda inferior es el precio más bajo durante N días.
Cuando el precio rompe la banda superior, y la línea rápida MACD cruza por encima de la línea lenta, ir largo.
Cuando el precio rompe la banda inferior, y la línea rápida del MACD cruza por debajo de la línea lenta, vaya corto.
En el caso de los instrumentos financieros, se utilizará el indicador ATR para calcular el stop loss para esta estrategia, que se establece en el valor ATR multiplicado por un coeficiente del precio actual.
Cierre la posición cuando aparezca una señal de marcha atrás.
Esta estrategia combina indicadores de juicio de tendencia e indicadores de canal, que pueden rastrear efectivamente las tendencias. El indicador MACD juzga la tendencia y el impulso del precio. El canal Donchian juzga la dirección. El stop loss ATR limita la pérdida por operación.
Las ventajas son:
La estrategia es simple con pocos parámetros, fácil de implementar.
Puede abrir posiciones a lo largo de la tendencia y capturar oportunidades de tendencia a tiempo.
El ATR detiene las pérdidas y controla el riesgo.
El descenso puede controlarse hasta cierto punto.
También hay algunos riesgos:
La configuración incorrecta de los parámetros del canal de Donchian puede causar señales falsas.
Los parámetros MACD incorrectos también pueden dar lugar a señales rezagadas.
Si el valor de las pérdidas de detención es demasiado amplio, puede dar lugar a pérdidas ampliadas.
Una fuerte reversión del mercado puede llevar a una gran pérdida.
La estrategia tiende a hacer excesos.
Soluciones:
Optimice los parámetros, seleccione las existencias con cuidado.
Detención de pérdida estricta, detener pérdida.
Ajuste el tamaño de la posición adecuadamente.
La estrategia se puede optimizar en los siguientes aspectos:
Optimizar los parámetros del MACD para mejorar la sensibilidad.
Optimice el algoritmo de stop loss para acercarlo al precio.
Añadir el mecanismo de dimensionamiento de la posición de acuerdo con la fuerza de la tendencia.
Añadir filtros para evitar señales falsas.
Añadir criterios de selección para los instrumentos de negociación.
Añadir el juicio del período de tiempo de negociación.
En resumen, esta es una estrategia típica de seguimiento de tendencias. Combina el canal Donchian para la dirección de la tendencia y el MACD para la fuerza de la tendencia. Puede seguir la tendencia de manera efectiva y controlar el riesgo. Al optimizar los parámetros, el stop loss, el tamaño de la posición, etc., se puede mejorar aún más la estabilidad y la rentabilidad. La estrategia es adecuada para los inversores que requieren una alta precisión en el juicio de tendencias.
/*backtest start: 2023-10-15 00:00:00 end: 2023-11-14 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/ // © Robrecht99 //@version=5 strategy("Trend Following with Donchian Channels and MACD", overlay=false, margin_long=100, margin_short=100, pyramiding=3) // MACD // fast_length = input(title="Fast Length", defval=12) slow_length = input(title="Slow Length", defval=26) src = input(title="Source", defval=close) signal_length = input.int(title="Signal Smoothing", minval = 1, maxval = 50, 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"]) col_macd = input(#2962FF, "MACD Line ", group="Color Settings", inline="MACD") col_signal = input(#FF6D00, "Signal Line ", group="Color Settings", inline="Signal") col_grow_above = input(#26A69A, "Above Grow", group="Histogram", inline="Above") col_fall_above = input(#B2DFDB, "Fall", group="Histogram", inline="Above") col_grow_below = input(#FFCDD2, "Below Grow", group="Histogram", inline="Below") col_fall_below = input(#FF5252, "Fall", group="Histogram", inline="Below") fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length) slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length) macd = fast_ma - slow_ma signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.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))) plot(macd, title="MACD", color=col_macd) plot(signal, title="Signal", color=col_signal) // Donchian Channels // Length1 = input.int(title="Length Upper Channel", defval=50, minval=1, group="Donchian Channels Inputs") Length2 = input.int(title="Length Lower Channel", defval=50, minval=1, group="Donchian Channels Inputs") h1 = ta.highest(high[1], Length1) l1 = ta.lowest(low[1], Length2) fillColor = input.color(color.new(color.purple, 95), title = "Fill Color", group = "Donchian Channels Inputs") upperColor = input.color(color.new(color.orange, 0), title = " Color Upper Channel", group = "Donchian Channels Inputs", inline = "upper") lowerColor = input.color(color.new(color.orange, 0), title = " Color Lower Channel", group = "Donchian Channels Inputs", inline = "lower") u = plot(h1, "Upper", color=upperColor) l = plot(l1, "Lower", color=upperColor) fill(u, l, color=fillColor) //ATR and Position Size // strategy.initial_capital = 50000 length = input.int(title="ATR Period", defval=14, minval=1, group="ATR Inputs") risk = input(title="Risk Per Trade", defval=0.01, group="ATR Inputs") multiplier = input(title="ATR Multiplier", defval=2, group="ATR Inputs") atr = ta.atr(length) amount = (risk * strategy.initial_capital / (multiplier * atr)) // Buy and Sell Conditions // entrycondition1 = ta.crossover(macd, signal) entrycondition2 = macd > signal entrycondition3 = macd and signal > hist sellcondition1 = ta.crossover(signal, macd) sellcondition2 = signal > macd sellcondition3 = macd and signal < hist // Buy and Sell Signals // if (close > h1 and entrycondition2 and entrycondition3) strategy.entry("long", strategy.long, qty=amount) stoploss = close - atr * 4 strategy.exit("exit sl", stop=stoploss, trail_offset=stoploss) if (sellcondition1 and sellcondition2 and sellcondition3) strategy.close(id="long") if (close < l1 and sellcondition2 and sellcondition3) strategy.entry("short", strategy.short, qty=amount) stoploss = close + atr * 4 strategy.exit("exit sl", stop=stoploss, trail_offset=stoploss) if (entrycondition1 and entrycondition2 and entrycondition3) strategy.close(id="short")