Identificação de estrutura de preços multinível e sistema de negociação quantitativa de lacuna de valor justo

CHoCH FVG Pivot Points Risk-Reward Ratio Price Structure SWING POINTS Quantitative Trading
Data de criação: 2025-06-03 10:50:29 última modificação: 2025-06-03 10:50:29
cópia: 0 Cliques: 347
2
focar em
319
Seguidores

Identificação de estrutura de preços multinível e sistema de negociação quantitativa de lacuna de valor justo Identificação de estrutura de preços multinível e sistema de negociação quantitativa de lacuna de valor justo

Visão geral

O sistema de negociação de quantificação da estrutura de preços de múltiplos níveis com a diferença de justo valor é uma estratégia de negociação automatizada baseada na ação dos preços, que combina dois conceitos de negociação chave: o traço de mudança (CHoCH, Change of Character) e a diferença de justo valor (FVG, Fair Value Gap). A estratégia captura oportunidades de negociação de alta probabilidade identificando pontos de mudança na estrutura do mercado e áreas de desequilíbrio, permitindo uma entrada e saída precisas quando os preços recuam para a diferença de justo valor. Esta abordagem sistematizada permite aos comerciantes analisar o mercado objetivamente, eliminar fatores emocionais e ter regras claras de gerenciamento de risco.

Princípio da estratégia

O sistema de negociação quantitativa funciona de acordo com os seguintes princípios:

  1. Identificação da estrutura de preçosA tecnologia Pivot Points identifica os pontos altos e baixos de oscilação no mercado, que são componentes-chave da estrutura do mercado. O sistema usa um comprimento de oscilação parametrizado (default 5 ciclos) para determinar esses pontos-chave.

  2. Detecção de características de mudança:

    • Multi-headed CHoCH: Preço quebrando o anterior alto de oscilação após a formação de um baixo baixo
    • Blank CHoCH: Preços quebrando baixos de flutuação anteriores após a formação de altas mais altas O sistema exige que o intervalo de tempo de formação do CHoCH atenda ao requisito de distância mínima (default 10 ciclos) para filtrar os sinais inválidos.
  3. Identificação de lacunas no valor justo (FVG):

    • FVG multicanal: os baixos do ciclo atual são maiores do que os altos dos dois ciclos anteriores
    • FVG em branco: o ponto alto da curva atual está abaixo do ponto baixo das duas curvas anteriores O sistema estabelece um limite mínimo de tamanho de FVG (de 2 pontos por padrão) para garantir que apenas os desequilíbrios de preços significativos sejam capturados.
  4. Lógica de entrada:

    • Entrada de múltiplos: após confirmação de múltiplos CHoCH, espera a retirada do preço para a área de múltiplos FVG
    • Entrada de caça-níqueis: após a confirmação de caça-níqueis CHoCH, espera que o preço volte para a área de caça-níqueis FVG O preço do ingresso é definido como o ponto médio da área FVG, oferecendo um preço de entrada equilibrado.
  5. Mecanismo de gestão de riscos:

    • Parar a perda de configuração no ponto mais próximo de balanço baixo (multi-cabeça) ou balanço alto (cabeça vazia)
    • Stop-loss baseado em RRR (default 2.0) ou pontuação de objetivo fixo
    • Função de ajuste automático de posições opcional, que calcula o tamanho da posição com base na porcentagem de risco da conta e na distância de parada

Vantagens estratégicas

Após uma análise aprofundada do código, a estratégia tem as seguintes vantagens significativas:

  1. Análise de mercado estruturadaA estratégia baseia-se em mudanças na estrutura de preços e no princípio do desequilíbrio do mercado, em vez de um simples cruzamento de indicadores, o que lhe confere uma vantagem única na identificação de pontos de inflexão no mercado.

  2. A hora exata de entradaA estratégia é que, ao esperar a formação de FVG após o CHoCH, é possível entrar no mercado a preços favoráveis, evitando a perseguição e aumentando a qualidade de entrada.

  3. Gestão de risco adaptativaA estratégia é ajustar automaticamente a posição de parada de acordo com a estrutura real do mercado, em vez de usar um número fixo de pontos. Esta abordagem é mais adequada às características reais de flutuação do mercado.

  4. Elementos de transação visuaisA estratégia oferece uma visualização completa, incluindo etiquetas CHoCH, caixas FVG, pontos de oscilação e linhas de negociação, permitindo que os comerciantes entendam intuitivamente a estrutura do mercado e a lógica da estratégia.

  5. Gestão de posição flexível: Ajuste automático do tamanho da posição através da percentagem de risco, tanto para proteger os fundos da conta quanto para ajustar automaticamente a abertura de risco de acordo com a volatilidade.

  6. Desenho para otimizar a performance: O código inclui um mecanismo para limpar as caixas antigas do FVG, garantindo que o desempenho do sistema não seja reduzido durante longos períodos de funcionamento.

  7. Monitoramento Integrado de DesempenhoA estratégia fornece uma tabela de desempenho em tempo real, incluindo indicadores-chave, como o estado da estratégia, a taxa de vitória e os fatores de lucro, para facilitar a avaliação do desempenho da estratégia pelos comerciantes.

