Estrategia comercial de ruptura de rango de apertura dinámica de alta frecuencia

ORB RANGE BREAKOUT HFT EST OHLC SL TP
Fecha de creación: 2025-02-21 14:02:59 Última modificación: 2025-02-21 14:02:59
Copiar: 2 Número de Visitas: 519
2
Seguir
319
Seguidores

Estrategia comercial de ruptura de rango de apertura dinámica de alta frecuencia Estrategia comercial de ruptura de rango de apertura dinámica de alta frecuencia

Descripción general

La estrategia es un sistema de negociación de alta frecuencia basado en brechas en el rango de apertura, que se centra en el rango de precios que se forma entre las 9:30 y 9:45 de la mañana del día de negociación. La estrategia toma decisiones de negociación observando si los precios rompen este rango de 15 minutos, mientras que combina una configuración dinámica de stop loss y profit profit para lograr la combinación óptima de riesgos y ganancias.

Principio de estrategia

La lógica central de la estrategia es establecer un rango de precios dentro de los 15 minutos posteriores a la apertura de cada día de negociación (09:30-9:45 EST) y registrar los precios más altos y más bajos durante ese período. Una vez que se forma un rango, la estrategia monitorea las rupturas de precios antes de las 12:00 del día:

  • Cuando el precio se eleva por encima de la brecha de la franja, abrir más, el stop loss es de 0,5 veces el tamaño de la franja, el stop loss es de 3 veces el tamaño de la parada
  • El principio de configuración para hacer una posición en blanco y negro, para detener y detener la pérdida es el mismo cuando el precio se desvía por debajo del rango La estrategia también incluye mecanismos para evitar la repetición de transacciones, asegurando que solo se ejecute una transacción al día y que se liquiden todas las posiciones al cierre.

Ventajas estratégicas

  1. Eficiencia en el tiempo: la estrategia se centra en las horas de negociación más activas después de la apertura, para capturar las oportunidades de gran volatilidad de la apertura temprana
  2. Control de riesgo: configuración de stop loss dinámica para determinar los parámetros de gestión de riesgo en función de la amplitud de las fluctuaciones reales
  3. Flexibilidad de negociación: ofrece la posibilidad de elegir los días de negociación por semana para evitar días de negociación desfavorables en determinadas circunstancias del mercado
  4. Ejecución clara: las señales de transacción son claras, las condiciones de entrada y salida son claras y no se ven afectadas por juicios subjetivos
  5. Alto grado de automatización: ejecución automática en todo el proceso, reduciendo el impacto emocional de la intervención humana

Riesgo estratégico

  1. Riesgo de falsa ruptura: la primera ruptura después de la formación de un espacio abierto puede ser falsa, lo que lleva a una salida de pérdidas
  2. La desaceleración temporal: estrategia de negociar solo en horas de la mañana, pudiendo perder buenas oportunidades en otras horas
  3. Dependencia de la volatilidad: las estrategias pueden tener dificultades para obtener suficiente margen de ganancia en días de menor volatilidad del mercado
  4. Efectos del punto de deslizamiento: como una estrategia de negociación de alta frecuencia, se puede enfrentar una mayor pérdida de puntos de deslizamiento en la ejecución
  5. Dependencia del entorno del mercado: el rendimiento de la estrategia puede verse significativamente afectado por el entorno general del mercado

Dirección de optimización de la estrategia

  1. Introducción de indicadores de tráfico: se puede filtrar la falsa señal de ruptura mediante la observación del tráfico en el momento de la ruptura
  2. Ajuste dinámico de las horas de negociación: optimización de las ventanas de tiempo de negociación en función de las características de los períodos de actividad de las diferentes variedades
  3. Aumentar el filtro de tendencias: en combinación con el juicio de tendencias en períodos de tiempo más largos, mejora la precisión de la dirección de las operaciones
  4. Optimización de la configuración de stop loss: se puede considerar el uso de indicadores ATR dinámicos para configurar la distancia de stop loss
  5. Añade filtro de volatilidad: evalúa el nivel de volatilidad antes de la apertura para decidir si ejecutar la operación del día

Resumir

Se trata de una estrategia de ruptura de la franja de apertura diseñada de manera razonable y lógica para capturar oportunidades de negociación, centrándose en los momentos más activos del mercado. La ventaja de la estrategia reside en su lógica de negociación clara y su mecanismo de control de riesgos perfectos, pero también se debe tener en cuenta los riesgos potenciales, como las falsas rupturas y la dependencia del entorno del mercado.

