Combinación de la estrategia de ruptura del rango de apertura y brecha de valor justo

ORB FVG SMC RRR ATR VWAP RSI TZ
Fecha de creación: 2025-06-26 09:24:20 Última modificación: 2025-06-26 09:24:20
Copiar: 1 Número de Visitas: 359
2
Seguir
319
Seguidores

Combinación de la estrategia de ruptura del rango de apertura y brecha de valor justo Combinación de la estrategia de ruptura del rango de apertura y brecha de valor justo

Descripción general

La estrategia de combinación de brecha de la franja abierta con brecha de valor justo es una estrategia de negociación cuantitativa que combina brecha de la franja abierta (ORB) y brecha de valor justo (FVG) en el concepto de fondos inteligentes (SMC). La estrategia define primero la franja de precios al inicio de la jornada de negociación (generalmente 5 minutos después de la apertura) y luego busca la intersección de la franja de precio con la brecha de la franja de valor justo como señal de negociación. La estrategia está diseñada para operaciones diarias dentro de un período de tiempo específico, especialmente en el período de negociación habitual en el mercado estadounidense, y controla la brecha de riesgo de cada transacción a través de un mecanismo de gestión de riesgos.

Principio de estrategia

El principio central de la estrategia se basa en dos conceptos clave de análisis técnico:

  1. Brecha en el campo abierto (ORB)- La estrategia primero determina los precios más altos y más bajos en un período de tiempo determinado después de la apertura del día de negociación (de manera predeterminada, 5 minutos), formando un intervalo de precios. Este intervalo es considerado como un juicio preliminar de los participantes del mercado sobre el movimiento de los precios en el día, y la ruptura de este intervalo puede indicar la formación de una tendencia a corto plazo.

  2. La brecha en el valor justo (FVG)- El método de análisis del concepto de capital inteligente (SMC) se basa en que el FVG de la tendencia alcista se forma cuando el máximo actual está por debajo del mínimo anterior y el FVG de la tendencia bajista se forma cuando el mínimo actual está por encima del máximo anterior. Estas brechas se consideran áreas en las que los precios pueden compensarse en el futuro y representan desequilibrios en la estructura del mercado.

Las señales de negociación de la estrategia se producen en las siguientes condiciones:

  • Cuando el FVG de la barra se cruza con el borde superior de la ORB (el precio de apertura de la barra anterior es inferior al punto más alto de la ORB, el precio de cierre es superior al punto más alto de la ORB), se activa una señal de multiplicación
  • Cuando el FVG bajista se cruza con el límite inferior del ORB (el precio de apertura de la barra anterior es superior al mínimo del ORB y el precio de cierre es inferior al mínimo del ORB), se activa la señal de pérdida de mercado

En la ejecución de operaciones, la estrategia utiliza un método de gestión de posiciones basado en el riesgo, calculando el tamaño de las posiciones específicas de cada operación en función de la distancia de parada para garantizar que el umbral de riesgo de cada operación sea uniforme. El stop loss se establece en el punto más bajo anterior de la operación múltiple o en el punto más alto anterior de la operación en blanco, y el objetivo de ganancia se basa en la proporción de retorno al riesgo predeterminada.

Ventajas estratégicas

  1. Combinación de varios métodos de análisis técnico- Mediante la integración de los métodos de análisis técnico ORB y FVG, la estrategia puede filtrar las señales falsas que un solo indicador puede generar y mejorar la calidad de las señales de negociación.

  2. Un marco de tiempo de transacción claro- La estrategia define claramente el rango de tiempo de las operaciones (las fases de la señal y las fases de la operación), lo que ayuda a los operadores a centrarse en los momentos en que el mercado está más activo y la calidad de la señal es la más alta, evitando operaciones no válidas en los momentos de baja actividad.

  3. Gestión de posiciones basada en el riesgo- La estrategia utiliza un método de cálculo de posiciones basado en el riesgo para garantizar que cada transacción represente una proporción constante de riesgo en el capital total de la cuenta (el 1% por defecto), lo que favorece la gestión de fondos a largo plazo y el control del riesgo.

  4. Configuración de parámetros flexible- La estrategia ofrece varios parámetros ajustables, incluida la configuración de la hora de negociación, la duración de la ORB, la duración de la fase de señal, la proporción de riesgo y la proporción de retorno del riesgo, etc., que permiten a los comerciantes optimizar según los diferentes mercados y las preferencias de riesgo personales.

  5. Ayuda visual- La estrategia ofrece una gran cantidad de elementos de visualización, incluidos los horizontes ORB, los marcadores de señales de negociación, el brillo de fondo en diferentes momentos de negociación y las tablas de estadísticas en tiempo real, para que los operadores puedan monitorear y analizar la ejecución de la estrategia.

  6. Apoyo a la gestión múltiple- El diseño de estrategias que soporta la celebración de varias posiciones de negociación al mismo tiempo (control de parámetros a través de la pirámide) permite capturar varias oportunidades de negociación en el mismo día de negociación, lo que mejora la eficiencia de la utilización de los fondos.

