Estrategia de negociación adaptativa con bloques de órdenes de ruptura fractal de múltiples períodos

OB SD MA ATR
Fecha de creación: 2024-12-27 15:49:16 Última modificación: 2024-12-27 15:49:16
Copiar: 8 Número de Visitas: 479
1
Seguir
1617
Seguidores

Estrategia de negociación adaptativa con bloques de órdenes de ruptura fractal de múltiples períodos

Descripción general

La estrategia es un sistema de trading adaptativo basado en la teoría fractal y el análisis de bloques de órdenes. Captura oportunidades comerciales de alta probabilidad al identificar niveles clave de soporte y resistencia en la estructura del mercado, combinados con señales de ruptura fractal y confirmaciones de bloques de órdenes. La estrategia integra múltiples indicadores técnicos, incluidos indicadores fractales, bloques de órdenes dinámicos y sistemas de confirmación de ruptura de precios, para lograr un posicionamiento preciso de los puntos de inflexión del mercado y una comprensión precisa de las oportunidades comerciales.

Principio de estrategia

La lógica central de la estrategia se basa en tres pilares principales: primero, el monitoreo continuo de los máximos y mínimos del mercado a través del módulo de cálculo fractal para identificar áreas potenciales de cambio de tendencia; segundo, a través del análisis de bloques de órdenes, estableciendo áreas de oferta y demanda en niveles de precios clave. ; y finalmente, a través del sistema de confirmación Breakout para verificar la validez de las rupturas de precios. Cuando el precio rompe el fractal superior y se confirma que es válido, el sistema creará un bloque de orden de área de demanda en el área de vela roja más cercana y abrirá una orden larga; cuando el precio rompe el fractal inferior y se confirma que es válido , el sistema creará un área de suministro en el área de vela verde más cercana al bloque de orden y abrirá una orden corta. La estrategia también incluye una función de actualización dinámica para el color del bloque de orden, que se utiliza para mostrar intuitivamente la relación de posición relativa entre el precio y el bloque de orden.

Ventajas estratégicas

  1. Fuerte adaptabilidad: la estrategia puede ajustar dinámicamente la posición y el tamaño del bloque de órdenes según las condiciones del mercado y adaptarse a diferentes entornos de mercado.
  2. Mecanismo de confirmación múltiple: combina el avance fractal, la confirmación del bloque de órdenes y el análisis de la acción del precio para reducir el riesgo de señales falsas.
  3. Gestión de riesgos mejorada: ayude a los operadores a monitorear el estado de la operación de la estrategia en tiempo real a través de comentarios visuales claros y una lista de verificación de estado.
  4. Excelente visualización: proporciona una interfaz gráfica intuitiva que incluye marcadores fractales, visualización de bloques de órdenes y lista de verificación de estado.
  5. Parámetros flexibles y ajustables: permite a los usuarios ajustar parámetros clave como el período fractal, el tipo de ruptura, etc. de acuerdo con su estilo comercial personal.

Riesgo estratégico

  1. Riesgo de volatilidad del mercado: pueden generarse señales de ruptura falsas en mercados altamente volátiles, lo que requiere mecanismos de filtrado adicionales.
  2. Riesgo de deslizamiento: en un entorno de mercado con liquidez insuficiente, el precio de ejecución de la orden puede desviarse del punto de entrada ideal.
  3. Dependencia de la tendencia: una estrategia puede no funcionar tan bien en un mercado lateral como en un mercado con tendencia.
  4. Sensibilidad de los parámetros: diferentes configuraciones del período fractal pueden generar resultados comerciales significativamente diferentes.
  5. Consumo de recursos computacionales: Las funciones de visualización complejas y los cálculos en tiempo real pueden aumentar la carga del sistema.

Dirección de optimización

  1. Introducción de filtros de volatilidad: optimice las señales comerciales a través de ATR u otros indicadores de volatilidad.
  2. Agregar mecanismo de confirmación de tendencia: combine con promedio móvil u otros indicadores de tendencia para mejorar la confiabilidad de la señal.
  3. Mejorar el mecanismo de stop-loss: diseñar una estrategia de stop-loss dinámica basada en la estructura del bloque de órdenes.
  4. Optimice el tamaño del bloque de órdenes: ajuste dinámicamente el tamaño del bloque de órdenes en función de la volatilidad del mercado.
  5. Agregar análisis de volumen: combine datos de volumen para verificar la efectividad del avance.

Resumir

Se trata de una estrategia comercial compleja que integra múltiples dimensiones del análisis técnico. Construye un sistema comercial completo con la teoría fractal y el análisis de bloques de órdenes como núcleo. Las ventajas de la estrategia radican en su adaptabilidad y múltiples mecanismos de confirmación, pero al mismo tiempo, también debemos prestar atención al impacto del entorno del mercado en el rendimiento de la estrategia. Se espera que mediante las direcciones de optimización recomendadas se mejoren aún más la confiabilidad y la estabilidad de la estrategia.

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

//@version=5
strategy("Supply and Demand - Order Block Strategy", format=format.price, precision=0, overlay=true)

// Input options for customization
changeColor = input(false, title="Change Box Colors?")
breakType = input.string("Wick+Body", title="Fractal Break Type:", options=["Wick+Body", "Body"])
n = input.int(title="Periods", defval=2, minval=1, tooltip="Number of periods for fractal lookback")

if n <= 0
    runtime.error("Periods input must be greater than zero.")

