Estrategia de negociación de conversación cuantitativa de alta frecuencia: sistema de gestión de posición dinámica adaptativa basado en señales de ruptura


Fecha de creación: 2024-12-12 14:59:28 Última modificación: 2024-12-12 14:59:28
Copiar: 1 Número de Visitas: 437
1
Seguir
1617
Seguidores

Estrategia de negociación de conversación cuantitativa de alta frecuencia: sistema de gestión de posición dinámica adaptativa basado en señales de ruptura

Descripción general

La estrategia es un sistema de trading cuantificado de alta frecuencia que se centra en capturar oportunidades de brecha de precios en las horas de trading de Londres y Estados Unidos. Se obtiene un rendimiento de trading estable a través de horas de trading personalizadas (Kill Zones), gestión dinámica de posiciones y administración precisa de pedidos. El núcleo de la estrategia es crear un marco de trading completo mediante el análisis del comportamiento de los precios en un período determinado, combinado con datos de los puntos altos y bajos del ciclo retrospectivo.

Principio de estrategia

La estrategia se basa principalmente en los siguientes principios centrales:

  1. Selección de horarios: la estrategia se centra en los horarios de negociación de Londres y Estados Unidos, que suelen tener una mayor liquidez y volatilidad.
  2. Señales de ruptura: Identificar oportunidades potenciales de ruptura mediante el análisis de la relación entre el precio de cierre y el precio de apertura en el momento actual y su contraste con los puntos altos y bajos anteriores.
  3. Posiciones dinámicas: el tamaño de las posiciones de cada operación se calcula de forma dinámica en función de los intereses, el porcentaje de riesgo y la distancia de parada de la cuenta.
  4. Gestión de pedidos: Implementa un mecanismo de cancelación automática de la lista de pedidos para evitar el riesgo potencial de pedidos vencidos.
  5. Proporción riesgo-recibo: Permite a los operadores establecer proporciones de riesgo-recibo según sus preferencias personales de riesgo.

Ventajas estratégicas

  1. Gestión precisa del tiempo: Asegura que las operaciones se realicen en los momentos más líquidos mediante la configuración de horarios personalizados.
  2. Gestión inteligente de las posiciones: calcula el tamaño de las posiciones de forma dinámica y controla eficazmente el riesgo de cada operación.
  3. Configuración de parámetros flexible: los operadores pueden ajustar los parámetros según sus necesidades personales.
  4. Un buen control de riesgos: incluye múltiples mecanismos de control de riesgos, tales como pérdidas, paradas y cancelación de pedidos por retraso.
  5. Alta automatización: todo el proceso, desde la generación de señales hasta la gestión de pedidos, se automatiza, reduciendo la intervención humana.

Riesgo estratégico

  1. Riesgo de fluctuaciones en el mercado: puede desencadenar una señal de ruptura errónea durante la alta volatilidad.
  2. Riesgo de deslizamiento: los deslizamientos en las operaciones de alta frecuencia pueden afectar el rendimiento de la estrategia.
  3. Riesgo de brecha falsa: el mercado puede sufrir brechas falsas que pueden llevar a pérdidas de transacciones.
  4. Riesgo de liquidez: La falta de liquidez en un momento determinado puede afectar la ejecución de la orden.

Dirección de optimización de la estrategia

  1. Introducción de filtros de fluctuación: optimización de la hora de entrada mediante el análisis de la volatilidad del mercado.
  2. Aumentar el filtro de tendencias: en combinación con indicadores de tendencias a más largo plazo para mejorar la precisión de la dirección de las operaciones.
  3. Optimización de la ventana de tiempo: ajuste la configuración de la ventana de tiempo de la transacción según el análisis de datos históricos.
  4. Mejorar la gestión de posiciones: Considere la inclusión de un mecanismo de ajuste dinámico de posiciones basado en la volatilidad.

Resumir

La estrategia utiliza un método integrado de gestión de varias dimensiones, como el tiempo, el precio y la posición, para construir un sistema completo de comercio de alta frecuencia. Su principal ventaja reside en la precisión de la hora de negociación y un mecanismo de gestión de riesgos completo, pero al mismo tiempo requiere que el comerciante siga de cerca los cambios en el entorno del mercado y ajuste los parámetros a tiempo.

Código Fuente de la Estrategia
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-10 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("ENIGMA ENDGAME Strategy", overlay=true, margin_long=100, margin_short=100)

