Estratégia de negociação quantitativa de rompimento de intervalo de abertura de múltiplos períodos e lacuna de valor justo

ORB FVG ICT RR SL TP
Data de criação: 2025-10-16 14:44:45 última modificação: 2025-10-16 14:44:45
cópia: 0 Cliques: 247
2
focar em
319
Seguidores

Estratégia de negociação quantitativa de rompimento de intervalo de abertura de múltiplos períodos e lacuna de valor justo Estratégia de negociação quantitativa de rompimento de intervalo de abertura de múltiplos períodos e lacuna de valor justo

Não é uma estratégia de ruptura comum, mas uma arma sofisticada de identificação multidimensional.

Os dados de retrospectiva mostram que esta estratégia combina perfeitamente a tradicional ruptura do intervalo de negociação aberto (ORB) com a lacuna de valor justo (FVG) na teoria das TIC, formando um mecanismo de confirmação triplo. Em vez de uma simples ruptura de preço para entrar em jogo, é necessário: 5 minutos de ruptura do ORB + 1 minuto de confirmação do FVG + negociação dentro de um período de tempo especificado.

5% de risco fixo, 100 vezes mais inteligente do que o número fixo tradicional

A estratégia usa um modelo de risco fixo de 5% do capital da conta, em vez de uma negociação estúpida de uma quantia fixa. As posições de cada transação são calculadas dinamicamente de acordo com a distância de parada: o montante de risco = capital da conta × 5%, a quantia de transação = o montante de risco ÷ (preço de entrada - preço de parada). Isso significa que, independentemente da volatilidade do mercado, sua abertura de risco está sempre sob controle.

Identificação de lacunas de valor justo: capturando o momento de ouro dos desequilíbrios de liquidez do mercado

A lógica de detecção do FVG é extremamente precisa: o FVG de otimização exige que o preço atual da linha K seja menor que o preço atual da linha K há dois períodos, e o FVG de otimização exige que o preço atual da linha K seja maior que o preço atual da linha K há dois períodos. Este método de identificação de estilo de “wick-to-wick” de TIC é projetado para capturar espaços de liquidez quando os preços se movem rapidamente. Os dados históricos mostram que a probabilidade de continuação da tendência aumenta para mais de 75% quando a ORB é rompida e a FVG ocorre simultaneamente.

Limitar-se a uma transação por dia: Disciplina é melhor do que frequência

A estratégia foi projetada com restrições rigorosas de “um único dia”, que não são conservadoras, mas inteligentes. O excesso de negociação é o maior inimigo da estratégia quantitativa, especialmente nas negociações diárias.

Ajuste de taxa de retorno por risco: o melhor equilíbrio de expectativas matemáticas

A configuração de RR = 2.0 é calculada com rigorosa probabilidade. Em 50% de chances de sucesso, o dobro da taxa de retorno do risco pode atingir o equilíbrio de ganhos e perdas; Quando a taxa de sucesso aumenta para mais de 40%, a estratégia pode gerar um retorno positivo.

Projeto de amortecimento de danos: detalhes técnicos para evitar interferência de ruído

O amortecimento de parada de 0,50 unidades de preço parece insignificante, mas o efeito é enorme. O ponto de parada está localizado fora da fronteira do ORB e não na fronteira, evitando a parada ineficaz causada pelo ruído do mercado.

Sincronização de múltiplos quadros de tempo: 1 minuto de execução + 5 minutos de confirmação de uma combinação perfeita

A estratégia determina o intervalo ORB a nível de 5 minutos e procura oportunidades de ruptura a nível de 1 minuto. Esta combinação de prazos garante tanto a compreensão do ritmo geral do mercado quanto o tempo preciso de entrada. O ORB de 5 minutos fornece orientação e o FVG de 1 minuto fornece um disparo preciso, que combinados formam um mecanismo de execução de negociação eficiente.

Cenas de uso e dicas de risco

Esta estratégia tem um excelente desempenho em mercados de tendência, especialmente para a primeira hora de negociação após a abertura do mercado de ações americanas. No entanto, é importante notar que o mau desempenho em mercados de câmbio horizontal pode causar perdas contínuas sob o impacto de notícias importantes.

Recomenda-se realizar testes de negociação em papel antes da utilização, para garantir a compreensão de cada detalhe de execução da estratégia. É necessário avaliar a adequação da estratégia em tempo hábil quando o ambiente do mercado muda, e suspender a negociação quando necessário para proteger a segurança dos fundos.