transGreenClr = input.color(color.new(color.green, 80), title="Bg:", inline="a_1")
greenClr = input.color(color.new(color.green, 0), title="Border:", inline="a_1")

transRedClr = input.color(color.new(color.red, 80), title="Bg:", inline="b_1")
redClr = input.color(color.new(color.red, 0), title="Border:", inline="b_1")

// --- Fractal Calculation ---
upFractal = high[n] == ta.highest(high, 2 * n + 1)
downFractal = low[n] == ta.lowest(low, 2 * n + 1)
// --- End Fractal Calculation ---

var float topValue = na
var float bottomValue = na
var int lastRedIndex = na
var float lastRedLow = na
var float lastRedHigh = na
var int lastGreenIndex = na
var float lastGreenLow = na
var float lastGreenHigh = na
var line topLine = na
var line bottomLine = na
var box demandBox = na
var box supplyBox = na
var topBreakBlock = false
var bottomBreakBlock = false
var isLongBreak = false
var isShortBreak = false
topBreakCheckSource = breakType == "Wick+Body" ? high : close
bottomBreakCheckSource = breakType == "Wick+Body" ? low : close

// Last Red Check
if close < open
    lastRedIndex := bar_index
    lastRedLow := low
    lastRedHigh := high

// Last Green Check
if close > open
    lastGreenIndex := bar_index
    lastGreenLow := low
    lastGreenHigh := high

// Top break
if ta.crossover(topBreakCheckSource, topValue) and not topBreakBlock
    topBreakBlock := true
    isLongBreak := true
    // line.set_x2(topLine, bar_index)
    // demandBox := box.new(lastRedIndex - 1, lastRedHigh, lastRedIndex + 1, lastRedLow, bgcolor=transGreenClr, border_color=greenClr)
    if strategy.position_size <= 0
        strategy.entry("Long", strategy.long)

// Bottom break
if ta.crossunder(bottomBreakCheckSource, bottomValue) and not bottomBreakBlock
    bottomBreakBlock := true
    isShortBreak := true
    // line.set_x2(bottomLine, bar_index)
    // supplyBox := box.new(lastGreenIndex - 1, lastGreenHigh, lastGreenIndex + 1, lastGreenLow, bgcolor=transRedClr, border_color=redClr)
    if strategy.position_size >= 0
        strategy.entry("Short", strategy.short)

// New up fractal
if upFractal
    topBreakBlock := false
    isLongBreak := false
    topValue := high[n]
    // topLine := line.new(bar_index[n], topValue, bar_index, topValue, color=color.teal, style=line.style_dotted, width=2)
    // if not isLongBreak[1]
    //     line.delete(topLine[1])

// New down fractal
if downFractal
    bottomBreakBlock := false
    isShortBreak := false
    bottomValue := low[n]
    // bottomLine := line.new(bar_index[n], bottomValue, bar_index, bottomValue, color=color.maroon, style=line.style_dotted, width=2)
    // if not isShortBreak[1]
    //     line.delete(bottomLine[1])

// Box state update
// activeBoxes = box.all
// if array.size(activeBoxes) > 0 and changeColor
//     for i = 0 to array.size(activeBoxes) - 1
//         boxId = array.get(activeBoxes, i)
//         bVal = box.get_bottom(boxId)
//         tVal = box.get_top(boxId)
//         if close < bVal
//             box.set_bgcolor(boxId, transRedClr)
//             box.set_border_color(boxId, redClr)
//         if close > tVal
//             box.set_bgcolor(boxId, transGreenClr)
//             box.set_border_color(boxId, greenClr)

//PLOTS
plotshape(downFractal ,style=shape.triangleup, location=location.belowbar, offset=-n, color=color.new(color.gray,80), size = size.tiny)
plotshape(upFractal, style=shape.triangledown,   location=location.abovebar, offset=-n, color=color.new(color.gray,80), size = size.tiny)

// --- Checklist Table ---
// var table checklistTable = table.new(position.bottom_right, 2, 8, bgcolor=color.new(color.gray, 80), border_width=1)

// if barstate.islast
//     table.cell(checklistTable, 0, 0, "Condition", text_color=color.white, text_size=size.small, bgcolor=color.teal)
//     table.cell(checklistTable, 1, 0, "Status", text_color=color.white, text_size=size.small, bgcolor=color.teal)

//     table.cell(checklistTable, 0, 1, "Up Fractal", text_size=size.small)
//     table.cell(checklistTable, 1, 1, upFractal ? "✅" : "❌", text_color=upFractal ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 2, "Down Fractal", text_size=size.small)
//     table.cell(checklistTable, 1, 2, downFractal ? "✅" : "❌", text_color=downFractal ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 3, "Top Break", text_size=size.small)
//     table.cell(checklistTable, 1, 3, isLongBreak ? "✅" : "❌", text_color=isLongBreak ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 4, "Bottom Break", text_size=size.small)
//     table.cell(checklistTable, 1, 4, isShortBreak ? "✅" : "❌", text_color=isShortBreak ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 5, "Last Red Candle", text_size=size.small)
//     table.cell(checklistTable, 1, 5, close < open ? "✅" : "❌", text_color=close < open ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 6, "Last Green Candle", text_size=size.small)
//     table.cell(checklistTable, 1, 6, close > open ? "✅" : "❌", text_color=close > open ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 7, "Box Color Change Active", text_size=size.small)
//     table.cell(checklistTable, 1, 7, changeColor ? "✅" : "❌", text_color=changeColor ? color.green : color.red, text_size=size.small)