Estratégia de negociação quantitativa de stop loss de rompimento de sessão dupla em Londres e Nova York

ORB EMA SL TP RRR 交易会话 追踪止损 价格突破 风险管理
Data de criação: 2025-04-27 11:32:24 última modificação: 2025-04-27 11:32:24
cópia: 2 Cliques: 334
2
focar em
319
Seguidores

Estratégia de negociação quantitativa de stop loss de rompimento de sessão dupla em Londres e Nova York Estratégia de negociação quantitativa de stop loss de rompimento de sessão dupla em Londres e Nova York

Visão geral

A estratégia de negociação quantitativa de parada de tracking de breakout de dois intervalos de tempo é um sistema de negociação de ruptura baseado no intervalo de preços de 15 minutos antes da abertura do horário de negociação de Londres e Nova York. A estratégia capta a dinâmica de preços no início da abertura dos dois principais centros financeiros, entrando na direção correspondente de negociação quando os preços ultrapassam os altos ou baixos formados nos primeiros 15 minutos.

Princípio da estratégia

O mecanismo de operação da estratégia gira em torno de dois períodos-chave: a abertura do mercado de Londres (03h00 - 03h15min, hora de Nova York) e a abertura do mercado de Nova York (09h30 - 09h45min, hora de Nova York). A estratégia funciona da seguinte forma:

  1. Os preços dos primeiros 15 minutos de negociação foram registrados em Londres e Nova Iorque, formando “bandos de preços”
  2. Quando um intervalo de preços é formado, a estratégia verifica se o tamanho do intervalo atende aos requisitos mínimos (default 2 pontos)
  3. Abrir uma posição a mais se o preço ultrapassar o máximo do intervalo a partir da direção de baixo e satisfazer a condição de filtragem EMA (se ativada)
  4. Caso o preço quebre a baixa do intervalo de forma ascendente e satisfaça a condição de filtragem EMA (se ativada), a posição é fechada
  5. Stop loss colocado a uma altura de um intervalo fora da fronteira da faixa de preços na direção oposta da quebra
  6. Objetivo de stop loss é o risco-retorno-relação (default 2.0) multiplicado pela altura do intervalo
  7. Ao mesmo tempo, configure o stop loss de rastreamento, assumindo 8 unidades mínimas de variação, ajustando-se à medida que o preço se move na direção favorável

A lógica chave da estratégia consiste em capturar uma ruptura de direção de preços no início do período de negociação, o que geralmente indica uma tendência que pode ocorrer posteriormente. Usando um mecanismo de parada de perda de rastreamento, a estratégia permite que as negociações lucrativas continuem funcionando, enquanto protegem as que já são lucrativas.

Vantagens estratégicas

A estratégia, analisada em profundidade, apresenta as seguintes vantagens:

  1. Oportunidade de negociação em dois períodosA estratégia é capaz de capturar oscilações dos dois principais períodos de negociação, aumentando as oportunidades de negociação, ao focar simultaneamente nas aberturas de Londres e Nova York.
  2. Mecanismos de rastreamento de perdaO sistema de tracking de stop loss permite que as transações lucrativas continuem a crescer, ao mesmo tempo em que protege os lucros, e aumenta efetivamente o nível médio de lucro, em comparação com o sistema de stop loss fixo.
  3. Controle de risco perfeitoA estratégia utiliza um sistema de stop loss dinâmico baseado na volatilidade (o tamanho do intervalo) para adaptar a gestão de risco às condições do mercado.
  4. Muito personalizávelOs usuários podem ajustar a taxa de retorno do risco, o tamanho do intervalo mínimo, o rastreamento do ponto de parada e se o filtro EMA é usado, para diferentes tipos de negociação e preferências de risco pessoais.
  5. Filtragem de indicadores técnicosA opção de filtragem de EMA de 5 minutos ajuda a evitar a negociação de contrapartida e a melhorar a qualidade das negociações.
  6. Limite uma transação por períodoA estratégia de sinalização de transações embutida na estratégia assegura que apenas uma transação seja executada a cada instante, evitando os custos e riscos associados à transação frequente.

Risco estratégico

