
Strategi ini merupakan sistem perdagangan canggih yang didasarkan pada indikator MACD (Moving Average Convergence Divergence). Sistem ini menggabungkan sinyal MACD dengan manajemen risiko dinamis untuk mencapai solusi perdagangan yang komprehensif. Strategi ini tidak hanya berfokus pada persilangan garis MACD dan garis sinyal, tetapi juga menggabungkan konfirmasi histogram dan mengoptimalkan hasil perdagangan melalui pengaturan stop loss dan profit yang fleksibel. Strategi ini menyediakan berbagai konfigurasi berparameter, yang memungkinkannya beradaptasi dengan berbagai lingkungan pasar dan kebutuhan perdagangan.
Logika inti dari strategi ini dibangun atas tiga pilar utama:
Strategi ini menciptakan sistem perdagangan yang kuat dengan menggabungkan indikator MACD klasik dengan metode manajemen risiko modern. Keunggulannya terletak pada mekanisme konfirmasi sinyal yang sempurna, manajemen risiko yang fleksibel, dan penyesuaian parameter yang kuat, sehingga cocok untuk lingkungan pasar yang berbeda. Melalui arahan pengoptimalan yang disarankan, masih ada ruang untuk perbaikan strategi lebih lanjut. Namun, pengguna perlu memperhatikan pengendalian risiko, menghindari optimalisasi berlebihan, dan membuat penyesuaian tepat berdasarkan lingkungan perdagangan aktual.
/*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)