Riesgo estratégico

  1. Dependencia en el mercado específico- La estrategia está diseñada principalmente para el mercado de valores de los Estados Unidos en el momento de la negociación regular, en otros mercados o en el momento de la negociación puede ser ineficaz. Las características de apertura y el patrón de fluctuación de los diferentes mercados son muy diferentes, por lo que se requieren parámetros de ajuste específicos.

  2. Sensibilidad de los parámetros- El rendimiento de la estrategia es sensible a varios parámetros clave, como la duración de la ORB, la duración de la señal y el índice de retorno del riesgo. La configuración incorrecta de los parámetros puede causar exceso de comercio o perder oportunidades de comercio importantes.

  3. Dependencia del estado del mercado- En un entorno de mercado de alta volatilidad o baja volatilidad, la estrategia puede no ser consistente. Especialmente en mercados de baja volatilidad, los intervalos ORB pueden ser demasiado estrechos, lo que provoca frecuentes señales de brechas falsas.

  4. Riesgo de pérdida de posición- La estrategia utiliza el punto alto/bajo de la barra anterior como posición de parada, lo que en un mercado rápido puede llevar a una posición de parada demasiado amplia, lo que reduce el riesgo-rendimiento o conduce a un tamaño de posición demasiado pequeño

  5. Depende de los modelos de precios históricos- La estrategia asume que las rupturas en las zonas de FVG y ORB tienen sentido para la predicción, pero que el aumento de la eficiencia del mercado o el cambio en el entorno de la negociación pueden debilitar la eficacia de estos modelos.

  6. Riesgo de ejecución técnica- En las transacciones reales, puede haber problemas como puntos de deslizamiento, retrasos en la ejecución de los pedidos, que afectan la coherencia de los resultados de las transacciones reales con los resultados de la medición.

