Estrategia de trading cuantitativo de seguimiento dinámico de stop loss de un tercio de la línea K

TRINITY ATR
Fecha de creación: 2025-02-18 13:57:33 Última modificación: 2025-02-18 13:57:33
Copiar: 0 Número de Visitas: 345
1
Seguir
1617
Seguidores

Estrategia de trading cuantitativo de seguimiento dinámico de stop loss de un tercio de la línea K

Descripción general

Se trata de una estrategia de comercio cuantitativa que combina el método de análisis de la línea K de Bill Williams en un tercio con la función de seguimiento dinámico de la parada de pérdidas. La estrategia genera una señal de plurivolación clara mediante el análisis de las características estructurales de la línea K actual y anterior y utiliza un mecanismo de seguimiento de la parada de pérdidas configurable para proteger la posición, lo que permite una entrada/salida precisa y una gestión de riesgos.

Principio de estrategia

La lógica central de la estrategia se basa en las siguientes partes clave:

  1. Cálculo de terciario de la línea K: Divide el rango de cada línea K (precio más alto - precio más bajo) en terciarios para obtener el límite de la zona superior y la zona inferior.
  2. Clasificación de las formas de K: Las líneas K se dividen en varios tipos según la ubicación de los precios de apertura y cierre en subzonas terciarias. Por ejemplo, cuando el precio de apertura está en la zona inferior y el precio de cierre en la zona superior, se considera una forma de fuerte alza.
  3. Reglas de generación de señales: Determina la señal de negociación efectiva mediante el análisis combinado de la forma de la línea K actual y la línea K anterior. Por ejemplo, cuando dos líneas K consecutivas muestran características de fuerza, se activa una señal múltiple.
  4. Detención de seguimiento dinámico: En el período de tiempo indicado, el precio más bajo (Multiple) o el precio más alto (Blank) de la línea anterior N-raíz K se utiliza como punto de parada móvil.

Ventajas estratégicas

  1. Claridad lógica: La estrategia utiliza un método intuitivo de análisis de la estructura de la línea K. Las reglas de negociación son claras y fáciles de entender.
  2. Gestión de riesgos: mediante el seguimiento dinámico de los mecanismos de detención de pérdidas, se puede controlar eficazmente el riesgo de retiro, al tiempo que se mantiene un margen de beneficio suficiente.
  3. Adaptabilidad: La estrategia puede adaptarse a diferentes entornos de mercado para seguir los parámetros de stop loss y tiene una buena adaptabilidad.
  4. Alto grado de automatización: desde la generación de señales hasta la gestión de la posición, todo está completamente automatizado, reduciendo la intervención humana.

Riesgo estratégico

  1. Riesgo de mercado en movimiento: en situaciones de movimiento horizontal, puede haber frecuentes falsas brechas que conduzcan a exceso de operaciones.
  2. Riesgo de salto en alto: En caso de un salto en alto, el tracking stop loss puede no ser activado a tiempo, causando pérdidas por encima de las esperadas.
  3. Sensibilidad de parámetros: La selección de parámetros que rastrean el stop loss tiene un gran impacto en el rendimiento de la estrategia, y la configuración inadecuada de los parámetros puede causar salidas prematuras o protección insuficiente.

Dirección de optimización de la estrategia

  1. Aumentar el filtro de entornos de mercado: Se puede introducir un indicador de tendencia o un indicador de volatilidad para ajustar dinámicamente los parámetros de la estrategia en diferentes entornos de mercado.
  2. Mecanismo de pérdida optimizado: Se puede considerar la combinación de indicadores ATR para establecer una distancia de pérdida más flexible y mejorar la adaptabilidad de la pérdida.
  3. Introducción de la gestión de posiciones: Se puede ajustar el tamaño de las posiciones en función de la intensidad de la señal y la dinámica de la volatilidad del mercado, para un control de riesgo más preciso.
  4. Aumentar la optimización de la salida: se puede agregar un objetivo de ganancias o indicadores técnicos para ayudar a juzgar y optimizar el tiempo de salida.

Resumir

Se trata de una estrategia de trading cuantitativa, estructurada, lógica y clara, que tiene una buena utilidad al combinar el uso de métodos clásicos de análisis técnico y técnicas modernas de gestión de riesgos. La estrategia está diseñada teniendo en cuenta las necesidades de las operaciones reales, incluidos los aspectos clave como la generación de señales, la gestión de la tenencia y el control de riesgos.

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

