
Esta estratégia é um sistema de negociação avançado baseado no indicador MACD (Moving Average Convergence Divergence). Ele combina sinais MACD com gerenciamento de risco dinâmico para atingir uma solução de negociação abrangente. Essa estratégia não se concentra apenas no cruzamento da linha MACD e da linha de sinal, mas também combina a confirmação do histograma e otimiza os resultados de negociação por meio de configurações flexíveis de stop loss e lucro. A estratégia fornece uma gama completa de configurações parametrizadas, permitindo que ela se adapte a diferentes ambientes de mercado e necessidades de negociação.
A lógica central da estratégia é construída em três pilares principais:
Essa estratégia cria um sistema de negociação robusto ao combinar o indicador MACD clássico com métodos modernos de gerenciamento de risco. Suas vantagens estão em seu mecanismo de confirmação de sinal perfeito, gerenciamento de risco flexível e forte ajustabilidade de parâmetros, tornando-o adequado para diferentes ambientes de mercado. Por meio das direções de otimização sugeridas, ainda há espaço para melhorias adicionais na estratégia. No entanto, os usuários precisam prestar atenção ao controle de riscos, evitar otimização excessiva e fazer ajustes apropriados com base no ambiente de negociação real.
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Estrategia MACD", overlay=true)
// Parámetros entrada
direccion = input.string("ambas", "Dirección de operaciones", options=["larga", "corta", "ambas"])
velas_sl = input.int(3, "Velas para calcular Stop Loss", minval=1)
ratio = input.float(1.5, "Ratio Beneficio:Riesgo", minval=0.5)
rapida = input.int(12, "Periodo Media Rápida")
lenta = input.int(26, "Periodo Media Lenta")
senal = input.int(9, "Periodo Señal")
// Calcular MACD
[macdLinea, senalLinea, histograma] = ta.macd(close, rapida, lenta, senal)
// Señales
senal_larga = ta.crossover(macdLinea, senalLinea) and histograma > 0
senal_corta = ta.crossunder(macdLinea, senalLinea) and histograma < 0
// Gestión de riesgo
calcular_sl_largo() => ta.lowest(low, velas_sl)
calcular_sl_corto() => ta.highest(high, velas_sl)
calcular_tp(entrada, sl, es_larga) =>
distancia = math.abs(entrada - sl)
es_larga ? entrada + (distancia * ratio) : entrada - (distancia * ratio)
// Operaciones
sl_largo = calcular_sl_largo()
sl_corto = calcular_sl_corto()
if (direccion != "corta" and senal_larga and strategy.position_size == 0)
entrada = close
tp = calcular_tp(entrada, sl_largo, true)
strategy.entry("Larga", strategy.long)
strategy.exit("Salida Larga", "Larga", stop=sl_largo, limit=tp)
if (direccion != "larga" and senal_corta and strategy.position_size == 0)
entrada = close
tp = calcular_tp(entrada, sl_corto, false)
strategy.entry("Corta", strategy.short)
strategy.exit("Salida Corta", "Corta", stop=sl_corto, limit=tp)
// Visualización
plotshape(senal_larga and direccion != "corta", "Compra", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.normal)
plotshape(senal_corta and direccion != "larga", "Venta", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.normal)