Estratégia de negociação inovadora de intervalo de abertura dinâmica de alta frequência

ORB RANGE BREAKOUT HFT EST OHLC SL TP
Data de criação: 2025-02-21 14:02:59 última modificação: 2025-02-21 14:02:59
cópia: 2 Cliques: 519
2
focar em
319
Seguidores

Estratégia de negociação inovadora de intervalo de abertura dinâmica de alta frequência Estratégia de negociação inovadora de intervalo de abertura dinâmica de alta frequência

Visão geral

A estratégia é um sistema de negociação de alta frequência baseado em breakouts no intervalo de abertura, com foco no intervalo de preços formado entre 9:30-9:45 horas da manhã do dia de negociação. A estratégia toma decisões de negociação observando se o preço vai quebrar esse intervalo de 15 minutos, enquanto combina uma configuração de stop loss e profit dinâmica para obter o melhor equilíbrio de risco e ganho. O sistema também inclui o filtro do dia de negociação, que pode ser seletivamente negociado de acordo com as características do mercado em diferentes períodos de tempo.

Princípio da estratégia

A lógica central da estratégia é estabelecer um intervalo de preços dentro de 15 minutos após a abertura de cada dia de negociação (09:30-9:45 EST) e registrar os preços mais altos e mais baixos durante esse período. Uma vez que o intervalo é formado, a estratégia monitora a quebra do preço antes das 12h do dia:

  • Quando o preço ultrapassar um intervalo, abrir uma posição com um stop loss de 0,5 vezes o tamanho do intervalo e um stop loss de 3 vezes o tamanho do stop loss
  • Quando o preço quebra a faixa de baixa, a abertura de posições para fechar, parar e parar o mesmo princípio de configuração A estratégia também inclui mecanismos para evitar a repetição de transações, garantindo que apenas uma transação seja executada por dia e que todas as posições sejam liquidadas no encerramento.

Vantagens estratégicas

  1. Eficiência de tempo: estratégia focada nos períodos de negociação mais ativos após a abertura do mercado, capaz de capturar oportunidades de grande volatilidade no início do mercado
  2. Controle de risco: configuração de stop loss dinâmica, com parâmetros de gerenciamento de risco baseados na amplitude de flutuação real
  3. Flexibilidade de negociação: oferece a capacidade de escolher os dias de negociação por semana, evitando dias de negociação desfavoráveis em determinadas circunstâncias de mercado
  4. Execução clara: os sinais de negociação são claros, as condições de entrada e saída são claras e não são influenciadas por julgamentos subjetivos
  5. Alto grau de automação: execução totalmente automatizada, reduzindo o impacto emocional da intervenção humana

Risco estratégico

  1. Risco de Falsa Breakout: A primeira breakout após a formação de uma área de jogo aberta pode ser uma breakout falsa, resultando em uma saída de perda
  2. Decaimento horário: estratégia de negociar apenas no horário da manhã, podendo perder boas oportunidades em outros horários
  3. Dependência de volatilidade: em dias de menor volatilidade do mercado, a estratégia pode ser difícil de obter espaço de ganho suficiente
  4. Efeitos de deslizamento: como uma estratégia de negociação de alta frequência, pode ter grandes perdas de deslizamento durante a execução
  5. Dependência do cenário de mercado: o desempenho da estratégia pode ser significativamente influenciado pelo cenário geral do mercado

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

  1. Introdução do indicador de volume de transação: pode-se filtrar o falso sinal de ruptura observando o volume de transação no momento da ruptura
  2. Ajustamento dinâmico do tempo de negociação: Optimizar a janela de tempo de negociação de acordo com as características do período de atividade de diferentes variedades
  3. Aumento do filtro de tendências: determinação de tendências em combinação com períodos de tempo maiores, aumentando a precisão da direção das negociações
  4. Optimizar a configuração de stop loss: pode-se considerar o uso de indicadores ATR dinâmicos para definir a distância de stop loss
  5. Adição de filtro de volatilidade: Avaliação do nível de volatilidade antes da abertura para decidir se a transação será executada no dia

Resumir

Trata-se de uma estratégia de ruptura de intervalos de abertura racional e logicamente rigorosa, projetada para capturar oportunidades de negociação, concentrando-se nos momentos mais ativos do mercado. A vantagem da estratégia reside na sua lógica de negociação clara e no seu mecanismo de controle de risco perfeito, mas também exige atenção aos riscos potenciais, como a falsa ruptura e a dependência do ambiente de mercado.