Risco estratégico

Embora a estratégia tenha sido concebida com raciocínio lógico, existem alguns riscos e limitações potenciais:

  1. Risco de Falso BreakoutOs sinais de CHoCH podem ser falsas rupturas, levando o preço a retroceder rapidamente e a desencadear um stop loss. Para mitigar este risco, pode-se considerar a adição de mecanismos de confirmação, como esperar a confirmação da ruptura da linha K de Dogen.

  2. Risco de lacunaEm mercados com muita volatilidade ou negociação durante a noite, o preço pode saltar acima da posição de parada, resultando em perdas reais superiores às esperadas. Recomenda-se o uso de ordens de parada garantida (se possível) ou reduzir o tamanho da posição.

  3. Sensibilidade do parâmetroO desempenho da estratégia é altamente dependente da configuração de parâmetros, como comprimento de oscilação, distância mínima de CHoCH e tamanho de FVG. Diferentes mercados e prazos de tempo podem exigir diferentes combinações de parâmetros, sendo recomendável uma otimização de feedback abrangente.

  4. Dependência do ambiente de mercadoA estratégia funciona melhor em mercados de tendência, e pode gerar sinais errados frequentes em mercados de liquidação. Considere adicionar filtros de tendência ou mecanismos de identificação de estado de mercado.

  5. Complexidade computacionalA utilização de múltiplos arrays e verificações condicionais pode causar problemas de desempenho em equipamentos de baixa configuração. Embora o código tenha incluído mecanismos de limpeza, a operação a longo prazo ainda deve ter em conta o consumo de recursos.

  6. Inadequada gestão da retiradaA estratégia atual não leva em consideração o ajuste dinâmico do tamanho da posição em diferentes condições de mercado, o que pode levar a grandes retrações em um ambiente persistentemente desfavorável. Recomenda-se a implementação de limites de retirada de contas e um mecanismo de redução gradual da posição.

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

Baseado na análise do código, propõe-se a seguinte direção de otimização:

  1. Confirmação do Multi-Tempos: Introdução de análise de estrutura de mercado em quadros de tempo mais elevados, com negociação apenas na direção da tendência principal. Por exemplo, pode ser adicionado um filtro de tendência do dia, executando negociações apenas quando a tendência do dia é consistente.

  2. Optimização de parâmetros dinâmicos: Implementação de sistemas de parâmetros de ajuste automático com base na volatilidade do mercado, como aumentar o tamanho mínimo de FVG e os requisitos de distância de CHoCH durante a alta volatilidade e reduzir esses parâmetros durante a baixa volatilidade.

  3. Optimização de entrada:

    • Implementar estratégias de entrada em massa, como a criação de vários pontos de entrada em diferentes níveis da área FVG
    • Adição de confirmações de entrada adicionais, como o volume de transação ou a confirmação do indicador de volume
  4. Gestão de Riscos reforçada:

    • Implementação de função de rastreamento de stop loss, ajustando automaticamente a posição de stop loss conforme o lucro da negociação
    • Adição de função de lucro parcial, que elimina parte da posição quando um determinado nível de lucro é atingido
    • Introdução de limites de retração máxima, reduzindo automaticamente o tamanho da posição ou suspensão da negociação quando a retração da conta atinge o seu valor de queda
  5. Adaptação do mercado:

    • Adicionar identificação de estado de mercado (trend/consolidação/alta volatilidade) e ajustar parâmetros de estratégia de acordo com diferentes estados
    • Reduzir ou evitar transações em mercados consolidados
    • Tomar posições mais conservadoras quando a volatilidade aumenta de repente
  6. Aprendizagem de máquinaIntrodução de algoritmos de aprendizado de máquina para analisar os padrões históricos de CHoCH e FVG, identificar características de padrões com maior taxa de sucesso e ajustar os pesos de decisão de entrada de acordo com isso.

  7. Filtro de tempo de transaçãoO objetivo é: adicionar filtros de tempo de negociação, evitando os grandes anúncios de notícias e os períodos de alta volatilidade durante o início e o fim do mercado, concentrando-se nos períodos de negociação com melhor liquidez.

