Estrategia de trading multifactorial de probabilidad y triple microcanal con impulso

ATR MC EOD TP SL RR
Fecha de creación: 2025-05-20 14:16:22 Última modificación: 2025-05-20 14:16:22
Copiar: 0 Número de Visitas: 450
2
Seguir
319
Seguidores

Estrategia de trading multifactorial de probabilidad y triple microcanal con impulso Estrategia de trading multifactorial de probabilidad y triple microcanal con impulso

Descripción general

La estrategia de comercio de múltiples factores de probabilidad de la dinámica del triple microcanal es un método de comercio cuantitativo basado en la forma del precio, cuyo núcleo es identificar la estructura de microcanal que se forma en tres líneas K consecutivas en el mercado y calificar la señal de negociación cuantitativamente a través de 10 factores clave para aumentar la probabilidad de éxito de la operación. La estrategia es adecuada para los mercados financieros en diversos períodos de tiempo, especialmente para los operadores de línea corta diaria.

Principio de estrategia

El principio central de la estrategia de comercio de múltiples factores de probabilidad de la dinámica del triple microcanal es identificar los canales de movimiento unidireccionales que forman las tres líneas K consecutivas en el mercado. La estrategia funciona a través de los siguientes pasos:

  1. Identificación de microcanalLa estrategia consiste en buscar primero tres líneas K simultáneas en serie ((todas son positivas o todas negativas), lo que indica que el mercado podría estar en una tendencia unidireccional a corto plazo.

  2. Sistema de puntuación por factores múltiplesLa calificación cuantitativa de la calidad de la forma mediante la evaluación de 10 factores clave:

    • Factor 1: Unicidad de tamaño de las tres líneas K
    • Factor 2: Minimizar las sombras arriba y abajo
    • Factor 3: Existe una pequeña brecha (el punto más bajo de la línea K actual en la forma polinomial es mayor que el punto más alto de las tres líneas K anteriores)
    • Factor 4: Huecos entre las entidades de la línea K
    • Factor 5: Relación de precios de cierre ((el precio de cierre actual en la forma de múltiples cabezas es más alto que el punto más alto de la línea K anterior)
    • Factor 6: Bajos más altos/Altos más bajos
    • Factor 7: el precio de apertura es superior/inferior al precio de cierre de la línea K anterior
    • Factor 8: No hay una línea inferior/superior
    • Factor 9: sin estrella cruzada o línea K invertida
  3. Puntuación de probabilidad: Basado en la probabilidad básica de éxito (70%) más el factor de puntuación, calcula la probabilidad de éxito esperada de cada señal de negociación.

  4. Condiciones de ingreso: Cuando la puntuación general supera el umbral predeterminado (>50%) el sistema genera una señal de transacción (>50%)

  5. Gestión de riesgos

    • El punto de entrada múltiple se encuentra en el punto más alto de la línea K objetivo o en el precio de cierre (dependiendo del tamaño de la línea de sombra superior)
    • El Stop Loss se establece por debajo del precio de apertura de la línea K inicial
    • El precio objetivo se basa en el riesgo-rendimiento de la previsión
  6. Administración de posiciones: Basado en el capital de la cuenta y la proporción de riesgo por transacción (el 1% por defecto), el número de contratos calculado dinámicamente.

  7. Mecanismo de salidaLa estrategia de seguimiento de stop loss, que bloquea parte de las ganancias después de que las ganancias alcanzan el objetivo, al mismo tiempo que establece un stop loss fijo y un tiempo de liquidación obligatorio en el día.

Ventajas estratégicas

Al analizar el código en profundidad, esta estrategia muestra las siguientes ventajas significativas:

  1. Calificación cuantitativa objetivaLa estrategia de calificación cuantitativa de cada señal de transacción a través de 10 factores reduce el juicio subjetivo y aumenta la consistencia y la objetividad de las transacciones.

  2. La adaptabilidadLa estrategia puede aplicarse a una variedad de mercados y períodos de tiempo, ya que se basa en la tendencia general de los precios en lugar de las características específicas del mercado.

  3. Probabilidad de conducciónLa estrategia se basa en la probabilidad estadística, cada señal de negociación tiene una clara probabilidad de éxito esperada, lo que permite al comerciante tomar decisiones basadas en datos.

  4. Control perfecto de riesgosCada operación tiene una posición de stop loss definida y el riesgo se limita a un porcentaje fijo de los fondos de la cuenta mediante un ajuste dinámico de la posición.

  5. Mecanismo de participación múltipleLa estrategia integra varios métodos de salida, incluidos el seguimiento de los paros, los paros fijos y las posiciones cerradas obligatorias durante el día, para proteger los fondos de los comerciantes.

  6. Visualización de comentariosLa estrategia proporciona una marca de señal de negociación detallada y un factor de puntuación en el gráfico, lo que permite al comerciante entender intuitivamente la calidad de cada señal.

  7. La administración precisa del tiempoEl riesgo de mantener posiciones durante la noche se evita al limitar la ventana de tiempo de negociación y obligar a cerrar las posiciones al final del día.

Riesgo estratégico

A pesar de las numerosas ventajas de esta estrategia, existen los siguientes riesgos y desafíos potenciales:

  1. El riesgo de exceso de adaptaciónLos valores de ponderación y los valores de los umbrales de 10 factores pueden representar un riesgo de ajuste excesivo a los datos históricos, lo que puede conducir a un mal desempeño en el futuro.

  2. Riesgos de los mercados con poca liquidezEn un mercado con poca liquidez, los precios de entrada y salida pueden sufrir deslizamientos que afectan a los resultados reales de las operaciones.

  3. Sensibilidad de los parámetrosEl rendimiento de la estrategia es altamente sensible a varios parámetros, incluida la longitud de ATR, el límite de probabilidad de victoria y la relación de retorno al riesgo. La configuración incorrecta de los parámetros puede afectar significativamente el rendimiento de la estrategia.

  4. Dependencia del entorno de mercadoLa estrategia funciona mejor en un entorno de mercado con una clara tendencia y puede generar señales erróneas en un mercado convulso o de alta volatilidad.

  5. Raridad de señalesLa estrategia puede generar pocas señales de negociación en ciertos períodos, lo que afecta a la rentabilidad general, debido a que se requieren varios requisitos estrictos.

  6. Complejidad computacionalLa evaluación multifactorial aumenta la complejidad computacional de las estrategias y puede presentar retos de demora en las operaciones en tiempo real.

Los métodos para mitigar estos riesgos incluyen:

  • Realizar una revisión exhaustiva de la estrategia para comprobar su solidez en diferentes mercados y períodos de tiempo
  • Prueba en vivo durante un período de tiempo en un pequeño almacén y aumenta gradualmente el almacén
  • Reevaluar periódicamente y ajustar los parámetros para adaptarse a las diferentes circunstancias del mercado
  • Considerar la adición de filtros de entornos de mercado adicionales, como indicadores de tendencia o medición de la volatilidad

Dirección de optimización de la estrategia

Basado en el análisis de código, la estrategia puede ser optimizada en las siguientes direcciones:

  1. Optimización de la ponderación de factoresEn la actualidad, todos los factores tienen la misma ponderación (un 5% de probabilidad de éxito de cada impacto), y se puede determinar el peso óptimo de los factores a través de métodos de aprendizaje automático para mejorar la precisión de las predicciones. Esta optimización puede otorgar un mayor peso a algunos factores más importantes y reducir la influencia de otros.

  2. El filtro del entorno del mercadoAumentar los componentes de evaluación del entorno del mercado, como la intensidad de la tendencia o el índice de volatilidad, para negociar solo en condiciones favorables del mercado. Esto se puede lograr mediante la adición de indicadores como el ADX, el porcentaje de volatilidad y otros para evitar la generación de señales de negociación en un entorno de mercado desfavorable.

  3. Mejoras en el filtro de tiempoLas estrategias actuales utilizan ventanas de tiempo de negociación fijas que permiten optimizar el rango de tiempo de negociación mediante el análisis del desempeño de las estrategias en diferentes períodos de tiempo. Por ejemplo, algunos mercados pueden ser más direccionales en ciertos períodos de tiempo y más volátiles en otros.

  4. Parámetros de adaptaciónConvierte los parámetros fijos (como la duración del ATR, la tasa de rentabilidad del riesgo) en parámetros que se ajustan a la dinámica de las condiciones del mercado. Por ejemplo, puede aumentar la tasa de rentabilidad del riesgo en mercados de alta volatilidad y disminuirla en mercados de baja volatilidad.

  5. Confirmación de varios períodos de tiempoIntroducir mecanismos de confirmación de períodos de tiempo más altos, por ejemplo, requerir que la tendencia de la línea de sol coincida con la dirección de la negociación actual. Esto puede aumentar significativamente la tasa de éxito de la estrategia y evitar el comercio en contra.

  6. Mecanismo de salida optimizado: El trazado de los estancamientos actuales puede ser mejorado a un trazado de los estancamientos dinámicos basados en ATR, o a una salida estructurada basada en puntos de resistencia de soporte. Esta optimización puede capturar mejor la continuación de la tendencia y, al mismo tiempo, la salida oportuna al final de la tendencia.

  7. Aprendizaje automático integradoUtilizando algoritmos de aprendizaje automático para predecir qué señales son más probables de éxito y asignar puntuaciones de probabilidad más precisas a cada señal de transacción. Por ejemplo, se puede usar un bosque aleatorio o un modelo de árbol de escalado para clasificar las señales históricas y extraer patrones más complejos.

Resumir

La estrategia multifactorial de probabilidad de movimiento de triple microcanal es un método de negociación sistematizado que combina la identificación de la forma de precio y la calificación multifactorial. La estrategia proporciona un marco de decisión de negociación objetivo y cuantificable mediante la identificación de la estructura de microcanal formada por tres líneas K consecutivas y la evaluación de la calidad de la señal mediante el uso de 10 factores clave.

Las ventajas centrales de la estrategia residen en su sistema de puntuación de señales objetivo, sus estrictos controles de riesgo y sus mecanismos de salida flexibles. Al calcular la probabilidad de éxito esperada de cada señal, los operadores pueden tomar decisiones más impulsadas por los datos en lugar de depender de la sensación subjetiva. Al mismo tiempo, la gestión dinámica de la posición de la estrategia asegura la consistencia del control de riesgo, independientemente del tamaño de la cuenta.

A pesar de los desafíos existentes, como la sensibilidad a los parámetros y la dependencia del entorno del mercado, el rendimiento de la estrategia se espera que mejore aún más con la orientación de optimización propuesta, especialmente la optimización de los factores de peso, el filtrado del entorno del mercado y la mejora de los mecanismos de salida. Además, la introducción de tecnologías de aprendizaje automático podría ser una dirección importante para el futuro desarrollo de la estrategia, con el potencial de descubrir patrones más complejos en los datos históricos.

Para los operadores cuantitativos, esta estrategia proporciona un marco de base sólido que se puede personalizar y ampliar según las preferencias de riesgo personales y el estilo de negociación. En última instancia, el éxito de la estrategia depende no solo de su implementación técnica, sino también de la comprensión y disciplina de los operadores para ejecutar las reglas de la estrategia.

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



//@version=5
strategy("Ali 3-Bar MC v6 10 Factor", overlay=true, pyramiding=0)

// === INPUTS ===
showLabels = input.bool(true, title="Show Entry Labels")
rewardMultiple = input.float(1, title="Reward : Risk")


atrLength = input.int(4, title="ATR Length")
var int bullSignalBarIndex = na
var int bearSignalBarIndex = na

// === ATR ===
atr = ta.sma(ta.tr(true), atrLength)

signalTimeout = 1  // 例如3根bar




// === 风险控制参数 ===
riskPerTradePercent = input.float(1, title="每笔风险占比 (%)")  // 如 1%
pointValue = input.float(5, title="每点价值,例如 ES 是 $50/pt")

// 10 Factor 
//@version=5

baseWinRate = 0.70
tick = syminfo.mintick
tolerance = 0.2  // 用于判断 bar 大小一致的容忍比例


// 获取3根 bar 的关键数据
body(i) => math.abs(close[i] - open[i])
barSize(i)  => math.abs(high[i] - low[i])
upperTailRatio(i) => (high[i] - math.max(close[i], open[i])) / barSize(i)
lowerTailRatio(i) => (math.min(close[i], open[i]) - low[i])/barSize(i)

upperTailTolerance = 0.15
lowerTailTolerance = 0.15
bodyTolerance = 0.7
barUniformTolerance = 0.3
win_threshold = 0.5
// 检测 BL MC(3-bar micro channel 向上)
isBLMC = close[2] > open[2] and close[1] > open[1] and close > open

// === 各项因子判断 ===
//f1_uniform = math.max(barSize(2)/barSize(1), barSize(1)/barSize(2)) < 1 + barUniformTolerance and  math.max(barSize(1)/barSize(0), barSize(1)/barSize(0)) < 1 + barUniformTolerance
f1_uniform = math.max(barSize(2)/barSize(0) , barSize(0)/barSize(2)) < 1 + barUniformTolerance 


f2_mostCOH = ((upperTailRatio(2) < upperTailTolerance? 1:0) +  (upperTailRatio(1) < upperTailTolerance? 1:0)  +  (upperTailRatio(0) < upperTailTolerance? 1:0) )>=2
f3_microGap = low > high[2] 
f4_tickGap = open > close[1] or open[1] > close[2] 
f5_closesAboveHigh = close > high[1] and close[1] > high[2]
f6_higherLows = low > low[1] and low[1] > low[2]
f7_opensAbovePriorClose = open >= close[1] or open[1] >= close[2]
f8_noLowerTail =  ((lowerTailRatio(2) < lowerTailTolerance? 1:0) +  (lowerTailRatio(1) < lowerTailTolerance? 1:0)  +  (lowerTailRatio(0) < lowerTailTolerance? 1:0) )>=1
f9_noDojiOrOpposite  =body(2) /  barSize(2) > bodyTolerance and body(1) /  barSize(1) > bodyTolerance and body(0) /  barSize(0) > bodyTolerance

// === 总评分计算 ===
score = 0
score := score - (f1_uniform ? 0 : 1)
score := score - (f2_mostCOH ? 0 : 1)
score := score - (f3_microGap ? 0 : 4)
score := score - (f4_tickGap ? 0 : 1)
score := score - (f5_closesAboveHigh ? 0 : 1)
score := score - (f6_higherLows ? 0 : 1)
score := score - (f7_opensAbovePriorClose ? 0 : 1)
score := score - (f8_noLowerTail ? 0 : 1)
score := score - (f9_noDojiOrOpposite ? 0 : 1)

winProb = baseWinRate + (score * 0.05)  // 每个因子加5%,最高 1.20

// === 图上标记 ===
if isBLMC


    labelText = str.tostring(winProb * 100, "#.##") + "%\n" +        "1️⃣ uniform: " + str.tostring(f1_uniform) + "\n" +         "2️⃣ mostCOL: " + str.tostring(f2_mostCOH) + "\n" +        "3️⃣ microGap: " + str.tostring(f3_microGap) + "\n" +        "4️⃣ tickGap: " + str.tostring(f4_tickGap) + "\n" +        "5️⃣ closes<priorLow: " + str.tostring(f5_closesAboveHigh) + "\n" +        "6️⃣ lowerHighs: " + str.tostring(f6_higherLows) + "\n" +        "7️⃣ opensBelowClose: " + str.tostring(f7_opensAbovePriorClose) + "\n" +        "8️⃣ noLowerTail: " + str.tostring(f8_noLowerTail) + "\n" +        "9️⃣ noDoji: " + str.tostring(f9_noDojiOrOpposite)    ,
    label.new(        bar_index,         low,         text=labelText,         style=label.style_label_up,         color=color.new(color.green, 0),         textcolor=color.white,         size=size.small    )



// === Ali BULL MC ===


isAliBull =  isBLMC and  winProb>=win_threshold

// === 检测 Bear Micro Channel ===
isBRMC = close[2] < open[2] and close[1] < open[1] and close < open

// === Bear 各项因子 ===
br_f1_uniform = math.max(barSize(2)/barSize(0) , barSize(0)/barSize(2)) < 1 + barUniformTolerance 
br_f2_mostCOL = ((lowerTailRatio(2) < lowerTailTolerance ? 1:0) +  (lowerTailRatio(1) < lowerTailTolerance ? 1:0) +  (lowerTailRatio(0) < lowerTailTolerance ? 1:0)) >= 2
br_f3_microGap = low[2] > high 
br_f4_tickGap = open < close[1] or open[1] < close[2]
br_f5_closesBelowLow = close < low[1] and close[1] < low[2]
br_f6_lowerHighs = high < high[1] and high[1] < high[2]
br_f7_opensBelowPriorClose = open < close[1] or open[1] < close[2]
br_f8_noUpperTail = ((upperTailRatio(2) < upperTailTolerance ? 1:0) +  (upperTailRatio(1) < upperTailTolerance ? 1:0) +  (upperTailRatio(0) < upperTailTolerance ? 1:0)) >= 1
br_f9_noDojiOrOpposite = body(2)/barSize(2) > bodyTolerance and body(1)/barSize(1) > bodyTolerance and body(0)/barSize(0) > bodyTolerance

// === Bear 总评分计算 ===
br_score = 0
br_score := br_score - (br_f1_uniform ? 0 : 1)
br_score := br_score - (br_f2_mostCOL ? 0 : 1)
br_score := br_score - (br_f3_microGap ? 0 : 4)
br_score := br_score - (br_f4_tickGap ? 0 : 1)
br_score := br_score - (br_f5_closesBelowLow ? 0 : 1)
br_score := br_score - (br_f6_lowerHighs ? 0 : 1)
br_score := br_score - (br_f7_opensBelowPriorClose ? 0 : 1)
br_score := br_score - (br_f8_noUpperTail ? 0 : 1)
br_score := br_score - (br_f9_noDojiOrOpposite ? 0 : 1)

br_winProb = baseWinRate + (br_score * 0.05)

// === Bear 图上标记 ===
if isBRMC

    labelText = str.tostring(br_winProb * 100, "#.##") + "%\n" +        "1️⃣ uniform: " + str.tostring(br_f1_uniform) + "\n" +         "2️⃣ mostCOL: " + str.tostring(br_f2_mostCOL) + "\n" +        "3️⃣ microGap: " + str.tostring(br_f3_microGap) + "\n" +        "4️⃣ tickGap: " + str.tostring(br_f4_tickGap) + "\n" +        "5️⃣ closes<priorLow: " + str.tostring(br_f5_closesBelowLow) + "\n" +        "6️⃣ lowerHighs: " + str.tostring(br_f6_lowerHighs) + "\n" +        "7️⃣ opensBelowClose: " + str.tostring(br_f7_opensBelowPriorClose) + "\n" +        "8️⃣ noUpperTail: " + str.tostring(br_f8_noUpperTail) + "\n" +        "9️⃣ noDoji: " + str.tostring(br_f9_noDojiOrOpposite)    ,
    label.new(        bar_index,         low,         text=labelText,         style=label.style_label_up,         color=color.new(color.red, 0),         textcolor=color.white,         size=size.small    )







// === Ali BEAR MC ===



isAliBear = isBRMC  and br_winProb >=win_threshold

// === ENTRY/RISK/TARGET ===
bullEntry = (upperTailRatio(0)<0.1 ? close :high + tick) 
bullStop =  open[2] - tick
bullRisk = bullEntry - bullStop
bullTarget = bullEntry + bullRisk * rewardMultiple

bearEntry = (lowerTailRatio(0)<0.1? close :low - tick) 
bearStop = open[2]  + tick
bearRisk =  bearStop - bearEntry 
bearTarget = bearEntry - bearRisk * rewardMultiple

// === 动态仓位计算(基于账户资金和止损大小) ===
riskAmount = strategy.equity * (riskPerTradePercent / 100)
bullContracts = math.max(math.floor(riskAmount / (bullRisk * pointValue)),1)
bearContracts = math.max(math.floor(riskAmount / (bearRisk * pointValue)),1)


// === STATE ===
var float bullGapCloseLine = na
var float bearGapCloseLine = na
var bool inLong = false
var bool inShort = false
var bool bullStructureExitArmed = false
var bool bearStructureExitArmed = false
var float lastBullOpen = na
var float lastBearOpen = na
var line currentTPLine = na
var line currentSLLine = na
var float fixedBullStop = na
var float fixedBullTarget = na
var float fixedBearStop = na
var float fixedBearTarget = na

canTradeNow = not na(time(timeframe.period, "0930-1545", "America/New_York"))  // 只在盘中前6小时交易




// === BULL ENTRY ===
if isAliBull and na(bullSignalBarIndex) and canTradeNow and strategy.position_size  == 0
    strategy.entry("Ali Long", strategy.long, stop=bullEntry, qty=bullContracts)
    strategy.exit("Close Long", from_entry = "Ali Long", stop = bullStop, trail_price = bullTarget, trail_offset =    atrLength )
    bullSignalBarIndex := bar_index
    fixedBullStop := bullStop
    fixedBullTarget := bullTarget

// === BEAR ENTRY ===
if isAliBear and na(bearSignalBarIndex) and canTradeNow and strategy.position_size  == 0
    strategy.entry("Ali Short", strategy.short, stop=bearEntry, qty=bearContracts)
    strategy.exit("Close Short", from_entry = "Ali Short", stop = bearStop,trail_price = bearTarget, trail_offset =    atrLength)
    bearSignalBarIndex := bar_index
    fixedBearStop := bearStop
    fixedBearTarget := bearTarget





// === RESET ===
if strategy.position_size != 0
    bullSignalBarIndex := na
    bearSignalBarIndex := na

if not na(bullSignalBarIndex) and (bar_index - bullSignalBarIndex >= signalTimeout) and strategy.opentrades == 0
    strategy.cancel("Ali Long")
    bullSignalBarIndex := na
    fixedBullStop := na
    fixedBullTarget := na

if not na(bearSignalBarIndex) and (bar_index - bearSignalBarIndex >= signalTimeout) and strategy.opentrades == 0
    strategy.cancel("Ali Short")
    bearSignalBarIndex := na
    fixedBearStop := na
    fixedBearTarget := na



eodTime = timestamp("America/New_York", year, month, dayofmonth, 15, 55)

if time >= eodTime and strategy.position_size != 0
    strategy.close_all(comment="EOD Exit")
    label.new(bar_index, close, "Exit: EOD", style=label.style_label_down, color=color.gray, textcolor=color.white, size=size.small)
    bearSignalBarIndex := na
    bullSignalBarIndex:=na
    fixedBearStop := na
    fixedBearTarget := na


plot(fixedBearTarget, title="Bull TP", color=color.green, style=plot.style_linebr)
plot(fixedBearStop, title="Bull SL", color=color.red, style=plot.style_linebr)