Esta estrategia es una estrategia de comercio de alta frecuencia basada en un marco de tiempo de 15 minutos. Combina múltiples indicadores técnicos, incluidos el promedio móvil exponencial (EMA), el índice de fuerza relativa (RSI), el índice direccional promedio (ADX) y el rango verdadero promedio (ATR), para lograr una captura precisa de señales comerciales y una gestión dinámica del riesgo. La estrategia cuenta con un diseño de visualización claro para monitorear en tiempo real las condiciones del mercado y las señales comerciales.
La lógica básica se basa en el cruce de EMA rápido (9 períodos) y EMA lento (21 períodos) para generar señales comerciales. RSI (14 períodos) filtra zonas de sobrecompra / sobreventa, ADX (14 períodos) confirma la fuerza de la tendencia, y ATR (14 períodos) establece dinámicamente los niveles de stop-loss y take-profit. La combinación de múltiples indicadores técnicos asegura la fiabilidad de la señal. Las condiciones de entrada incluyen: Long - fast EMA cruza por encima de EMA lento con RSI por debajo de 70 y ADX por encima de 20; Short - fast EMA cruza por debajo de EMA lento con RSI por encima de 30 y ADX por encima de 20.
La estrategia logra un equilibrio entre la captura de señales y el control de riesgos en el comercio de alta frecuencia a través de la sinergia de múltiples indicadores técnicos. El diseño de visualización claro y el soporte integral de automatización lo hacen altamente práctico. A través de la optimización continua y las mejoras en la gestión de riesgos, la estrategia muestra la promesa de un rendimiento estable en diferentes entornos de mercado. Si bien existen riesgos, pueden controlarse a través de la configuración adecuada de parámetros y medidas de control de riesgos.
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-25 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Scalping BTC Ottimizzato - Grafica Chiara", shorttitle="Scalp BTC Opt", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10) // === 📊 INPUTS === // 📈 Medie Mobili emaFastLength = input.int(9, title="EMA Veloce", minval=1) emaSlowLength = input.int(21, title="EMA Lenta", minval=1) // 💡 RSI rsiLength = input.int(14, title="RSI Length", minval=1) rsiOverbought = input.int(70, title="RSI Overbought") rsiOversold = input.int(30, title="RSI Oversold") // 📊 ATR (Stop Loss e Take Profit) atrLength = input.int(14, title="ATR Length", minval=1) stopATR = input.float(1.5, title="Stop Loss (ATR Multiplo)", step=0.1) takeProfitATR = input.float(2.0, title="Take Profit (ATR Multiplo)", step=0.1) // 🔀 ADX adxLength = input.int(14, title="ADX Length", minval=1) adxSmoothing = input.int(14, title="ADX Smoothing", minval=1) adxThreshold = input.int(20, title="Soglia ADX per Trend Forte", minval=1) // === 📊 CALCOLI PRINCIPALI === // 📈 Medie Mobili emaFast = ta.ema(close, emaFastLength) emaSlow = ta.ema(close, emaSlowLength) // 💡 RSI rsi = ta.rsi(close, rsiLength) // 📊 ATR atr = ta.atr(atrLength) // 🔀 ADX tramite DMI con Smoothing [adx, diPlus, diMinus] = ta.dmi(adxLength, adxSmoothing) // === 📊 CONDIZIONI LONG E SHORT === // ✅ Long: EMA Veloce incrocia EMA Lenta al rialzo, RSI sotto 70, ADX > 20 longCondition = (ta.crossover(emaFast, emaSlow)) and (rsi < rsiOverbought) and (adx > adxThreshold) // 🔻 Short: EMA Veloce incrocia EMA Lenta al ribasso, RSI sopra 30, ADX > 20 shortCondition = (ta.crossunder(emaFast, emaSlow)) and (rsi > rsiOversold) and (adx > adxThreshold) // 📉 Stop Loss e Take Profit Dinamici longStop = strategy.position_avg_price - (atr * stopATR) longTarget = strategy.position_avg_price + (atr * takeProfitATR) shortStop = strategy.position_avg_price + (atr * stopATR) shortTarget = strategy.position_avg_price - (atr * takeProfitATR) // === 🚀 INGRESSO E USCITA === // 🚦 Ingresso LONG if (longCondition and strategy.position_size == 0) strategy.entry("Long", strategy.long) strategy.exit("TakeProfit/StopLoss Long", stop=longStop, limit=longTarget) // 🚦 Ingresso SHORT if (shortCondition and strategy.position_size == 0) strategy.entry("Short", strategy.short) strategy.exit("TakeProfit/StopLoss Short", stop=shortStop, limit=shortTarget) // 🛑 USCITA MANUALE BASATA SU RSI if (rsi > rsiOverbought and strategy.position_size > 0) strategy.close("Long", comment="RSI Overbought Exit") if (rsi < rsiOversold and strategy.position_size < 0) strategy.close("Short", comment="RSI Oversold Exit") // === 📊 VISUALIZZAZIONE GRAFICA OTTIMIZZATA === // 📈 MEDIE MOBILI ANCORATE ALLE CANDELE plot(emaFast, title="EMA Veloce", color=color.blue, linewidth=2) plot(emaSlow, title="EMA Lenta", color=color.red, linewidth=2) // 📊 SEGNALI VISIVI ANCORATI ALLE CANDELE plotshape(longCondition, title="Segnale Long", style=shape.triangleup, location=location.belowbar, color=color.green, text="Long", size=size.small) plotshape(shortCondition, title="Segnale Short", style=shape.triangledown, location=location.abovebar, color=color.red, text="Short", size=size.small) // 📊 RSI (Pannello Separato) var float rsiPanel = na rsiPanel := rsi plot(rsiPanel, title="RSI", color=color.orange, linewidth=2) hline(rsiOverbought, "RSI Overbought", color=color.red, linestyle=hline.style_dotted) hline(rsiOversold, "RSI Oversold", color=color.green, linestyle=hline.style_dotted) // 📊 ADX (Pannello Separato) var float adxPanel = na adxPanel := adx plot(adxPanel, title="ADX", color=color.blue, linewidth=2) hline(adxThreshold, "ADX Soglia", color=color.gray, linestyle=hline.style_dotted) // 📊 ATR (Pannello Separato) var float atrPanel = na atrPanel := atr plot(atrPanel, title="ATR", color=color.purple, linewidth=2) // 🔔 ALERT alertcondition(longCondition, title="Segnale Long", message="Entra Long Manualmente!") alertcondition(shortCondition, title="Segnale Short", message="Entra Short Manualmente!")