Código Fuente de la Estrategia
/*backtest
start: 2025-01-21 00:00:00
end: 2025-01-24 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Binance","currency":"DOGE_USDT"}]
args: [["MaxCacheLen",580,358374]]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © UKFLIPS69

//@version=6
strategy("ORB", overlay=true, fill_orders_on_standard_ohlc = true)

trade_on_monday = input(false, "Trade on Monday") 
trade_on_tuesday = input(true, "Trade on Tuesday") 
trade_on_wednesday = input(true, "Trade on Wednesday")
trade_on_thursday = input(false, "Trade on Thursday")
trade_on_friday = input(true, "Trade on Friday")
// Get the current day of the week (1=Monday, ..., 6=Saturday, 0=Sunday)
current_day = dayofweek(time) 
current_price = request.security(syminfo.tickerid, "1", close)
// Define trading condition based on the day of the week
is_trading_day = (trade_on_monday and current_day == dayofweek.monday) or
                 (trade_on_tuesday and current_day == dayofweek.tuesday) or
                 (trade_on_wednesday and current_day == dayofweek.wednesday) or
                 (trade_on_thursday and current_day == dayofweek.thursday) or
                 (trade_on_friday and current_day == dayofweek.friday)
// ─── Persistent variables ─────────────────────────
var line  orHighLine       = na   // reference to the drawn line for the OR high
var line  orLowLine        = na   // reference to the drawn line for the OR low
var float orHigh           = na   // stores the open-range high
var float orLow            = na   // stores the open-range low
var int   barIndex930      = na   // remember the bar_index at 9:30
var bool  rangeEstablished = false
var bool  tradeTakenToday  = false  // track if we've opened a trade for the day

// ─── Detect times ────────────────────────────────
is930  = (hour(time, "America/New_York") == 9 and minute(time, "America/New_York") == 30)
is945  = (hour(time, "America/New_York") == 9 and minute(time, "America/New_York") == 45)

// Between 9:30 and 9:44 (inclusive of 9:30 bar, exclusive of 9:45)?
inSession = (hour(time, "America/New_York") == 9 and minute(time, "America/New_York") >= 30 and minute(time, "America/New_York") < 45)

// ─── Reset each day at 9:30 ─────────────────────
if is930
    // Reset orHigh / orLow
    orHigh := na
    orLow  := na
    rangeEstablished := false
    tradeTakenToday  := false
    // Record the bar_index for 9:30
    barIndex930 := bar_index
// ─── ONLY FORM OR / TRADE IF TODAY IS ALLOWED ─────────────────────
if is_trading_day
// ─── Accumulate the OR high/low from 9:30 to 9:44 ─
    if inSession
        orHigh := na(orHigh) ? high : math.max(orHigh, high)
        orLow  := na(orLow)  ? low  : math.min(orLow, low)

// ─── Exactly at 9:45, draw the lines & lock range ─
    if is945 and not na(orHigh) and not na(orLow)

    // Mark that the OR is established
        rangeEstablished := true

// ─── TRADING LOGIC AFTER 9:45, but BEFORE NOON, and if NO trade taken ─
    if rangeEstablished and not na(orHigh) and not na(orLow) 
    // Only trade if it's still BEFORE 12:00 (noon) EST and we haven't taken a trade today
        if hour(time, "America/New_York") < 12 and (not tradeTakenToday)
        // 1) Compute distances for stops & targets
            float stopSize   = 0.5 * (orHigh - orLow)      // half the OR size
            float targetSize = 3 * stopSize      // 3x the stop => 1.5x the entire OR
    
        // 2) Check if price breaks above OR => go long
            if close > orHigh 
            // Only enter a new long if not already in a long position (optional)
                if strategy.position_size <= 0
                    strategy.entry("ORB Long", strategy.long)
                    strategy.exit("Long Exit", from_entry = "ORB Long", stop = orHigh - stopSize, limit  = strategy.position_avg_price + targetSize)
                // Flag that we've taken a trade today
                    tradeTakenToday := true
    
        // 3) Check if price breaks below OR => go short
            if close < orLow 
            // Only enter a new short if not already in a short position (optional)
                if strategy.position_size >= 0
                    strategy.entry("ORB Short", strategy.short)
                    strategy.exit("Short Exit", from_entry = "ORB Short", stop = orLow + stopSize, limit  = strategy.position_avg_price - targetSize)
                // Flag that we've taken a trade today
                    tradeTakenToday := true
if hour(time, "America/New_York") == 16 and minute(time, "America/New_York") == 0
    strategy.close_all()