
Se trata de una estrategia de negociación de complejidad cuantitativa que combina varios indicadores técnicos y una idea de negociación. La estrategia se basa principalmente en la detección de cambios en la tendencia, el cruce de medias móviles y el análisis de múltiples marcos de tiempo para generar señales de negociación. La idea central de la estrategia es en la dirección de la tendencia en el marco de tiempo más grande (una hora), utilizando el comportamiento del precio y los indicadores técnicos en el marco de tiempo más pequeño (cinco minutos) para entrar y salir con precisión.
Bloque de pedidos (Order Block): La estrategia utiliza funciones personalizadas para calcular el bloque de pedidos, que es un nivel de precio importante, que generalmente representa una zona de concentración de pedidos de las grandes instituciones.
Detección de cambios de tendencia: utiliza una cruz de media móvil simple (SMA) para identificar posibles cambios de tendencia.
Análisis de múltiples marcos de tiempo: Calculación de promedios móviles de 50 y 200 ciclos en un marco de tiempo de 1 hora (EMA) para determinar las tendencias más grandes del mercado.
Condiciones de entrada:
Estrategia de salida: utiliza niveles de stop loss y stop loss de porcentaje fijo para administrar el riesgo y bloquear las ganancias.
Análisis multidimensional: combina varios marcos temporales y indicadores técnicos para ofrecer una visión más completa del mercado.
Seguimiento de tendencias: mejora la probabilidad de ganancias al operar en la dirección de las grandes tendencias.
Ingreso preciso: aprovecha los bloques de pedidos y los cambios en las tendencias a corto plazo para optimizar el tiempo de ingreso.
Gestión de riesgos: El uso de paradas y pérdidas predeterminadas para controlar el riesgo de cada operación.
Adaptabilidad: los parámetros de la estrategia se pueden ajustar para adaptarse a diferentes entornos de mercado.
Exceso de transacciones: puede generar señales de transacciones frecuentes en mercados con gran volatilidad, lo que aumenta los costos de transacción.
Riesgo de deslizamiento: En mercados con poca liquidez, el precio de ejecución real puede estar muy alejado del precio ideal.
Riesgo de cambio de tendencia: cerca del punto de cambio de tendencia, la estrategia puede sufrir pérdidas continuas.
Sensibilidad de parámetros: el rendimiento de la estrategia puede ser altamente sensible a la configuración de parámetros y requiere optimización continua.
Dependencia del entorno del mercado: la estrategia puede no funcionar bien en un mercado horizontal o de rápida oscilación.
Ajuste de parámetros dinámicos: Considere ajustar automáticamente el porcentaje de parada y pérdida de acuerdo con la volatilidad del mercado.
Aumentar los filtros: introducir indicadores técnicos adicionales o indicadores de sentimiento del mercado para reducir las señales falsas.
Filtrado por tiempo: añade restricciones a las ventanas de tiempo de negociación para evitar períodos de baja liquidez.
Gestión de posiciones: Implementa estrategias de gestión de posiciones más complejas, como el ajuste de posiciones basado en la volatilidad.
Retroalimentación y optimización: realice una retroalimentación más amplia de los datos históricos para encontrar la combinación óptima de parámetros.
Aumentar la identificación del entorno de mercado: Desarrollar algoritmos para identificar diferentes estados de mercado y ajustar la estrategia en consecuencia.
Se trata de una estrategia de comercio cuantitativa integrada, lógica y compleja, que combina análisis de múltiples marcos temporales, teoría de bloques de órdenes y técnicas de seguimiento de tendencias. La estrategia tiene como objetivo aumentar la tasa de éxito de las operaciones mediante la búsqueda de puntos de entrada precisos en la dirección de las grandes tendencias. Sin embargo, debido a su complejidad, la estrategia también se enfrenta a excesos de ajuste y sensibilidad a los parámetros, entre otros.
/*backtest
start: 2024-06-28 00:00:00
end: 2024-07-28 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("S&P 500", overlay=true)
// Parámetros
length = input(14, "Longitud")
src = input(close, "Fuente")
profit_percent = input.float(0.08955, "Porcentaje de ganancia", step=0.00001, minval=0)
stop_loss_percent = input.float(0.04477, "Porcentaje de stop loss", step=0.00001, minval=0)
// Función para calcular el Order Block
order_block(src, len) =>
highest = ta.highest(high, len)
lowest = ta.lowest(low, len)
mid = (highest + lowest) / 2
ob = src > mid ? highest : lowest
ob
// Cálculo del Order Block
ob = order_block(src, length)
// Función para detectar cambios de tendencia
trend_change(src, len) =>
up = ta.crossover(src, ta.sma(src, len))
down = ta.crossunder(src, ta.sma(src, len))
[up, down]
// Detectar cambios de tendencia
[trend_up, trend_down] = trend_change(src, length)
// Calcular EMA 50 y EMA 200 en timeframe de 1 hora
ema50_1h = request.security(syminfo.tickerid, "60", ta.ema(close, 50))
ema200_1h = request.security(syminfo.tickerid, "60", ta.ema(close, 200))
// Condiciones de EMA
ema_buy_condition = ema50_1h > ema200_1h
ema_sell_condition = ema50_1h < ema200_1h
// Señales de compra y venta
buy_signal = trend_up and close > ob and ema_buy_condition
sell_signal = trend_down and close < ob and ema_sell_condition
// Ejecutar la estrategia
if (buy_signal)
strategy.entry("Compra", strategy.long)
if (sell_signal)
strategy.entry("Venta", strategy.short)
// Calcular precios de toma de ganancias y stop loss
if (strategy.position_size != 0)
entry_price = strategy.position_avg_price
is_long = strategy.position_size > 0
take_profit = entry_price * (1 + (is_long ? 1 : -1) * profit_percent / 100)
stop_loss = entry_price * (1 + (is_long ? -1 : 1) * stop_loss_percent / 100)
strategy.exit(is_long ? "Long TP/SL" : "Short TP/SL", limit=take_profit, stop=stop_loss)
// Visualización
plot(ob, "Order Block", color.purple, 2)
plot(ta.sma(src, length), "SMA", color.blue)
plot(ema50_1h, "EMA 50 1h", color.yellow)
plot(ema200_1h, "EMA 200 1h", color.white)
bgcolor(buy_signal ? color.new(color.green, 90) : sell_signal ? color.new(color.red, 90) : na)