Esta estrategia es una estrategia de trading cuantitativa basada en cruces de promedios móviles y dinámicos ATR stop loss y take profit. La estrategia utiliza dos promedios móviles simples (SMA) con diferentes períodos para generar señales de trading mientras emplea el Average True Range (ATR) para establecer dinámicamente los niveles de stop loss y take profit para un mejor control de riesgos. Además, la estrategia filtra las señales de trading basadas en diferentes sesiones de trading para mejorar su robustez.
El principio básico de esta estrategia es capturar los cambios en las tendencias de precios utilizando cruces de promedios móviles. Cuando el promedio móvil rápido cruza por encima del promedio móvil lento, se genera una señal de compra; a la inversa, cuando el promedio móvil rápido cruza por debajo del promedio móvil lento, se genera una señal de venta. Al mismo tiempo, la estrategia utiliza ATR para establecer dinámicamente los niveles de stop loss y take profit. El nivel de take profit se establece en el precio de entrada más 3 veces el ATR, mientras que el nivel de stop loss se establece en el precio de entrada menos 1.5 veces el ATR. Además, la estrategia solo genera señales comerciales durante la sesión de negociación europea para evitar negociar durante períodos de baja liquidez.
Esta estrategia es una estrategia de seguimiento de tendencias simple y fácil de entender que captura las tendencias de precios utilizando cruces de promedios móviles mientras controla el riesgo con ATR. Aunque la estrategia tiene ciertos riesgos, se puede mejorar aún más a través de la optimización de parámetros, el filtrado de señales y las mejoras en la gestión de riesgos.
/*backtest start: 2024-04-01 00:00:00 end: 2024-04-30 23:59:59 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Enhanced Moving Average Crossover Strategy", overlay=true) // Input parameters fastLength = input(10, title="Fast MA Length") slowLength = input(50, title="Slow MA Length") atrLength = input(14, title="ATR Length") riskPerTrade = input(1, title="Risk Per Trade (%)") / 100 // Time-based conditions isLondonSession = hour >= 8 and hour <= 15 isAsianSession = hour >= 0 and hour <= 7 isEuropeanSession = hour >= 7 and hour <= 14 // Moving Averages fastMA = ta.sma(close, fastLength) slowMA = ta.sma(close, slowLength) // Average True Range (ATR) for dynamic stop loss and take profit atr = ta.atr(atrLength) // Buy and Sell Conditions buySignal = ta.crossover(fastMA, slowMA) sellSignal = ta.crossunder(fastMA, slowMA) // Dynamic stop loss and take profit stopLoss = close - atr * 1.5 takeProfit = close + atr * 3 // Strategy Logic if (buySignal and isEuropeanSession) strategy.entry("Buy", strategy.long) strategy.exit("Take Profit/Stop Loss", "Buy", limit=takeProfit, stop=stopLoss) if (sellSignal and isEuropeanSession) strategy.entry("Sell", strategy.short) strategy.exit("Take Profit/Stop Loss", "Sell", limit=takeProfit, stop=stopLoss) // Plotting plot(fastMA, color=color.blue, title="Fast MA") plot(slowMA, color=color.red, title="Slow MA") plotshape(series=buySignal, location=location.belowbar, color=color.green, style=shape.labelup, text="BUY") plotshape(series=sellSignal, location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")