Resumir

O sistema de negociação de quantificação da estrutura de preços de múltiplos níveis com identificação de brechas de justo valor é uma solução de negociação completa que combina a teoria avançada do comportamento de preços. Ele protege o capital de negociação através da identificação de mudanças na estrutura do mercado (CHoCH) e de áreas de desequilíbrio de preços (FVG), na entrada do nível de preço ideal e com uma abordagem sistematizada de gerenciamento de risco.

A maior vantagem da estratégia reside na sua metodologia de análise baseada na estrutura real do mercado, em vez de depender de indicadores de atraso, o que lhe permite identificar pontos de inflexão do mercado mais cedo. Além disso, a funcionalidade de visualização avançada e o sistema de monitoramento de desempenho permitem aos comerciantes entender intuitivamente a lógica da estratégia e avaliar sua eficácia.

Embora existam riscos de falsas rupturas e sensibilidade de parâmetros, a estabilidade e o desempenho da estratégia podem ser significativamente melhorados com a orientação de otimização proposta, especialmente a confirmação de múltiplos prazos, o ajuste de parâmetros dinâmicos e o aumento da função de gerenciamento de risco.

A estratégia oferece uma estrutura sólida para os investidores que desejam adotar um método sistemático de negociação, absorvendo a essência das negociações tradicionais de comportamento de preços e aproveitando a objetividade e a disciplina dos sistemas de quantificação. Através da otimização contínua dos parâmetros e do ajuste de adaptabilidade do mercado, a estratégia tem o potencial de alcançar um desempenho de negociação estável em vários ambientes de mercado.