//@version=5
strategy("TrinityBar with Trailing Stop", overlay=true, initial_capital=100000, 
     default_qty_type=strategy.percent_of_equity, default_qty_value=250)

//─────────────────────────────────────────────────────────────
// 1. BAR THIRDS CALCULATIONS
//─────────────────────────────────────────────────────────────
cur_range      = high - low
cur_lowerThird = low + cur_range / 3
cur_upperThird = high - cur_range / 3

prev_range      = high[1] - low[1]
prev_lowerThird = low[1] + prev_range / 3
prev_upperThird = high[1] - prev_range / 3

//─────────────────────────────────────────────────────────────
// 2. DEFINE BULLISH & BEARISH BAR TYPES (CURRENT & PREVIOUS)
//─────────────────────────────────────────────────────────────
// Current bar types
is_1_3 = (open <= cur_lowerThird) and (close >= cur_upperThird)
is_3_3 = (open >= cur_upperThird) and (close >= cur_upperThird)
is_2_3 = (open > cur_lowerThird) and (open < cur_upperThird) and (close >= cur_upperThird)

is_3_1 = (open >= cur_upperThird) and (close <= cur_lowerThird)
is_1_1 = (open <= cur_lowerThird) and (close <= cur_lowerThird)
is_2_1 = (open > cur_lowerThird) and (open < cur_upperThird) and (close <= cur_lowerThird)

// Previous bar types
prev_is_1_3 = (open[1] <= prev_lowerThird) and (close[1] >= prev_upperThird)
prev_is_3_3 = (open[1] >= prev_upperThird) and (close[1] >= prev_upperThird)
prev_is_2_3 = (open[1] > prev_lowerThird) and (open[1] < prev_upperThird) and (close[1] >= prev_upperThird)

prev_is_3_1 = (open[1] >= prev_upperThird) and (close[1] <= prev_lowerThird)
prev_is_1_1 = (open[1] <= prev_lowerThird) and (close[1] <= prev_lowerThird)
prev_is_2_1 = (open[1] > prev_lowerThird) and (open[1] < prev_upperThird) and (close[1] <= prev_lowerThird)

//─────────────────────────────────────────────────────────────
// 3. VALID SIGNAL CONDITIONS
//─────────────────────────────────────────────────────────────
validBuy  = (prev_is_2_3 or prev_is_3_3 or prev_is_1_3) and (is_1_3 or is_3_3)
validSell = (prev_is_2_1 or prev_is_1_1 or prev_is_3_1) and (is_1_1 or is_3_1)

//─────────────────────────────────────────────────────────────
// 4. PLOT SIGNAL TRIANGLES
//─────────────────────────────────────────────────────────────
plotshape(validBuy, title="Valid Buy", style=shape.triangleup, location=location.belowbar, 
     color=color.green, size=size.small, text="B")
plotshape(validSell, title="Valid Sell", style=shape.triangledown, location=location.abovebar, 
     color=color.red, size=size.small, text="S")

//─────────────────────────────────────────────────────────────
// 5. MARKET ORDER EXECUTION BASED ON SIGNALS
//─────────────────────────────────────────────────────────────
if validBuy
    // Close any short positions.
    strategy.close("Short", comment="")
    // If not already long, enter a market long.
    if strategy.position_size <= 0
        strategy.entry("Long", strategy.long, comment="")
        
if validSell
    // Close any long positions.
    strategy.close("Long", comment="")
    // If not already short, enter a market short.
    if strategy.position_size >= 0
        strategy.entry("Short", strategy.short, comment="")

//─────────────────────────────────────────────────────────────
// 6. TRAILING STOP LOSS FUNCTION
//─────────────────────────────────────────────────────────────
// Inputs for trailing stop settings:
trailBars = input.int(title="Trailing Stop Bars Back", defval=1, minval=1)
trailTF   = input.timeframe(title="Trailing Stop Timeframe", defval="")  // "" = current timeframe

// For long positions, use the low from 'trailBars' bars back on the specified timeframe.
// For short positions, use the high from 'trailBars' bars back.
trailStopLong  = request.security(syminfo.tickerid, trailTF, low[trailBars])
trailStopShort = request.security(syminfo.tickerid, trailTF, high[trailBars])

// Apply trailing stops if a position is open.
if strategy.position_size > 0
    strategy.exit("Trailing Stop Long", from_entry="Long", stop=trailStopLong)
if strategy.position_size < 0
    strategy.exit("Trailing Stop Short", from_entry="Short", stop=trailStopShort)