
이 전략은 MACD(Moving Average Convergence Divergence) 지표를 기반으로 한 고급 거래 시스템입니다. MACD 신호와 동적 위험 관리를 결합하여 포괄적인 거래 솔루션을 달성합니다. 이 전략은 MACD선과 신호선의 교차에만 초점을 맞추는 것이 아니라, 히스토그램 확인을 결합하고 유연한 손절매 및 수익 설정을 통해 거래 결과를 최적화합니다. 이 전략은 다양한 시장 환경과 거래 요구 사항에 적응할 수 있도록 다양한 매개변수화된 구성을 제공합니다.
전략의 핵심 논리는 세 가지 주요 기둥 위에 구축됩니다.
이 전략은 고전적인 MACD 지표와 현대적인 위험 관리 방법을 결합하여 강력한 거래 시스템을 만들어냅니다. 이 거래의 장점은 완벽한 신호 확인 메커니즘, 유연한 위험 관리, 강력한 매개변수 조정 기능을 갖추고 있어 다양한 시장 환경에 적합하다는 것입니다. 제안된 최적화 방향을 통해 전략을 더욱 개선할 수 있는 여지가 여전히 남아 있습니다. 그러나 사용자는 위험 관리에 주의를 기울여야 하며, 과도한 최적화는 피하고, 실제 거래 환경에 따라 적절한 조정을 해야 합니다.
/*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)