Dirección de optimización de la estrategia

  1. Duración del ORB dinámico- Se puede considerar la posibilidad de ajustar automáticamente la duración del ORB en función de la volatilidad del mercado, por ejemplo, el uso de un tiempo de ORB más largo en un entorno de mercado de alta volatilidad para evitar falsas rupturas y un tiempo de ORB más corto en un entorno de baja volatilidad para capturar más oportunidades de negociación.

  2. Añadir condiciones de filtrado- La introducción de condiciones de filtración adicionales para mejorar la calidad de la señal, como la combinación de la dirección de la tendencia general del mercado ((solo hacer más en la tendencia alcista, hacer menos en la tendencia descendente) o agregar confirmación de transacción ((solo negociar cuando la ruptura está acompañada de un aumento de la transacción))

  3. Optimización de la posición de pérdida- Considere la posibilidad de utilizar un sistema de stop loss dinámico basado en el ATR o en la volatilidad, en lugar de un método de stop loss fijo basado en el punto más alto o más bajo de la barra anterior, que podría proporcionar un control de riesgo más razonable.

  4. Añadir un mecanismo de ganancias- Implementar estrategias de ganancias por etapas, por ejemplo, liquidar parte de las posiciones cuando se alcanza la proporción de riesgo-rentabilidad de 1:1, y establecer el resto para seguir el stop loss o un objetivo de ganancias más lejano, para equilibrar la necesidad de bloquear ganancias y seguir tendencias.

  5. El filtro del tiempo- Agregar un filtro de tiempo para evitar períodos de transacciones de baja calidad conocidos, como períodos de baja volatilidad en la hora del almuerzo o períodos de alta volatilidad antes y después de la publicación de datos económicos importantes.

  6. Aumento de parámetros de adaptabilidad- Introducción de parámetros de adaptación que permiten a la estrategia ajustar automáticamente los parámetros en función del desempeño más reciente del mercado, como el ajuste dinámico de la tasa de retorno del riesgo o el porcentaje de riesgo en función de la ganancia más reciente.

Resumir

La estrategia combinada de breakout en el rango abierto y brecha de valor justo es un sistema de negociación intradiario cuidadosamente diseñado para buscar oportunidades de negociación de alta probabilidad mediante la combinación de métodos de análisis técnico ORB y FVG. La estrategia funciona en períodos de negociación definidos, utiliza un método de gestión de posiciones basado en el riesgo y ofrece una gran cantidad de herramientas visuales y estadísticas para ayudar a las decisiones de negociación.

Las principales ventajas de las estrategias residen en su lógica de negociación clara, su configuración de parámetros flexible y su mecanismo de gestión de riesgos completo. Sin embargo, las estrategias también enfrentan riesgos como dependencia del mercado, sensibilidad de parámetros y dependencia del estado del mercado. Para mejorar la solidez de las estrategias, se recomienda considerar direcciones de optimización como el ajuste de parámetros dinámicos, el aumento de las condiciones de filtración, la optimización de los métodos de stop loss y la implementación de mecanismos de ganancias por etapas.

Cabe señalar que la estrategia no se aplica a todos los entornos de mercado y a todas las variedades de operaciones, y los operadores deben realizar una adecuada prueba de retroceso y prospectiva antes de su aplicación real para asegurarse de que la estrategia se ajuste a sus preferencias de riesgo y objetivos comerciales. Mediante la optimización continua y la adaptación a los cambios en el mercado, la estrategia tiene el potencial de ser una herramienta efectiva en la caja de herramientas de los operadores diarios.

Código Fuente de la Estrategia
/*backtest
start: 2025-06-18 00:00:00
end: 2025-06-25 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

// Based on https://www.youtube.com/watch?v=mzFXoK2pbNE

//@version=5
strategy("[Myth Busting] [ORB] Casper SMC - 16 Jun", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=10000, pyramiding = 10)

// Input settings
show_orb = input.bool(true, "Show 5m Opening Range")
show_signals = input.bool(true, "Show FVG Intersection Signals")
show_stats = input.bool(true, "Show Statistics Table")
risk_per_trade = input.float(1.0, "Risk Per Trade (%)", minval=0.1, maxval=10.0, step=0.1)
use_stop_loss = input.bool(true, "Use Stop Loss")
use_take_profit = input.bool(true, "Use Take Profit")
risk_reward_ratio = input.float(2.0, "Risk:Reward Ratio", minval=1.0, step=0.1)

// Session time inputs
session_start_hour = input.int(9, "Session Start Hour", minval=0, maxval=23, group="Session Settings")
session_start_minute = input.int(30, "Session Start Minute", minval=0, maxval=59, group="Session Settings")
session_end_hour = input.int(16, "Session End Hour", minval=0, maxval=23, group="Session Settings")
session_end_minute = input.int(0, "Session End Minute", minval=0, maxval=59, group="Session Settings")
session_timezone = input.string("America/New_York", "Session Timezone", group="Session Settings")
orb_duration_minutes = input.int(5, "ORB Duration (Minutes)", minval=1, maxval=60, group="Session Settings")
signal_end_offset = input.int(90, "Signal Period Duration (Minutes)", minval=30, maxval=300, group="Session Settings")

// Style settings
orb_high_color = input.color(color.new(color.green, 50), "ORB High Color")
orb_low_color = input.color(color.new(color.red, 50), "ORB Low Color")
bullish_signal_color = input.color(color.green, "Bullish Signal Color")
bearish_signal_color = input.color(color.red, "Bearish Signal Color")

// Variables to store ORB levels
var float orb_high = na
var float orb_low = na
var int orb_start_time = na
var int orb_end_time = na
var bool orb_set = false

// Position tracking
var int position_counter = 0
var int active_positions = 0

// Function to get current time in specified timezone
get_session_time() =>
    current_hour = hour(time, session_timezone)
    current_minute = minute(time, session_timezone)
    current_hour * 60 + current_minute

// Calculate session times in minutes
session_start_minutes = session_start_hour * 60 + session_start_minute
session_end_minutes = session_end_hour * 60 + session_end_minute
orb_end_minutes = session_start_minutes + orb_duration_minutes
signal_end_minutes = session_start_minutes + signal_end_offset

// Check if we're in the ORB period
is_orb_period() =>
    current_time = get_session_time()
    current_time >= session_start_minutes and current_time < orb_end_minutes

// Check if we're in the signal period
is_signal_period() =>
    current_time = get_session_time()
    current_time >= orb_end_minutes and current_time < signal_end_minutes

// Check if we're in the overall trading session
is_trading_session() =>
    current_time = get_session_time()
    current_time >= session_start_minutes and current_time < session_end_minutes

// Reset ORB at the start of each trading session
new_session = is_trading_session() and not is_trading_session()[1]

if new_session or ta.change(dayofweek)
    orb_high := na
    orb_low := na
    orb_start_time := na
    orb_end_time := na
    orb_set := false
    position_counter := 0

// Capture ORB levels during the ORB period
if is_orb_period()
    if na(orb_high) or na(orb_low)
        orb_high := high
        orb_low := low
        orb_start_time := time
    else
        orb_high := math.max(orb_high, high)
        orb_low := math.min(orb_low, low)
    orb_end_time := time

// Mark ORB as set after the period ends
if not is_orb_period() and not na(orb_high) and not orb_set
    orb_set := true

// Fair Value Gap detection
bullish_fvg = high[2] < low and not na(orb_high)
bearish_fvg = low[2] > high and not na(orb_low)

// Check for FVG intersection with ORB boundaries during signal period
bullish_intersection = false
bearish_intersection = false

// Count active positions
active_positions := strategy.opentrades

if is_signal_period() and orb_set
    // Bullish FVG intersecting upper boundary
    if bullish_fvg
        if open[1] <= orb_high and close[1] >= orb_high
            bullish_intersection := true
    
    // Bearish FVG intersecting lower boundary  
    if bearish_fvg
        if open[1] >= orb_low and close[1] <= orb_low
            bearish_intersection := true

// Calculate position size based on risk per trade
calculate_position_size(entry, stop, is_long) =>
    risk_amount = strategy.equity * (risk_per_trade / 100)
    price_diff = is_long ? entry - stop : stop - entry
    position_size = risk_amount / price_diff
    position_size

// Strategy execution - Modified for multiple positions
if bullish_intersection
    position_counter += 1
    entry_price = close
    stop_loss_price = low[1]
    risk = entry_price - stop_loss_price
    take_profit_price = entry_price + (risk * risk_reward_ratio)
    
    // Calculate position size
    qty = calculate_position_size(entry_price, stop_loss_price, true)
    
    // Create unique entry ID
    entry_id = "Long_" + str.tostring(position_counter)
    exit_id = "LongExit_" + str.tostring(position_counter)
    
    // Enter long position
    strategy.entry(entry_id, strategy.long, qty=qty)
    
    // Set stop loss and take profit
    if use_stop_loss
        strategy.exit(exit_id, entry_id, stop=stop_loss_price, limit=use_take_profit ? take_profit_price : na)

if bearish_intersection
    position_counter += 1
    entry_price = close
    stop_loss_price = high[1]
    risk = stop_loss_price - entry_price
    take_profit_price = entry_price - (risk * risk_reward_ratio)
    
    // Calculate position size
    qty = calculate_position_size(entry_price, stop_loss_price, false)
    
    // Create unique entry ID
    entry_id = "Short_" + str.tostring(position_counter)
    exit_id = "ShortExit_" + str.tostring(position_counter)
    
    // Enter short position
    strategy.entry(entry_id, strategy.short, qty=qty)
    
    // Set stop loss and take profit
    if use_stop_loss
        strategy.exit(exit_id, entry_id, stop=stop_loss_price, limit=use_take_profit ? take_profit_price : na)

// Close all positions at end of trading session
if not is_trading_session() and strategy.position_size != 0
    strategy.close_all("End of Trading Session")

// Plot ORB levels
plot(show_orb and orb_set ? orb_high : na, "ORB High", color=orb_high_color, linewidth=2, style=plot.style_line)
plot(show_orb and orb_set ? orb_low : na, "ORB Low", color=orb_low_color, linewidth=2, style=plot.style_line)

// Plot intersection signals
plotshape(series=show_signals and bullish_intersection, title="Bullish FVG Intersection", style=shape.triangleup, location=location.belowbar, color=bullish_signal_color, size=size.normal)
plotshape(series=show_signals and bearish_intersection, title="Bearish FVG Intersection", style=shape.triangledown, location=location.abovebar, color=bearish_signal_color, size=size.normal)

// Background highlights for different session periods
bgcolor(is_orb_period() ? color.new(color.yellow, 90) : na, title="ORB Period")
bgcolor(is_signal_period() and orb_set ? color.new(color.blue, 95) : na, title="Signal Period")
bgcolor(is_trading_session() and not is_signal_period() and not is_orb_period() ? color.new(color.gray, 98) : na, title="Trading Session")

// Plot session boundaries
plot(is_trading_session() ? high : na, "Session High", color=color.new(color.orange, 80), linewidth=1)
plot(is_trading_session() ? low : na, "Session Low", color=color.new(color.orange, 80), linewidth=1)