
La estrategia determina la dirección de la tendencia a través de un marcador MACD, que se combina con el indicador ATR para hacer un stop loss y realizar operaciones de seguimiento de tendencias. La palabra “cortador de oro” en el nombre de la estrategia destaca la señal de “cortador de oro” con el indicador MACD.
Cuando la línea MACD cruza la línea Signal de abajo hacia arriba y se convierte en una señal de compra positiva, esta es la señal de la horca de oro, que indica la formación de una tendencia al alza en el precio de las acciones. Cuando la línea MACD cruza la línea Signal de arriba hacia abajo y se convierte en una señal de venta negativa, esta es la señal de la horca muerta, que indica la formación de una tendencia a la baja en el precio de las acciones.
La estrategia es utilizar este principio, hacer más en el momento de la horca de oro, hacer en blanco en el momento de la horca de muerte, para lograr el seguimiento de la tendencia. Al mismo tiempo, la estrategia también introduce el indicador ATR para calcular el stop loss para completar la construcción del sistema de negociación.
En concreto, la estrategia primero calcula los indicadores estándar de MACD, como promedios móviles rápidos, promedios móviles lentos, diferencias MACD y líneas de señal. Luego, en función de las cinco señales seleccionadas (signales de continuación, señales de inversión, señales de gráficos columnares, cruces de semiaje MACD, cruces de semiaje de señal) para juzgar la cruz de oro. Finalmente, en combinación con el indicador ATR, establece el stop loss, 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, y durante muchos años el indicador MACD ha destacado en el juicio de la tendencia.
La configuración de stop loss combinada con el indicador ATR permite controlar eficazmente el riesgo-rendimiento de una sola operación y reducir la probabilidad de pérdidas.
Ofrece cinco señales opcionales para que las estrategias puedan adaptarse mejor a los diferentes mercados.
Se pueden introducir más parámetros y obtener mejores resultados de transacción mediante la optimización de los parámetros.
La estrategia también tiene sus riesgos:
Los indicadores MACD son propensos a generar señales erróneas que pueden causar pérdidas innecesarias. Se pueden combinar con otras señales de filtración.
El indicador ATR solo modela la oscilación del período más reciente y no puede hacer un stop loss preciso para situaciones extremas. Se puede introducir un stop loss dinámico para resolverlo.
El efecto de la señal seleccionada puede ser inestable y requiere una gran cantidad de retroalimentación para determinar los parámetros óptimos.
Los parámetros de la señal y los parámetros de la gestión del riesgo necesitan ser optimizados simultáneamente, de lo contrario es difícil obtener resultados óptimos. Se recomienda el uso de un método de optimización progresiva.
La estrategia también puede ser optimizada en los siguientes aspectos:
Intentar otras medias móviles, como TMA, hullMA, etc., y filtrar las señales MACD.
El experimento de los mecanismos de detención de pérdidas dinámicas puede ayudar a manejar mejor las fluctuaciones de los extremos.
Optimización de la combinación de parámetros tradicionales del indicador MACD para encontrar el mejor parámetro.
Utilizando métodos de aprendizaje automático para encontrar los mejores multiplicadores de ATR y lograr una mejor gestión de riesgos.
Se realizó una retestada de los cinco tipos de señales para determinar la señal óptima.
Entrenar a las redes neuronales para juzgar el efecto de los tipos de señales y buscar nuevas señales basadas en MACD.
La estrategia de seguimiento de la tendencia de la horquilla de oro MACD, utiliza el indicador MACD para determinar la dirección de la tendencia, en combinación con el indicador ATR para detener los estorbos, para obtener oportunidades de comercio de tendencia de manera efectiva. La estrategia tiene varias ventajas, como la optimización de los parámetros del indicador, la integración del mecanismo de detención de pérdidas y el tipo de señal opcional. El siguiente trabajo se iniciará en la mejora de la calidad de la señal, la perfección del mecanismo de detención de pérdidas y la optimización de la selección de parámetros, para obtener mejores resultados de retroalimentación y registro real.
/*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)