
Cette stratégie est un système de trading avancé basé sur l’indicateur MACD (Moving Average Convergence Divergence). Il combine les signaux MACD avec une gestion dynamique des risques pour obtenir une solution de trading complète. Cette stratégie ne se concentre pas uniquement sur le croisement de la ligne MACD et de la ligne de signal, mais combine également la confirmation de l’histogramme et optimise les résultats de trading grâce à des paramètres flexibles de stop loss et de profit. La stratégie offre une gamme complète de configurations paramétrées, lui permettant de s’adapter à différents environnements de marché et besoins de trading.
La logique fondamentale de la stratégie repose sur trois piliers principaux :
Cette stratégie crée un système de trading robuste en combinant l’indicateur MACD classique avec des méthodes modernes de gestion des risques. Ses avantages résident dans son mécanisme parfait de confirmation du signal, sa gestion flexible des risques et sa forte capacité d’ajustement des paramètres, ce qui le rend adapté à différents environnements de marché. Grâce aux orientations d’optimisation suggérées, il existe encore une marge d’amélioration de la stratégie. Toutefois, les utilisateurs doivent prêter attention au contrôle des risques, éviter la suroptimisation et procéder aux ajustements appropriés en fonction de l’environnement commercial réel.
/*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)