// Description: 
// The ENIGMA ENDGAME strategy leverages price action breakouts within specific kill zones (London and US sessions) to capture profitable opportunities. 
// The strategy uses dynamic position sizing based on account equity, precise entry logic via buy-stop and sell-stop orders, and robust risk management to achieve consistent profitability. 
// Features include:
// - Customizable kill zones for session-specific trading.
// - Risk management with dynamic position sizing based on user-defined percentages.
// - Multiple entry opportunities with lookback-based high/low tracking.
// - Automatic pending order cancellation to avoid stale trades.
// - Adjustable risk-reward ratios for optimal profit-taking.

// Define customizable kill zones for London and US sessions
london_start_hour = input.int(2, minval=0, maxval=23, title="London Start Hour (UTC)")
london_end_hour = input.int(5, minval=0, maxval=23, title="London End Hour (UTC)")
us_start_hour = input.int(8, minval=0, maxval=23, title="US Start Hour (UTC)")
us_end_hour = input.int(11, minval=0, maxval=23, title="US End Hour (UTC)")

// Risk management parameters
risk_percentage = input.float(0.1, title="Risk Percentage per Trade (%)", step=0.01)
account_balance = strategy.equity

// Define lookback parameters
lookback_period = 3
cancel_after_bars = input.int(5, title="Cancel Pending Orders After Bars")

// User-defined risk-reward ratio
risk_reward_ratio = input.float(1.0, title="Risk-Reward Ratio", minval=0.1, step=0.1)

// Kill zone function
in_kill_zone = (hour(time) >= london_start_hour and hour(time) < london_end_hour) or (hour(time) >= us_start_hour and hour(time) < us_end_hour)

// Calculate Position Size Based on Risk
calc_position_size(entry_price, stop_loss) =>
    // This function calculates the position size based on the account equity, risk percentage, and stop-loss distance.
    risk = account_balance * (risk_percentage / 100)
    stop_loss_distance = math.abs(entry_price - stop_loss)
    // Validate stop-loss distance
    stop_loss_distance := stop_loss_distance < syminfo.mintick * 10 ? syminfo.mintick * 10 : stop_loss_distance
    position_size = risk / stop_loss_distance
    // Clamp position size
    math.min(position_size, 10000000000.0) // Limit to Pine Script max qty

// Initialize arrays to store high/low levels
var float[] buy_highs = array.new_float(0)
var float[] sell_lows = array.new_float(0)
var int[] pending_orders = array.new_int(0)

// Buy and Sell Arrow Conditions
bullish_arrow = close > open and close > high[1] and in_kill_zone // Triggers buy logic when price action breaks out in the upward direction within a kill zone.
bearish_arrow = close < open and close < low[1] and in_kill_zone // Triggers sell logic when price action breaks out in the downward direction within a kill zone.

// Store Highs and Place Buy-Stops
if bullish_arrow
    array.clear(buy_highs) // Clears previous data to store new highs.
    for i = 1 to lookback_period
        array.push(buy_highs, high[i]) // Tracks highs from the lookback period.
    
    // Place buy-stop orders
    for high_level in buy_highs
        stop_loss = low - syminfo.mintick * 10 // 1 pip below the low
        take_profit = high_level + (high_level - stop_loss) * risk_reward_ratio // Calculate take-profit based on the risk-reward ratio.
        strategy.entry("Buy", strategy.long, stop=high_level, qty=calc_position_size(high_level, stop_loss))
        strategy.exit("Take Profit", "Buy", limit=take_profit, stop=stop_loss)

// Store Lows and Place Sell-Stops
if bearish_arrow
    array.clear(sell_lows) // Clears previous data to store new lows.
    for i = 1 to lookback_period
        array.push(sell_lows, low[i]) // Tracks lows from the lookback period.
    
    // Place sell-stop orders
    for low_level in sell_lows
        stop_loss = high + syminfo.mintick * 10 // 1 pip above the high
        take_profit = low_level - (stop_loss - low_level) * risk_reward_ratio // Calculate take-profit based on the risk-reward ratio.
        strategy.entry("Sell", strategy.short, stop=low_level, qty=calc_position_size(low_level, stop_loss))
        strategy.exit("Take Profit", "Sell", limit=take_profit, stop=stop_loss)

// Cancel Pending Orders After Defined Bars
if array.size(pending_orders) > 0
    for i = 0 to array.size(pending_orders) - 1
        if bar_index - array.get(pending_orders, i) >= cancel_after_bars
            array.remove(pending_orders, i) // Removes outdated pending orders.

// Alerts for debugging
alertcondition(bullish_arrow, title="Buy Alert", message="Buy signal generated.")
alertcondition(bearish_arrow, title="Sell Alert", message="Sell signal generated.")