
La estrategia es una estrategia de arbitraje altamente adaptable que combina la línea media (EMA), las zonas de oferta y demanda y el volumen de transacciones. Identifica las tendencias del mercado mediante la confirmación cruzada de múltiples indicadores técnicos y realiza operaciones cerca de las zonas de oferta y demanda clave. La estrategia adopta objetivos de parada y ganancia dinámicos para adaptarse a la volatilidad del mercado a través del indicador ATR.
La lógica central de la estrategia se basa en los siguientes elementos clave:
En concreto, cuando el EMA de 9 ciclos sube 3 ciclos consecutivos, el EMA de 15 ciclos también está en tendencia al alza, y el precio está por encima de la zona de demanda, mientras que la línea media de volumen de transacción de 20 ciclos es mayor que la línea media de volumen de transacción de 50 ciclos, el sistema emite una señal de multiplicación. La lógica de la señal de vacío es la inversa.
Medidas de control de riesgos:
Se trata de un sistema de negociación completo que combina varias herramientas de análisis técnico para mejorar la fiabilidad de las operaciones mediante mecanismos de confirmación múltiple. La ventaja de la estrategia reside en su adaptabilidad y capacidad de gestión de riesgos, pero también se debe tener en cuenta las diferencias de rendimiento en diferentes entornos de mercado.
/*backtest
start: 2024-02-08 00:00:00
end: 2025-02-06 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Optimized Scalping Strategy with EMA & Supply/Demand Zones", overlay=true)
// Inputs
ema9_length = input(9, title="EMA 9 Length")
ema15_length = input(15, title="EMA 15 Length")
higher_tf = input.timeframe("15", title="Higher Timeframe for Zones")
atr_mult = input(1.5, title="ATR Multiplier for Stop Loss")
risk_reward = input.float(1.2, title="Risk-Reward Ratio", options=[1.2, 1.3, 1.4])
// Calculating EMAs
ema9 = ta.ema(close, ema9_length)
ema15 = ta.ema(close, ema15_length)
// Function to detect supply & demand zones
get_zone(tf) =>
high_tf_high = request.security(syminfo.tickerid, tf, ta.highest(high, 50))
high_tf_low = request.security(syminfo.tickerid, tf, ta.lowest(low, 50))
[high_tf_high, high_tf_low]
[supply_zone, demand_zone] = get_zone(higher_tf)
// ATR-based Stop Loss and Take Profit
atr = ta.atr(14)
long_sl = close - (atr * atr_mult)
long_tp = close + (atr * atr_mult * risk_reward)
short_sl = close + (atr * atr_mult)
short_tp = close - (atr * atr_mult * risk_reward)
// Entry conditions with volume and trend confirmation
longCondition = ta.rising(ema9, 3) and ta.rising(ema15, 3) and close > demand_zone and ta.sma(volume, 20) > ta.sma(volume, 50)
shortCondition = ta.falling(ema9, 3) and ta.falling(ema15, 3) and close < supply_zone and ta.sma(volume, 20) > ta.sma(volume, 50)
// Exit conditions using ATR-based SL/TP with additional trend confirmation
exitLong = (close >= long_tp or close <= long_sl) and ta.falling(ema9, 2)
exitShort = (close <= short_tp or close >= short_sl) and ta.rising(ema9, 2)
// Executing trades with improved risk management
if longCondition
strategy.entry("Long", strategy.long)
strategy.exit("Long Exit", from_entry="Long", stop=long_sl, limit=long_tp)
if shortCondition
strategy.entry("Short", strategy.short)
strategy.exit("Short Exit", from_entry="Short", stop=short_sl, limit=short_tp)
// Plotting
plot(ema9, color=color.blue, title="EMA 9")
plot(ema15, color=color.red, title="EMA 15")
plot(supply_zone, color=color.orange, title="Supply Zone")
plot(demand_zone, color=color.green, title="Demand Zone")