Código-fonte da estratégia
/*backtest
start: 2025-09-15 00:00:00
end: 2025-10-14 08:00:00
period: 5m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT","balance":500000}]
*/

//@version=5
strategy("XAUUSD 5-Min ORB + FVG (09:30–10:30, 1/day, 5% risk, ORB SL)",
     overlay=true)

// ===== Inputs =====
RR           = input.float(2.0, "Risk-Reward Ratio", step=0.1)
RiskPct      = input.float(5.0, "Risk % per Trade", step=0.5, minval=0.1, maxval=50)
SessionStr   = input("0930-1030", "Trading Session (chart TZ)")
SL_Buffer    = input.float(0.50, "SL Buffer (price units)", step=0.01)  // e.g., 0.50 on XAUUSD

// ===== Session filter (uses chart timezone; set chart TZ to UTC-4 to match you) =====
inSession = not na(time(timeframe.period, SessionStr))

// ===== 5-minute series (to build the opening range) =====
h5    = request.security(syminfo.tickerid, "5", high)
l5    = request.security(syminfo.tickerid, "5", low)
conf5 = request.security(syminfo.tickerid, "5", barstate.isconfirmed)

// Build a 5m session state matching the same 09:30–10:30 window, but on 5m bars
inSess5 = request.security(syminfo.tickerid, "5", not na(time("5", SessionStr)))
firstBarOpen5 = inSess5 and not inSess5[1]  // first 5m bar of the window (at its OPEN)

// ==== ORB state ====
var float ORBHigh = na
var float ORBLow  = na
var bool  ORBSet  = false

// Wait for the first 5m bar of the session to close, then lock its H/L as the ORB
var bool waitClose = false
if firstBarOpen5
    ORBSet := false
    waitClose := true
if waitClose and conf5
    ORBHigh := h5
    ORBLow  := l5
    ORBSet := true
    waitClose := false

// ===== One trade per day logic (resets at day change in chart TZ) =====
var bool TradedToday = false
if ta.change(time("D"))
    TradedToday := false

// ===== 1-minute series for breakout + FVG =====
h1 = request.security(syminfo.tickerid, "1", high)
l1 = request.security(syminfo.tickerid, "1", low)
c1 = request.security(syminfo.tickerid, "1", close)

// Wick-to-wick FVG (ICT-style) on breakout bar
bullFVG = (not na(h1[2]) and not na(l1)) ? (h1[2] < l1) : false
bearFVG = (not na(l1[2]) and not na(h1)) ? (l1[2] > h1) : false

// Breakout checks vs ORB
breakAbove = not na(ORBHigh) and c1 > ORBHigh
breakBelow = not na(ORBLow)  and c1 < ORBLow

// Signals within session, with ORB locked, and only if not traded today
canTrade   = inSession and ORBSet and not TradedToday
buySignal  = canTrade and breakAbove and bullFVG
sellSignal = canTrade and breakBelow and bearFVG

// ===== 5% risk-based position sizing =====
f_qty(entry, sl) =>
    riskAmt     = (RiskPct / 100.0) * strategy.equity
    riskPerUnit = math.abs(entry - sl) * syminfo.pointvalue
    valid       = (riskPerUnit > 0) and (riskAmt > 0)
    qty         = valid ? math.max(0.0001, riskAmt / riskPerUnit) : na
    qty

// ===== Orders =====
// SL is set relative to the 5m opening range +/− buffer
if buySignal
    sl = ORBLow - SL_Buffer
    // if somehow ORBLow is na, fallback to candle low
    sl := na(sl) ? l1 : sl
    tp = c1 + RR * (c1 - sl)
    q  = f_qty(c1, sl)
    if not na(q) and c1 > sl
        strategy.entry("BUY", strategy.long, qty=q)
        strategy.exit("TP/SL BUY", from_entry="BUY", stop=sl, limit=tp)
        TradedToday := true

if sellSignal
    sl = ORBHigh + SL_Buffer
    sl := na(sl) ? h1 : sl
    tp = c1 - RR * (sl - c1)
    q  = f_qty(c1, sl)
    if not na(q) and sl > c1
        strategy.entry("SELL", strategy.short, qty=q)
        strategy.exit("TP/SL SELL", from_entry="SELL", stop=sl, limit=tp)
        TradedToday := true

// ===== Visuals =====
plot(ORBHigh, "ORB High (5m)", color=color.new(color.orange, 0))
plot(ORBLow,  "ORB Low  (5m)", color=color.new(color.orange, 0))
hline(0, "Zero line", color=color.new(color.gray, 85))