Esta estrategia utiliza la cruz de oro y la cruz de muerte del indicador MACD para determinar la dirección de la tendencia, y utiliza el indicador ATR para detener la pérdida y obtener ganancias para implementar la tendencia después de la negociación.
Cuando la línea MACD cruza por encima de la línea de señal desde abajo y se vuelve positiva, se genera una señal de compra, que se llama la señal de cruz dorada, lo que indica una tendencia al alza en el precio de las acciones.
La estrategia simplemente va largo en cruces de oro y corta en cruces de muerte para seguir las tendencias. Al mismo tiempo, la estrategia también introduce el indicador ATR para calcular el stop loss y tomar los niveles de ganancia para construir el sistema de negociación.
Específicamente, la estrategia primero calcula el promedio móvil rápido, el promedio móvil lento, la diferencia MACD, la línea de señal y otros indicadores MACD estándar. Luego, sobre la base de uno de los cinco tipos de señal elegidos (señal de continuación, señal de inversión, señal de histograma, cruz cero MACD, cruz cero de línea de señal), se determinan cruces doradas y cruces de muerte. Finalmente, se establecen stop loss y take profit basados en el indicador ATR para completar la lógica de entrada y salida.
La estrategia tiene las siguientes ventajas:
El uso del indicador MACD para determinar la dirección de la tendencia es preciso y confiable.
La configuración de stop loss y take profit basada en el indicador ATR puede controlar eficazmente la relación riesgo-beneficio de operaciones individuales y reducir la probabilidad de pérdidas.
El suministro de cinco tipos de señales opcionales permite utilizar la señal más adecuada para diferentes mercados, mejorando la adaptabilidad de la estrategia.
Hay muchos parámetros de entrada ajustables que se pueden optimizar para un mejor rendimiento comercial.
También hay algunos riesgos con esta estrategia:
El indicador MACD puede generar fácilmente señales falsas y causar pérdidas innecesarias.
El indicador ATR solo modela las fluctuaciones del período reciente y no puede detener con precisión las pérdidas en condiciones extremas de mercado.
El rendimiento de las señales seleccionadas puede no ser estable.
Los parámetros de la señal y los parámetros de gestión del riesgo deben optimizarse conjuntamente, de lo contrario es difícil encontrar los resultados óptimos a nivel global.
La estrategia también puede optimizarse en los siguientes aspectos:
Pruebe otros promedios móviles como TMA, Hull MA, etc. para filtrar las señales MACD.
Pruebe mecanismos de parada dinámicos que puedan manejar mejor las fluctuaciones en condiciones extremas de mercado.
Optimice exhaustivamente los parámetros MACD tradicionales para encontrar mejores combinaciones.
Utilice métodos de aprendizaje automático para encontrar los múltiplos óptimos de ATR para una mejor gestión del riesgo.
Se realizará una prueba posterior de cada uno de los cinco tipos de señal por separado para determinar la señal óptima.
Entrenar redes neuronales para juzgar la calidad de la señal y descubrir nuevas señales basadas en el MACD.
La estrategia de seguimiento de la tendencia MACD utiliza el indicador MACD para determinar la dirección de la tendencia y establece stop loss y take profit con el indicador ATR, que puede capturar eficazmente las oportunidades de negociación de tendencia. La estrategia tiene múltiples ventajas como parámetros sintonizables, mecanismos completos de stop y tipos de señal opcionales. El siguiente paso es mejorar la calidad de la señal, los mecanismos de stop loss y la optimización de selección de parámetros para obtener mejores resultados de backtest y en vivo.
/*backtest start: 2023-11-21 00:00:00 end: 2023-12-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/ // © vuagnouxb //@version=4 strategy("BV's MACD SIGNAL TESTER", overlay=true) //------------------------------------------------------------------------ //---------- Confirmation Calculation ------------ INPUT //------------------------------------------------------------------------ // Getting inputs 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 // 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) ), transp=0 ) // plot(macd, title="MACD", color=col_macd, transp=0) // plot(signal, title="Signal", color=col_signal, transp=0) // -- Trade entry signals signalChoice = input(title = "Choose your signal", defval = "Continuation", options = ["Continuation", "Reversal", "Histogram", "MACD Line ZC", "Signal Line ZC"]) continuationSignalLong = signalChoice == "Continuation" ? crossover(macd, signal) and macd > 0 : signalChoice == "Reversal" ? crossover(macd, signal) and macd < 0 : signalChoice == "Histogram" ? crossover(hist, 0) : signalChoice == "MACD Line ZC" ? crossover(macd, 0) : signalChoice == "Signal Line ZC" ? crossover(signal, 0) : false continuationSignalShort = signalChoice == "Continuation" ? crossunder(macd, signal) and macd < 0 : signalChoice == "Reversal" ? crossover(signal, macd) and macd > 0 : signalChoice == "Histogram" ? crossunder(hist, 0) : signalChoice == "MACD Line ZC" ? crossunder(macd, 0) : signalChoice == "Signal Line ZC" ? crossunder(signal, 0) : false longCondition = continuationSignalLong shortCondition = continuationSignalShort //------------------------------------------------------------------------ //---------- ATR MONEY MANAGEMENT ------------ //------------------------------------------------------------------------ SLmultiplier = 1.5 TPmultiplier = 1 JPYPair = input(type = input.bool, title = "JPY Pair ?", defval = false) pipAdjuster = JPYPair ? 1000 : 100000 ATR = atr(14) * pipAdjuster // 1000 for jpy pairs : 100000 SL = ATR * SLmultiplier TP = ATR * TPmultiplier //------------------------------------------------------------------------ //---------- TIME FILTER ------------ //------------------------------------------------------------------------ YearOfTesting = input(title = "How many years of testing ?" , type = input.integer, defval = 3) _time = 2020 - YearOfTesting timeFilter = (year > _time) //------------------------------------------------------------------------ //--------- ENTRY FUNCTIONS ----------- INPUT //------------------------------------------------------------------------ if (longCondition and timeFilter) strategy.entry("Long", strategy.long) if (shortCondition and timeFilter) strategy.entry("Short", strategy.short) //------------------------------------------------------------------------ //--------- EXIT FUNCTIONS ----------- //------------------------------------------------------------------------ strategy.exit("ATR", from_entry = "Long", profit = TP, loss = SL) strategy.exit("ATR", from_entry = "Short", profit = TP, loss = SL)