Estratégia de Negociação Multifatorial de Probabilidade de Momentum de Microcanal Triplo

ATR MC EOD TP SL RR
Data de criação: 2025-05-20 14:16:22 última modificação: 2025-05-20 14:16:22
cópia: 0 Cliques: 450
2
focar em
319
Seguidores

Estratégia de Negociação Multifatorial de Probabilidade de Momentum de Microcanal Triplo Estratégia de Negociação Multifatorial de Probabilidade de Momentum de Microcanal Triplo

Visão geral

A estratégia de negociação de múltiplos fatores de probabilidade de tríplice microcanal é uma estratégia de negociação quantitativa baseada na forma de preço, cujo núcleo consiste em identificar a estrutura de microcanal formada por três linhas K consecutivas no mercado e avaliar os sinais de negociação de forma quantitativa por 10 fatores-chave, aumentando a probabilidade de sucesso da negociação. A estratégia é adequada para mercados financeiros em vários períodos de tempo, especialmente para operadores de linha curta diária.

Princípio da estratégia

O princípio central da estratégia de negociação de múltiplos fatores de probabilidade de dinâmica de microcanal triplo é a identificação de canais de movimento unidirecional formados por três linhas K consecutivas no mercado. A estratégia funciona através dos seguintes passos:

  1. Identificação de micro-canalA estratégia começa com a busca de três linhas K simultâneas em sequência ((todas parais ou todas negativas), o que sugere que o mercado pode estar em uma tendência unidirecional de curto prazo.

  2. Sistema de pontuação multifatorialA qualidade da forma é avaliada quantitativamente por meio da avaliação de 10 fatores-chave:

    • Fator 1: Unicidade de tamanho das três linhas K
    • Fator 2: Minimizar a linha de sombra superior/inferior
    • Fator 3: existem pequenas lacunas (o ponto mais baixo da linha K atual na forma de vários eixos é maior do que o ponto mais alto da linha K anterior aos três eixos)
    • Fator 4: Lacunas entre as entidades da linha K
    • Fator 5: Relação de preço de fechamento ((o preço de fechamento atual na forma multi-cabeça é maior do que o ponto mais alto da linha K anterior)
    • Fator 6: Baixos mais altos/Altos mais baixos
    • Fator 7: Preço de abertura acima/abaixo do preço de fechamento da linha K anterior
    • Fator 8: Sem linha inferior/superior
    • Fator 9: sem cruz ou linha K invertida
  3. Pontuação de probabilidade: baseado na taxa de sucesso básica ((70%) mais a pontuação do fator, calcular a taxa de sucesso esperada de cada sinal de negociação.

  4. Condições de entradaQuando a pontuação total ultrapassa o limite de definição (< 50%), o sistema gera um sinal de transação.

  5. Gestão de Riscos

    • Pontos de entrada múltiplos localizados no ponto mais alto da linha K alvo ou preço de fechamento (dependendo do tamanho da linha de cima)
    • Stop loss definido abaixo do preço de abertura da linha K inicial
    • Preço-alvo baseado no risco-retorno-rácio previsto
  6. Gestão de posições: baseado no capital da conta e na proporção de risco por transação (default = 1%), computação dinâmica do número de contratos

  7. Mecanismo de saídaA estratégia de stop loss de rastreamento é usada para bloquear parte do lucro após o lucro atingir o objetivo, além de estabelecer um stop loss fixo e um tempo de liquidação obrigatório por dia.

Vantagens estratégicas

Ao analisar o código em profundidade, esta estratégia revela as seguintes vantagens significativas:

  1. Pontuação quantitativa objetivaA estratégia de reduzir o julgamento subjetivo e aumentar a consistência e a objetividade das transações através de uma pontuação quantitativa de cada sinal de transação em 10 fatores.

  2. Forte adaptaçãoA estratégia pode ser aplicada a vários mercados e períodos de tempo, pois é baseada em padrões de preços generalizados e não em características específicas do mercado.

  3. Probabilidade de conduçãoA estratégia é baseada em probabilidades estatísticas, com cada sinal de negociação tendo uma probabilidade de vitória clara e esperada, permitindo que o comerciante tome decisões baseadas em dados.

  4. Controle de risco perfeitoCada transação tem uma posição de stop-loss definida e o risco é limitado a uma porcentagem fixa do capital da conta por meio de um ajuste de posição dinâmico.

  5. Mecanismo de múltiplos jogosA estratégia integra vários métodos de saída, incluindo o rastreamento de stop loss, stop loss fixo e posições de liquidação obrigatória no dia, para proteger totalmente os fundos dos comerciantes.

  6. Visualização de comentáriosA estratégia fornece um marcador de sinal de negociação detalhado e uma pontuação de fator em um gráfico, permitindo que os comerciantes entendam intuitivamente a qualidade de cada sinal.

  7. Gerenciamento preciso do tempoO risco de manter posições durante a noite é evitado por meio da limitação da janela de tempo de negociação e da obrigação de fechar as posições no final do dia.

Risco estratégico

Apesar de suas vantagens, a estratégia apresenta riscos e desafios potenciais:

  1. Risco de sobreajusteA ponderação de 10 fatores e a definição de um limiar de 10 fatores podem representar um risco de excesso de adequação aos dados históricos, o que pode levar a um mau desempenho no futuro.

  2. Riscos de mercado de baixa liquidezEm mercados com pouca liquidez, os preços de entrada e saída podem se deslocar, afetando os resultados reais das transações.

  3. Sensibilidade do parâmetroO desempenho da estratégia é altamente sensível a vários parâmetros, incluindo o comprimento do ATR, o valor da margem de vitória e a taxa de retorno do risco. A configuração inadequada dos parâmetros pode afetar significativamente o desempenho da estratégia.

  4. Dependência do ambiente de mercadoA estratégia funciona melhor em ambientes de mercado com tendências claras, podendo gerar sinais errados em mercados de turbulência ou de alta volatilidade.

  5. Escassez de sinaisA estratégia pode gerar poucos sinais de negociação em certos períodos, afetando o retorno geral, devido a várias condições rigorosas a serem cumpridas.

  6. Complexidade computacionalA avaliação multifatorial aumenta a complexidade computacional da estratégia e pode apresentar desafios de atraso em transações em tempo real.

Os métodos para mitigar esses riscos incluem:

  • Avaliação da robustez da estratégia em diferentes mercados e períodos de tempo
  • Teste em campo em pequenos estoques por um período de tempo, aumentando gradualmente o estoque
  • Regular reavaliação e ajuste de parâmetros para adaptar-se a diferentes cenários de mercado
  • Considerar a adição de filtros de cenário de mercado adicionais, como indicadores de tendência ou medição de volatilidade

Direção de otimização da estratégia

Com base na análise do código, a estratégia pode ser otimizada nas seguintes direções:

  1. Optimização de peso de fatorOtimizando o peso de todos os fatores atualmente é o mesmo (a probabilidade de sucesso de 5% de cada influência), pode-se determinar o peso de fatores ótimos através de métodos de aprendizagem de máquina, aumentando a precisão de previsão. Esta otimização pode dar maior peso a alguns fatores mais importantes e reduzir a influência de outros.

  2. Filtragem do cenário de mercado: Adicionar componentes de avaliação do cenário de mercado, como a intensidade da tendência ou os indicadores de volatilidade, para negociar apenas em condições de mercado favoráveis. Isso pode ser feito adicionando indicadores como o ADX, a porcentagem de volatilidade e outros, evitando a geração de sinais de negociação em condições de mercado desfavoráveis.

  3. Melhorias no filtro de tempoA estratégia atual usa uma janela de tempo de negociação fixa, que pode ser otimizada por meio da análise do desempenho da estratégia em diferentes períodos de tempo. Por exemplo, alguns mercados podem ser mais direcionais em determinados períodos de tempo, enquanto outros podem ser mais instáveis.

  4. Parâmetros de adaptaçãoTransformar parâmetros fixos (como a duração do ATR e a taxa de retorno do risco) em parâmetros ajustados de acordo com a dinâmica das condições do mercado. Por exemplo, o risco de retorno pode ser aumentado em mercados de alta volatilidade e reduzido em mercados de baixa volatilidade.

  5. Confirmação de múltiplos períodos de tempoIntrodução de mecanismos de confirmação de períodos de tempo mais elevados, por exemplo, exigindo que a tendência do dia-a-dia esteja de acordo com a direção atual do negócio. Isso pode aumentar significativamente a taxa de sucesso da estratégia e evitar negociações adversas.

  6. Otimização do mecanismo de saídaOtimização: O tracking stop atual pode ser melhorado para um tracking stop dinâmico baseado no ATR, ou uma saída estruturada baseada em pontos de resistência de suporte. Esta otimização pode capturar melhor a continuação da tendência e, ao mesmo tempo, sair em tempo hábil quando a tendência termina.

  7. Integração de aprendizagem de máquinaPor exemplo, pode-se usar um modelo de floresta aleatória ou árvore de elevação de gradiente para classificar sinais históricos e extrair padrões mais complexos.

Resumir

A estratégia de negociação multifatorial de probabilidade de dinâmica de microcanal triplo é um método de negociação sistematizado que combina a identificação de formas de preço e a pontuação multifatorial. A estratégia fornece uma estrutura de decisão de negociação objetiva e quantificável, avaliando a qualidade do sinal usando 10 fatores-chave, identificando a estrutura de microcanal formada por três linhas K consecutivas.

As vantagens centrais desta estratégia são o seu sistema de pontuação de sinais objetivo, o seu rigoroso controlo de risco e o seu mecanismo de saída flexível. Ao calcular a probabilidade de sucesso esperada de cada sinal, os operadores podem tomar decisões mais baseadas em dados do que em sentimentos subjetivos.

Apesar de desafios como a sensibilidade de parâmetros e a dependência do ambiente de mercado, o desempenho da estratégia deve ser melhorado com a orientação de otimização proposta, especialmente a otimização de fator de peso, filtragem do ambiente de mercado e melhorias no mecanismo de saída. Além disso, a introdução de tecnologias de aprendizagem de máquina pode ser uma direção importante para o futuro da estratégia, com potencial para descobrir padrões mais complexos a partir de dados históricos.

Para os comerciantes de quantidade, esta estratégia fornece uma estrutura de base sólida que pode ser personalizada e ampliada de acordo com as preferências de risco e estilo de negociação individuais. No final das contas, o sucesso da estratégia depende não apenas da sua implementação técnica, mas também da compreensão e disciplina do comerciante em executar as regras da estratégia.

Código-fonte da estratégia
/*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)