Esta estrategia es un sistema de negociación de avance de tendencia basado en múltiples filtros de indicadores técnicos. Combina múltiples indicadores técnicos, incluido el promedio móvil exponencial (EMA), el precio promedio ponderado por volumen (VWAP), el índice de fuerza relativa (RSI), el índice direccional promedio (ADX), etc., para filtrar las fallas a través de múltiples confirmaciones de señales y mejorar la precisión de la negociación. La estrategia también incorpora un juicio de tendencia de mayor marco de tiempo y emplea un esquema dinámico de stop-loss y take-profit basado en ATR para un control eficaz del riesgo.
La lógica central de la estrategia se basa en los siguientes elementos clave:
Esta estrategia construye un sistema de negociación relativamente completo a través de la sinergia de múltiples indicadores técnicos. Su principal ventaja radica en mejorar la precisión de la negociación a través de la confirmación de señales multidimensionales al tiempo que emplea métodos científicos de gestión de riesgos para proteger la seguridad del capital. Aunque existen ciertas limitaciones, a través de la optimización y mejora continuas, esta estrategia tiene el potencial de lograr retornos estables en la negociación real.
/*backtest start: 2024-11-19 00:00:00 end: 2024-12-18 08:00:00 period: 1h basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Trend-Filtered Scalping Strategy", overlay=true, shorttitle="TFSS") // Inputs emaShort = input.int(9, title="EMA Short", minval=1) emaLong = input.int(21, title="EMA Long", minval=1) rsiLength = input.int(14, title="RSI Length", minval=1) atrLength = input.int(14, title="ATR Length", minval=1) adxLength = input.int(20, title="ADX Length", minval=1) adxSmoothing = input.int(14, title="ADX Smoothing", minval=1) volMultiplier = input.float(1.5, title="Volume Spike Multiplier", minval=1.0) riskPercent = input.float(1, title="Risk % of Equity", minval=0.1, step=0.1) // Higher Time Frame for Trend Filter htfTimeframe = input.timeframe("15", title="Higher Time Frame") ema50HTF = request.security(syminfo.tickerid, htfTimeframe, ta.ema(close, 50)) // Indicators ema9 = ta.ema(close, emaShort) ema21 = ta.ema(close, emaLong) vwap = ta.vwap(close) rsi = ta.rsi(close, rsiLength) atr = ta.atr(atrLength) volAvg = ta.sma(volume, 10) // ADX Calculation with Smoothing [_, _, adx] = ta.dmi(adxLength, adxSmoothing) // Entry Conditions longCondition = (ta.crossover(ema9, ema21) and close > vwap and rsi > 55 and adx > 25 and close > ema50HTF and volume > volAvg * volMultiplier) shortCondition = (ta.crossunder(ema9, ema21) and close < vwap and rsi < 45 and adx > 25 and close < ema50HTF and volume > volAvg * volMultiplier) // Position Sizing Based on Risk % capitalPerTrade = (strategy.equity * (riskPercent / 100)) / atr longStop = close - 1.5 * atr longTarget = close + 3 * atr shortStop = close + 1.5 * atr shortTarget = close - 3 * atr // Entry Logic if longCondition and not strategy.opentrades strategy.entry("Long", strategy.long, qty=capitalPerTrade) strategy.exit("Exit Long", from_entry="Long", stop=longStop, limit=longTarget) if shortCondition and not strategy.opentrades strategy.entry("Short", strategy.short, qty=capitalPerTrade) strategy.exit("Exit Short", from_entry="Short", stop=shortStop, limit=shortTarget) // Alerts alertcondition(longCondition, title="Long Entry Alert", message="Long Condition Triggered!") alertcondition(shortCondition, title="Short Entry Alert", message="Short Condition Triggered!") // Plot Indicators plot(ema9, title="EMA 9", color=color.green) plot(ema21, title="EMA 21", color=color.red) plot(vwap, title="VWAP", color=color.blue) plot(ema50HTF, title="HTF EMA 50", color=color.purple) hline(55, "RSI Long Threshold", color=color.green) hline(45, "RSI Short Threshold", color=color.red)