
Strategi ini ialah sistem perdagangan lanjutan berdasarkan penunjuk MACD (Moving Average Convergence Divergence) Ia menggabungkan isyarat MACD dengan pengurusan risiko dinamik untuk mencapai penyelesaian perdagangan yang komprehensif. Strategi ini bukan sahaja memfokuskan pada persilangan garis MACD dan garis isyarat, tetapi juga menggabungkan pengesahan histogram dan mengoptimumkan hasil dagangan melalui tetapan henti rugi dan untung yang fleksibel. Strategi ini menyediakan rangkaian penuh konfigurasi berparameter, membolehkannya menyesuaikan diri dengan persekitaran pasaran dan keperluan dagangan yang berbeza.
Logik teras strategi dibina di atas tiga tiang utama:
Strategi ini mewujudkan sistem perdagangan yang teguh dengan menggabungkan penunjuk MACD klasik dengan kaedah pengurusan risiko moden. Kelebihannya terletak pada mekanisme pengesahan isyarat yang sempurna, pengurusan risiko yang fleksibel, dan kebolehlarasan parameter yang kuat, menjadikannya sesuai untuk persekitaran pasaran yang berbeza. Melalui arahan pengoptimuman yang dicadangkan, masih terdapat ruang untuk penambahbaikan strategi selanjutnya. Walau bagaimanapun, pengguna perlu memberi perhatian kepada mengawal risiko, mengelakkan pengoptimuman yang berlebihan, dan membuat pelarasan yang sesuai berdasarkan persekitaran dagangan sebenar.
/*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)