Código-fonte da estratégia
/*backtest
start: 2025-01-21 00:00:00
end: 2025-01-24 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Binance","currency":"DOGE_USDT"}]
args: [["MaxCacheLen",580,358374]]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © UKFLIPS69

//@version=6
strategy("ORB", overlay=true, fill_orders_on_standard_ohlc = true)

trade_on_monday = input(false, "Trade on Monday") 
trade_on_tuesday = input(true, "Trade on Tuesday") 
trade_on_wednesday = input(true, "Trade on Wednesday")
trade_on_thursday = input(false, "Trade on Thursday")
trade_on_friday = input(true, "Trade on Friday")
// Get the current day of the week (1=Monday, ..., 6=Saturday, 0=Sunday)
current_day = dayofweek(time) 
current_price = request.security(syminfo.tickerid, "1", close)
// Define trading condition based on the day of the week
is_trading_day = (trade_on_monday and current_day == dayofweek.monday) or
                 (trade_on_tuesday and current_day == dayofweek.tuesday) or
                 (trade_on_wednesday and current_day == dayofweek.wednesday) or
                 (trade_on_thursday and current_day == dayofweek.thursday) or
                 (trade_on_friday and current_day == dayofweek.friday)
// ─── Persistent variables ─────────────────────────
var line  orHighLine       = na   // reference to the drawn line for the OR high
var line  orLowLine        = na   // reference to the drawn line for the OR low
var float orHigh           = na   // stores the open-range high
var float orLow            = na   // stores the open-range low
var int   barIndex930      = na   // remember the bar_index at 9:30
var bool  rangeEstablished = false
var bool  tradeTakenToday  = false  // track if we've opened a trade for the day

// ─── Detect times ────────────────────────────────
is930  = (hour(time, "America/New_York") == 9 and minute(time, "America/New_York") == 30)
is945  = (hour(time, "America/New_York") == 9 and minute(time, "America/New_York") == 45)

// Between 9:30 and 9:44 (inclusive of 9:30 bar, exclusive of 9:45)?
inSession = (hour(time, "America/New_York") == 9 and minute(time, "America/New_York") >= 30 and minute(time, "America/New_York") < 45)

// ─── Reset each day at 9:30 ─────────────────────
if is930
    // Reset orHigh / orLow
    orHigh := na
    orLow  := na
    rangeEstablished := false
    tradeTakenToday  := false
    // Record the bar_index for 9:30
    barIndex930 := bar_index
// ─── ONLY FORM OR / TRADE IF TODAY IS ALLOWED ─────────────────────
if is_trading_day
// ─── Accumulate the OR high/low from 9:30 to 9:44 ─
    if inSession
        orHigh := na(orHigh) ? high : math.max(orHigh, high)
        orLow  := na(orLow)  ? low  : math.min(orLow, low)

// ─── Exactly at 9:45, draw the lines & lock range ─
    if is945 and not na(orHigh) and not na(orLow)

    // Mark that the OR is established
        rangeEstablished := true

// ─── TRADING LOGIC AFTER 9:45, but BEFORE NOON, and if NO trade taken ─
    if rangeEstablished and not na(orHigh) and not na(orLow) 
    // Only trade if it's still BEFORE 12:00 (noon) EST and we haven't taken a trade today
        if hour(time, "America/New_York") < 12 and (not tradeTakenToday)
        // 1) Compute distances for stops & targets
            float stopSize   = 0.5 * (orHigh - orLow)      // half the OR size
            float targetSize = 3 * stopSize      // 3x the stop => 1.5x the entire OR
    
        // 2) Check if price breaks above OR => go long
            if close > orHigh 
            // Only enter a new long if not already in a long position (optional)
                if strategy.position_size <= 0
                    strategy.entry("ORB Long", strategy.long)
                    strategy.exit("Long Exit", from_entry = "ORB Long", stop = orHigh - stopSize, limit  = strategy.position_avg_price + targetSize)
                // Flag that we've taken a trade today
                    tradeTakenToday := true
    
        // 3) Check if price breaks below OR => go short
            if close < orLow 
            // Only enter a new short if not already in a short position (optional)
                if strategy.position_size >= 0
                    strategy.entry("ORB Short", strategy.short)
                    strategy.exit("Short Exit", from_entry = "ORB Short", stop = orLow + stopSize, limit  = strategy.position_avg_price - targetSize)
                // Flag that we've taken a trade today
                    tradeTakenToday := true
if hour(time, "America/New_York") == 16 and minute(time, "America/New_York") == 0
    strategy.close_all()