이 전략은 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)