Apesar do bom desenho da estratégia, existem os seguintes riscos potenciais:

  1. Risco de Falso BreakoutO preço pode recuar imediatamente após uma breve quebra na fronteira entre os intervalos, resultando em um stop loss. Para esse risco, pode-se considerar o aumento de mecanismos de confirmação, como exigir que o preço permaneça por um período de tempo após a quebra ou atinja uma certa amplitude antes de abrir uma posição.
  2. Gestão de fundosEstratégia: O padrão de negociação é o uso de um número fixo de contratos, o que pode não ser adequado para todos os tamanhos de fundos. Recomenda-se ajustar o tamanho da posição de acordo com o tamanho da conta e a tolerância ao risco.
  3. Riscos de otimização de parâmetrosParâmetros de otimização excessiva podem levar a uma curva de ajuste que não funcionará bem no futuro ambiente de mercado. Deve-se prestar atenção aos testes de robustez dos parâmetros.
  4. Dependência do ambiente de mercadoA estratégia pode frequentemente desencadear um stop loss em mercados de baixa volatilidade e sem uma tendência visível. Pode-se considerar a adição de condições de filtragem de mercado.
  5. Problemas com a zona horáriaO código usa o fuso horário de Nova Iorque. Certifique-se de que a configuração do fuso horário da plataforma de negociação é a mesma, caso contrário, o sinal de negociação pode estar mal posicionado.
  6. O impacto das festasOs dias de negociação especiais e os feriados podem afetar o desempenho da estratégia, que não inclui a lógica de filtragem de feriados.

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

Com base na análise da estratégia, os seguintes são possíveis direções de otimização:

  1. Mecanismo de confirmaçãoPode-se considerar a adição de condições de confirmação adicionais após a quebra de preço, como a quebra de volume de transação, a manutenção de várias linhas K consecutivas de preços na direção da quebra, etc., para reduzir os danos causados pela falsa quebra.
  2. Gestão dinâmica de fundos: Ajustar o tamanho da posição de acordo com a volatilidade do mercado e a dinâmica do tamanho da conta para otimizar a relação de risco-retorno.
  3. Filtragem do cenário de mercadoIntrodução de indicadores de volatilidade ou de intensidade de tendência, suspensão de negociação em um ambiente de mercado que não seja adequado para a estratégia de ruptura.
  4. Confirmação de múltiplos períodos de tempoA tendência de um ciclo de tempo mais longo é combinada com a tendência de um ciclo de tempo mais longo, e só é negociada na direção que coincide com a tendência maior.
  5. Otimização do tempo de entradaConsidere a possibilidade de usar o retorno de preço para o suporte/resistência crítico, em vez de entrar diretamente no ponto de ruptura para obter melhores preços de custo.
  6. Aumentar o tempo de filtragemAnalisar o desempenho histórico de diferentes dias e períodos de negociação, evitando períodos de fraco desempenho.
  7. Análise de correlação multivariadaConsidere as correlações entre as diferentes variedades de negociação e evite manter várias posições altamente correlacionadas ao mesmo tempo.

Resumir

A estratégia de negociação de quantificação de ruptura de tracking de stop loss em dois intervalos de abertura de período é um sistema de negociação de ruptura projetado para o horário de abertura dos dois centros financeiros de Londres e Nova York. Ao capturar o movimento e a direção dos preços no início da abertura, em combinação com o mecanismo de tracking de stop loss, a estratégia pode maximizar o potencial de lucro, enquanto controla o risco. Embora existam riscos como falsas rupturas e dependência do ambiente de mercado, a estabilidade e a lucratividade da estratégia podem ser ainda mais aumentadas com a configuração razoável de parâmetros e condições de filtragem adicionais.