Código-fonte da estratégia
/*backtest
start: 2024-06-03 00:00:00
end: 2025-06-02 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=5
strategy("ICT CHoCH & FVG Strategy - NQ1!", overlay=true, pyramiding=0, calc_on_every_tick=false, calc_on_order_fills=false, max_boxes_count=500, max_lines_count=100, max_labels_count=100)

// ============================================================================
// INPUT PARAMETERS
// ============================================================================

// Strategy Settings
riskRewardRatio = input.float(2.0, title="Risk:Reward Ratio", minval=0.5, maxval=10.0, group="Strategy Settings")
fixedTarget = input.int(40, title="Fixed Target (Ticks)", minval=5, maxval=200, group="Strategy Settings")
useRRTarget = input.bool(true, title="Use Risk:Reward Target", tooltip="If false, uses fixed target", group="Strategy Settings")
riskPercent = input.float(2.0, title="Risk % of Account", minval=0.1, maxval=10.0, group="Strategy Settings")
useAutoSize = input.bool(false, title="Auto Size Positions", tooltip="Size based on risk % and stop distance", group="Strategy Settings")

// Visual Settings
showCHoCH = input.bool(true, title="Show CHoCH Labels", group="Visual Settings")
showFVG = input.bool(true, title="Show FVG Boxes", group="Visual Settings")
showSwings = input.bool(true, title="Show Swing Points", group="Visual Settings")
showTradeLines = input.bool(true, title="Show Entry/SL/TP Lines", group="Visual Settings")

// CHoCH Detection Settings
swingLength = input.int(5, title="Swing Detection Length", minval=2, maxval=20, group="CHoCH Settings")
minCHoCHDistance = input.int(10, title="Min CHoCH Distance (bars)", minval=5, maxval=50, group="CHoCH Settings")

// FVG Settings
minFVGSize = input.float(2.0, title="Min FVG Size (ticks)", minval=0.25, maxval=10.0, group="FVG Settings")
maxFVGAge = input.int(50, title="Max FVG Age (bars)", minval=10, maxval=200, group="FVG Settings")

// ============================================================================
// VARIABLES AND ARRAYS
// ============================================================================

// Swing point detection
var float lastSwingHigh = na
var float lastSwingLow = na
var int lastSwingHighBar = na
var int lastSwingLowBar = na

// CHoCH tracking
var bool bullishCHoCH = false
var bool bearishCHoCH = false
var float chochLevel = na
var int chochBar = na
var bool waitingForFVG = false

// FVG tracking
var array<box> bullishFVGs = array.new<box>()
var array<box> bearishFVGs = array.new<box>()
var float activeFVGTop = na
var float activeFVGBottom = na
var bool lookingForEntry = false

// Trade management
var float stopLossLevel = na
var float takeProfitLevel = na
var bool inPosition = false

// ============================================================================
// HELPER FUNCTIONS
// ============================================================================

// Convert ticks to price for NQ
ticksToPrice(ticks) => ticks * 0.25

// Calculate position size based on risk
calcPositionSize(stopDistance) =>
    if useAutoSize and strategy.equity > 0
        accountValue = strategy.equity
        riskAmount = accountValue * (riskPercent / 100)
        stopDistancePrice = stopDistance * syminfo.mintick
        math.max(1, math.floor(riskAmount / stopDistancePrice))
    else
        1

// ============================================================================
// SWING POINT DETECTION
// ============================================================================

// Detect swing highs and lows
swingHigh = ta.pivothigh(high, swingLength, swingLength)
swingLow = ta.pivotlow(low, swingLength, swingLength)

// Update swing points
if not na(swingHigh)
    lastSwingHigh := swingHigh
    lastSwingHighBar := bar_index - swingLength
    if showSwings
        label.new(bar_index - swingLength, swingHigh, "SH", style=label.style_triangledown, color=color.red, size=size.tiny)

if not na(swingLow)
    lastSwingLow := swingLow
    lastSwingLowBar := bar_index - swingLength
    if showSwings
        label.new(bar_index - swingLength, swingLow, "SL", style=label.style_triangleup, color=color.green, size=size.tiny)

// ============================================================================
// CHoCH DETECTION
// ============================================================================

// Check for bullish CHoCH (break above prior swing high after making lower low)
bullishCHoCHCondition = not na(lastSwingHigh) and not na(lastSwingLow) and 
                       high > lastSwingHigh and 
                       lastSwingLow < lastSwingHigh and
                       bar_index - lastSwingHighBar > minCHoCHDistance and
                       strategy.position_size == 0

// Check for bearish CHoCH (break below prior swing low after making higher high)
bearishCHoCHCondition = not na(lastSwingHigh) and not na(lastSwingLow) and 
                       low < lastSwingLow and 
                       lastSwingHigh > lastSwingLow and
                       bar_index - lastSwingLowBar > minCHoCHDistance and
                       strategy.position_size == 0

// Process CHoCH signals
if bullishCHoCHCondition and not bullishCHoCH
    bullishCHoCH := true
    bearishCHoCH := false
    chochLevel := lastSwingHigh
    chochBar := bar_index
    waitingForFVG := true
    lookingForEntry := false
    


if bearishCHoCHCondition and not bearishCHoCH
    bearishCHoCH := true
    bullishCHoCH := false
    chochLevel := lastSwingLow
    chochBar := bar_index
    waitingForFVG := true
    lookingForEntry := false
    


// ============================================================================
// FVG DETECTION
// ============================================================================

// Check for FVG formation (3-candle pattern)
if bar_index >= 2
    // Bullish FVG: low[0] > high[2]
    bullishFVG = low[0] > high[2] and (low[0] - high[2]) >= ticksToPrice(minFVGSize)
    
    // Bearish FVG: high[0] < low[2]  
    bearishFVG = high[0] < low[2] and (low[2] - high[0]) >= ticksToPrice(minFVGSize)
    
    // Process bullish FVG after bullish CHoCH
    if bullishFVG and bullishCHoCH and waitingForFVG and bar_index > chochBar
        fvgTop = low[0]
        fvgBottom = high[2]
        

        
        // Set active FVG for entry
        activeFVGTop := fvgTop
        activeFVGBottom := fvgBottom
        waitingForFVG := false
        lookingForEntry := true
    
    // Process bearish FVG after bearish CHoCH
    if bearishFVG and bearishCHoCH and waitingForFVG and bar_index > chochBar
        fvgTop = low[2]
        fvgBottom = high[0]
        

        
        // Set active FVG for entry
        activeFVGTop := fvgTop
        activeFVGBottom := fvgBottom
        waitingForFVG := false
        lookingForEntry := true

// ============================================================================
// ENTRY LOGIC
// ============================================================================

// Long entry: price touches bullish FVG after bullish CHoCH
longCondition = lookingForEntry and bullishCHoCH and 
               not na(activeFVGTop) and not na(activeFVGBottom) and
               low <= activeFVGTop and high >= activeFVGBottom and
               strategy.position_size == 0

// Short entry: price touches bearish FVG after bearish CHoCH  
shortCondition = lookingForEntry and bearishCHoCH and  not na(activeFVGTop) and not na(activeFVGBottom) and low <= activeFVGTop and high >= activeFVGBottom and  strategy.position_size == 0

// Process long entries
if longCondition
    var float entryPrice = na
    var float stopLoss = na
    var float takeProfit = na
    
    entryPrice := math.avg(activeFVGTop, activeFVGBottom)
    stopLoss := lastSwingLow
    stopDistance = entryPrice - stopLoss
    
    if useRRTarget
        takeProfit := entryPrice + (stopDistance * riskRewardRatio)
    else
        takeProfit := entryPrice + ticksToPrice(fixedTarget)
    
    // Calculate position size
    qty = calcPositionSize(stopDistance / syminfo.mintick)
    
    // Enter trade
    strategy.entry("Long", strategy.long, qty=qty)
    strategy.exit("Long Exit", "Long", stop=stopLoss, limit=takeProfit)
    
    // Update tracking
    stopLossLevel := stopLoss
    takeProfitLevel := takeProfit
    inPosition := true
    lookingForEntry := false
    
    // Reset CHoCH state
    bullishCHoCH := false
    activeFVGTop := na
    activeFVGBottom := na
    


// Process short entries
if shortCondition
    var float entryPrice = na
    var float stopLoss = na
    var float takeProfit = na
    
    entryPrice := math.avg(activeFVGTop, activeFVGBottom)
    stopLoss := lastSwingHigh
    stopDistance = stopLoss - entryPrice
    
    if useRRTarget
        takeProfit := entryPrice - (stopDistance * riskRewardRatio)
    else
        takeProfit := entryPrice - ticksToPrice(fixedTarget)
    
    // Calculate position size
    qty = calcPositionSize(stopDistance / syminfo.mintick)
    
    // Enter trade
    strategy.entry("Short", strategy.short, qty=qty)
    strategy.exit("Short Exit", "Short", stop=stopLoss, limit=takeProfit)
    
    // Update tracking
    stopLossLevel := stopLoss
    takeProfitLevel := takeProfit
    inPosition := true
    lookingForEntry := false
    
    // Reset CHoCH state
    bearishCHoCH := false
    activeFVGTop := na
    activeFVGBottom := na
    

// ============================================================================
// POSITION MANAGEMENT
// ============================================================================

// Reset position state when trade is closed
if inPosition and strategy.position_size == 0
    inPosition := false
    stopLossLevel := na
    takeProfitLevel := na

// ============================================================================
// VISUAL SIGNALS
// ============================================================================

// Plot entry signals
plotshape(longCondition, title="Long Entry", location=location.belowbar, color=color.green, 
          style=shape.triangleup, size=size.normal)

plotshape(shortCondition, title="Short Entry", location=location.abovebar, color=color.red, 
          style=shape.triangledown, size=size.normal)

// Plot active stop loss and take profit levels
plot(inPosition ? stopLossLevel : na, title="Stop Loss", color=color.red, linewidth=2, style=plot.style_linebr)
plot(inPosition ? takeProfitLevel : na, title="Take Profit", color=color.green, linewidth=2, style=plot.style_linebr)

// ============================================================================
// CLEANUP
// ============================================================================

// Clean up old FVG boxes (helps with performance)
if bar_index % 100 == 0
    while array.size(bullishFVGs) > 20
        box.delete(array.shift(bullishFVGs))
    while array.size(bearishFVGs) > 20
        box.delete(array.shift(bearishFVGs))

// ============================================================================
// ALERTS
// ============================================================================

// Alert conditions
alertcondition(longCondition, title="Long Entry Signal", message="ICT Strategy: Long entry at FVG - SL: {{strategy.position_avg_price}}")
alertcondition(shortCondition, title="Short Entry Signal", message="ICT Strategy: Short entry at FVG - SL: {{strategy.position_avg_price}}")