Esta estrategia es un sistema de negociación cuantitativo que combina múltiples indicadores técnicos con una gestión dinámica del riesgo. Integra el seguimiento de la tendencia de la EMA, la volatilidad del ATR, las condiciones de sobrecompra/sobreventa del RSI y el reconocimiento de patrones de velas, logrando rendimientos equilibrados a través del tamaño adaptativo de las posiciones y mecanismos dinámicos de stop-loss.
La estrategia aplica el comercio a través de:
Este es un sistema de estrategia sofisticado que combina múltiples indicadores técnicos, mejorando la estabilidad de las operaciones a través de la gestión dinámica del riesgo y la validación de múltiples señales.
/*backtest start: 2024-10-01 00:00:00 end: 2024-10-31 23:59:59 period: 2h basePeriod: 2h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Optimized Scalping with High Risk-Reward", overlay=true) // Input for EMA periods shortEMA_length = input(5, title="Short EMA Length") longEMA_length = input(10, title="Long EMA Length") // ATR for dynamic stop-loss atrPeriod = input(14, title="ATR Period") atrMultiplier = input(1.5, title="ATR Multiplier for Stop Loss") // Calculate EMAs shortEMA = ta.ema(close, shortEMA_length) longEMA = ta.ema(close, longEMA_length) // ATR calculation for dynamic stop loss atr = ta.atr(atrPeriod) // RSI for overbought/oversold conditions rsi = ta.rsi(close, 14) // Plot EMAs plot(shortEMA, color=color.blue, title="Short EMA") plot(longEMA, color=color.red, title="Long EMA") // Dynamic Slippage based on ATR dynamic_slippage = math.max(5, atr * 0.5) // Candlestick pattern recognition bullish_engulfing = close[1] < open[1] and close > open and close > open[1] and close > close[1] hammer = close > open and (high - close) / (high - low) > 0.6 and (open - low) / (high - low) < 0.2 bearish_engulfing = open[1] > close[1] and open > close and open > open[1] and close < close[1] shooting_star = close < open and (high - open) / (high - low) > 0.6 and (close - low) / (high - low) < 0.2 // Enhanced conditions with volume and RSI check buy_condition = (bullish_engulfing or hammer) and close > shortEMA and shortEMA > longEMA and volume > ta.sma(volume, 20) and rsi < 70 sell_condition = (bearish_engulfing or shooting_star) and close < shortEMA and shortEMA < longEMA and volume > ta.sma(volume, 20) and rsi > 30 // Dynamic ATR multiplier based on recent volatility volatility = atr adaptiveMultiplier = atrMultiplier + (volatility - ta.sma(volatility, 50)) / ta.sma(volatility, 50) * 0.5 // Execute buy trades with slippage consideration if (buy_condition) strategy.entry("Buy", strategy.long) stop_loss_buy = strategy.position_avg_price - atr * adaptiveMultiplier - dynamic_slippage take_profit_buy = strategy.position_avg_price + atr * adaptiveMultiplier * 3 + dynamic_slippage strategy.exit("Exit Buy", "Buy", stop=stop_loss_buy, limit=take_profit_buy) // Execute sell trades with slippage consideration if (sell_condition) strategy.entry("Sell", strategy.short) stop_loss_sell = strategy.position_avg_price + atr * adaptiveMultiplier + dynamic_slippage take_profit_sell = strategy.position_avg_price - atr * adaptiveMultiplier * 3 - dynamic_slippage strategy.exit("Exit Sell", "Sell", stop=stop_loss_sell, limit=take_profit_sell) // Risk Management maxLossPerTrade = input.float(0.01, title="Max Loss Per Trade (%)", minval=0.01, maxval=1, step=0.01) // 1% max loss per trade dailyLossLimit = input.float(0.03, title="Daily Loss Limit (%)", minval=0.01, maxval=1, step=0.01) // 3% daily loss limit maxLossAmount_buy = strategy.position_avg_price * maxLossPerTrade maxLossAmount_sell = strategy.position_avg_price * maxLossPerTrade if (strategy.position_size > 0) strategy.exit("Max Loss Buy", "Buy", stop=strategy.position_avg_price - maxLossAmount_buy - dynamic_slippage) if (strategy.position_size < 0) strategy.exit("Max Loss Sell", "Sell", stop=strategy.position_avg_price + maxLossAmount_sell + dynamic_slippage) // Daily loss limit logic var float dailyLoss = 0.0 if (dayofweek != dayofweek[1]) dailyLoss := 0.0 // Reset daily loss tracker at the start of a new day if (strategy.closedtrades > 0) dailyLoss := dailyLoss + strategy.closedtrades.profit(strategy.closedtrades - 1) if (dailyLoss < -strategy.initial_capital * dailyLossLimit) strategy.close_all("Daily Loss Limit Hit") // Breakeven stop after a certain profit with a delay if (strategy.position_size > 0 and close > strategy.position_avg_price + atr * 1.5 and bar_index > strategy.opentrades.entry_bar_index(0) + 5) strategy.exit("Breakeven Buy", from_entry="Buy", stop=strategy.position_avg_price) if (strategy.position_size < 0 and close < strategy.position_avg_price - atr * 1.5 and bar_index > strategy.opentrades.entry_bar_index(0) + 5) strategy.exit("Breakeven Sell", from_entry="Sell", stop=strategy.position_avg_price) // Partial Profit Taking if (strategy.position_size > 0 and close > strategy.position_avg_price + atr * 1.5) strategy.close("Partial Close Buy", qty_percent=50) // Use strategy.close for partial closure at market price if (strategy.position_size < 0 and close < strategy.position_avg_price - atr * 1.5) strategy.close("Partial Close Sell", qty_percent=50) // Use strategy.close for partial closure at market price // Trailing Stop with ATR type if (strategy.position_size > 0) strategy.exit("Trailing Stop Buy", from_entry="Buy", trail_offset=atr * 1.5, trail_price=strategy.position_avg_price) if (strategy.position_size < 0) strategy.exit("Trailing Stop Sell", from_entry="Sell", trail_offset=atr * 1.5, trail_price=strategy.position_avg_price)