Código-fonte da estratégia
/*backtest
start: 2024-04-27 00:00:00
end: 2025-04-25 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/

//@version=6
strategy("ORB-LD-NY-Trail Strategy", overlay=true,
     default_qty_type=strategy.fixed, default_qty_value=1,
     calc_on_order_fills=true, calc_on_every_tick=true)

// =========================
// USER INPUTS
// =========================
riskReward      = input.float(2.0, "Risk-Reward Ratio", minval=1.0)
minBoxSize      = input.float(2.0, "Minimum Box Size (points)")
trailStopTicks  = input.int(8, "Trailing Stop (ticks)", minval=1)
useEmaFilter    = input.bool(false, "Use 5-min EMA Filter?")

tickSize        = syminfo.mintick         // auto-detect min tick for symbol
trailStopOffset = trailStopTicks * tickSize
emaSource       = request.security(syminfo.tickerid, "5", ta.ema(close, 200))  // 5-min chart EMA

// =========================
// SESSION TIMES
// =========================
londonStart = timestamp("America/New_York", year, month, dayofmonth, 3, 0)
londonEnd   = timestamp("America/New_York", year, month, dayofmonth, 3, 15)
nyStart     = timestamp("America/New_York", year, month, dayofmonth, 9, 30)
nyEnd       = timestamp("America/New_York", year, month, dayofmonth, 9, 45)

inLondon = time >= londonStart and time <= londonEnd
inNY     = time >= nyStart and time <= nyEnd

// =========================
// ONE TRADE PER SESSION FLAGS
// =========================
var bool londonTraded = false
var bool nyTraded     = false

// =========================
// LONDON BOX
// =========================
var float londonHigh    = na
var float londonLow     = na
var float londonBoxHigh = na
var float londonBoxLow  = na

if inLondon
    if na(londonHigh)
        londonBoxHigh := na
        londonBoxLow  := na
        londonTraded  := false
    londonHigh := na(londonHigh) ? high : math.max(londonHigh, high)
    londonLow  := na(londonLow)  ? low  : math.min(londonLow,  low)

if not inLondon and na(londonBoxHigh) and not na(londonHigh) and not na(londonLow)
    londonBoxHigh := londonHigh
    londonBoxLow  := londonLow
    londonHigh    := na
    londonLow     := na

if time > londonEnd and not na(londonBoxHigh) and not londonTraded
    boxRange = londonBoxHigh - londonBoxLow
    if boxRange >= minBoxSize
        // Standard SL/TP logic
        longSL  = londonBoxHigh - boxRange
        longTP  = londonBoxHigh + boxRange * riskReward
        shortSL = londonBoxLow  + boxRange
        shortTP = londonBoxLow  - boxRange * riskReward

        // === LONDON LONG ===
        condLong1 = close[1] <= londonBoxHigh
        condLong2 = close > londonBoxHigh
        condLong3 = (not useEmaFilter) or (close > emaSource)

        if condLong1 and condLong2 and condLong3
            strategy.entry("London Long", strategy.long)
            strategy.exit("Exit London Long", from_entry="London Long",
                          stop=longSL, limit=longTP,
                          trail_points=trailStopOffset)
            londonTraded := true

        // === LONDON SHORT ===
        condShort1 = close[1] >= londonBoxLow
        condShort2 = close < londonBoxLow
        condShort3 = (not useEmaFilter) or (close < emaSource)

        if not londonTraded and condShort1 and condShort2 and condShort3
            strategy.entry("London Short", strategy.short)
            strategy.exit("Exit London Short", from_entry="London Short",
                          stop=shortSL, limit=shortTP,
                          trail_points=trailStopOffset)
            londonTraded := true

// =========================
// NY BOX
// =========================
var float nyHigh    = na
var float nyLow     = na
var float nyBoxHigh = na
var float nyBoxLow  = na

if inNY
    if na(nyHigh)
        nyBoxHigh := na
        nyBoxLow  := na
        nyTraded  := false
    nyHigh := na(nyHigh) ? high : math.max(nyHigh, high)
    nyLow  := na(nyLow)  ? low  : math.min(nyLow,  low)

if not inNY and na(nyBoxHigh) and not na(nyHigh) and not na(nyLow)
    nyBoxHigh := nyHigh
    nyBoxLow  := nyLow
    nyHigh    := na
    nyLow     := na

if time > nyEnd and not na(nyBoxHigh) and not nyTraded
    boxRange = nyBoxHigh - nyBoxLow
    if boxRange >= minBoxSize
        longSL  = nyBoxHigh - boxRange
        longTP  = nyBoxHigh + boxRange * riskReward
        shortSL = nyBoxLow  + boxRange
        shortTP = nyBoxLow  - boxRange * riskReward

        // === NY LONG ===
        condNYLong1 = close[1] <= nyBoxHigh
        condNYLong2 = close > nyBoxHigh
        condNYLong3 = (not useEmaFilter) or (close > emaSource)

        if condNYLong1 and condNYLong2 and condNYLong3
            strategy.entry("NY Long", strategy.long)
            strategy.exit("Exit NY Long", from_entry="NY Long",
                          stop=longSL, limit=longTP,
                          trail_points=trailStopOffset)
            nyTraded := true

        // === NY SHORT ===
        condNYShort1 = close[1] >= nyBoxLow
        condNYShort2 = close < nyBoxLow
        condNYShort3 = (not useEmaFilter) or (close < emaSource)

        if not nyTraded and condNYShort1 and condNYShort2 and condNYShort3
            strategy.entry("NY Short", strategy.short)
            strategy.exit("Exit NY Short", from_entry="NY Short",
                          stop=shortSL, limit=shortTP,
                          trail_points=trailStopOffset)
            nyTraded := true

// Visual session background
bgcolor(inLondon ? color.new(color.fuchsia, 85) : na)
bgcolor(inNY     ? color.new(color.green,   85) : na)