
Эта стратегия представляет собой усовершенствованную торговую систему, основанную на индикаторе 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)