Estratégia de negociação dinâmica de gap de valor justo: sistema de backtesting multi-time frame baseado na teoria SMC

FVG SMC SL TP Risk-Reward Ratio
Data de criação: 2025-03-26 15:27:29 última modificação: 2025-03-26 15:27:29
cópia: 2 Cliques: 601
2
focar em
319
Seguidores

Estratégia de negociação dinâmica de gap de valor justo: sistema de backtesting multi-time frame baseado na teoria SMC Estratégia de negociação dinâmica de gap de valor justo: sistema de backtesting multi-time frame baseado na teoria SMC

Visão geral

A estratégia de negociação diária de brecha de valor justo dinâmico é um sistema de negociação quantitativa baseado na teoria da estrutura de mercado, que se concentra na identificação e negociação de brechas de valor justo no preço (Fair Value Gap, abreviado FVG). A estratégia usa três formas de linha para detectar desequilíbrios de oferta e demanda no comportamento dos preços e, ao fazer a entrada de negociação nessas áreas, quando o preço retorna. A estratégia usa uma relação de risco e retorno fixa para gerenciar o risco e estabelece um mecanismo de liquidação forçada em um horário específico do dia para evitar riscos durante a noite.

Princípio da estratégia

O princípio central de uma estratégia de negociação de brechas de justo valor baseia-se em “áreas não transacionadas” ou “brechas” deixadas por preços que se movem rapidamente. Essas áreas representam graves desequilíbrios de oferta e demanda, geralmente “preenchidos” ou “retestados” no futuro.

  1. Mecanismo de detecção de fugasA estratégia usa o modelo de três fios para identificar dois tipos de FVG:

    • Observação FVG: o preço mínimo do fio de alumínio atual é maior que o preço máximo anterior dos dois fios de alumínio, e o preço de fechamento do fio de alumínio anterior é maior que o preço máximo anterior dos dois fios de alumínio.
    • FVG de queda: o preço máximo da linha de aluguel atual é inferior ao preço mínimo anterior às duas linhas de aluguel, e o preço de fechamento da linha de aluguel anterior é inferior ao preço mínimo anterior às duas linhas de aluguel.
  2. Logística de entrada de retornoA estratégia não é entrar imediatamente na formação do FVG, mas esperar que o preço volte a estas áreas:

    • Observação FVG: Quando o preço retorna ao limite superior da região de FVG (o ponto mais alto), a ação de multiplicação é acionada.
    • Baixo FVG: Quando o preço rebota para a fronteira inferior da região de FVG (o ponto baixo), o sinal de curto-circuito é acionado.
  3. Gestão de Riscos

    • A parada de perda é definida na fronteira do correspondente FVG ((a baixa de um FVG positivo ou a alta de um FVG negativo)).
    • O objetivo de lucro usa um rácio de risco-retorno de 1:2, calculado da seguinte forma: preço de entrada ± (preço de entrada - stop loss) × 2 .
  4. Paridade no fim do diaEstratégia: Automaticamente liquidar todas as suas posições e limpar todos os arquivos de FVG para o próximo dia de negociação às 15:15 (horário padrão da Índia) todos os dias.

  5. Transações de sobreposiçãoA estratégia permite um máximo de 5 operações de sobreposição, o que significa que você pode manter várias posições na mesma direção, aumentando assim os ganhos em mercados de forte tendência.

O método utiliza a teoria da discontinuidade na estrutura do mercado e do comportamento dos preços para tentar capturar o comportamento previsível dos preços ao preencher essas áreas de desequilíbrio.

Vantagens estratégicas

A estratégia, após uma análise mais profunda do código, mostra várias vantagens:

  1. Critérios de negociação objetivosA estratégia utiliza condições matemáticas claramente definidas para identificar os FVG e os pontos de entrada, eliminando o julgamento subjetivo e aumentando a disciplina e a consistência das transações.

  2. Transações baseadas na estrutura do mercadoA estratégia de focar em áreas de mercado onde a oferta e a demanda estão realmente desequilibradas, ao invés de depender de sinais de indicadores tradicionais, que tendem a ficar para trás do comportamento dos preços.

  3. Mecanismos de controlo de riscos

    • O stop loss predefinido define o risco máximo de cada transação.
    • O retorno de risco fixo é mais razoável do que a taxa de vitória necessária para garantir lucros a longo prazo.
    • A obrigação de fechar a posição no final do dia elimina o risco do dia seguinte.
  4. Potencial de receita compostaA estratégia pode aumentar significativamente a receita em mercados de forte tendência, ao mesmo tempo em que controla o risco de cada posição por meio de stop loss.

  5. AdaptabilidadeA estratégia não depende de níveis de preços fixos, mas sim de identificação dinâmica de áreas-chave nas condições atuais do mercado, tornando-as adaptáveis a diferentes ambientes e instrumentos de mercado.

  6. Eficiência de programaçãoO código usa uma matriz para armazenar a informação do FVG e gerenciar eficazmente várias oportunidades de negociação em potencial, garantindo que o sistema possa rastrear e responder a vários níveis de preços.

  7. Ajuda visualEstratégia: mostra intuitivamente a região do FVG no gráfico (verde para o FVG otimista, vermelho para o FVG pessimista), para ajudar os comerciantes a entender o processo de decisão do sistema.

Risco estratégico

Apesar de ter uma base teórica sólida e vários benefícios, há alguns fatores de risco a serem considerados:

  1. Risco de Falso BreakoutNo mercado de liquidação, o preço pode tocar várias vezes na fronteira FVG sem formar uma tendência contínua, resultando em várias paradas de perda. A solução pode incluir o acréscimo de filtros de mercado ou indicadores de confirmação de tendência.

  2. Risco de sobreposição de transações: Permitir até 5 posições simultâneas pode levar a uma exposição excessiva na direção errada, especialmente quando a tendência se inverte de repente. Recomenda-se a implementação de restrições de risco globais, como que o risco máximo de todas as posições não exceda uma porcentagem específica da conta.

  3. Limites da taxa de retorno do risco fixoO uso de uma relação de risco-retorno de 1:2 fixa pode não ser adequado para todas as condições de mercado. Em mercados de baixa volatilidade, tal objetivo pode ser difícil de alcançar; em mercados de alta volatilidade, pode-se sair prematuramente de negociações lucrativas. Considere a meta de lucro ajustada com base na volatilidade do mercado.

  4. Falta de filtragem do mercadoA estratégia gera sinais em todas as condições de mercado, sem considerar a tendência geral ou oscilação. Em um ambiente de forte tendência, a resistência de negociação pode levar a perdas contínuas. A adição de filtros de tendência pode melhorar significativamente a performance.

  5. Falta de confirmação de volumeA estratégia baseia-se apenas no comportamento do preço, sem considerar a confirmação do volume de transação, o que pode levar a falsos sinais em áreas de baixo volume de transação. A integração da análise do volume de transação pode melhorar a qualidade do sinal.

  6. Problemas potenciais com o desligamento por tempo fixo: O cancelamento em um determinado horário do dia pode levar a um cancelamento prematuro em uma posição vantajosa ou a perder melhores oportunidades de cancelamento em uma posição desfavorável. Considere as condições de cancelamento combinadas com ações de preço.

  7. Dependendo da hipótese de retrocesso históricoA estratégia assume que o comportamento de futuros FVGs será semelhante aos padrões observados no passado. A dinâmica do mercado pode mudar e enfraquecer a eficácia desses padrões. É muito importante otimizar periodicamente os parâmetros e verificar as hipóteses.

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

Com base em uma análise aprofundada do código, aqui estão algumas possíveis direções de otimização:

  1. Filtragem da estrutura de mercado

    • Implementação de um sistema de identificação de tendências de nível mais avançado, que permite a negociação de FVG apenas na direção da tendência.
    • Pode ser adicionado um filtro de direção de média móvel simples ou uma análise de estrutura de mercado mais complexa.
    • O filtro pode reduzir significativamente os prejuízos causados pela negociação de contrapartida.
  2. Ajuste de volatilidade

    • Alcançar objetivos de stop loss e profit baseados na volatilidade do mercado atual, em vez de usar uma taxa de retorno de risco fixa.
    • Ampliação de metas em ambientes de alta volatilidade e restrição de metas em ambientes de baixa volatilidade.
    • A volatilidade pode ser quantificada usando o ATR (Average True Range) ou um indicador similar.
  3. Confirmação de transação

    • Adição de condições de volume de transações para garantir que haja suporte suficiente de volume de transações na formação e retrospectiva do FVG.
    • Isso reduz os sinais falsos em ambientes de baixa mobilidade.
  4. Adaptação do tamanho da posição

    • Dimensão de posições dinâmicas baseadas em taxas de vitórias históricas, volatilidade atual e características específicas do FVG.
    • Para um FVG mais “limpo” (o padrão de três eixos é mais claro) ou um FVG que se forma em uma forte tendência, pode-se aumentar o tamanho da posição.
  5. Análise de Multi-Framas de Tempo

    • Integrar a análise de FVG de um quadro de tempo mais elevado, dando prioridade aos sinais alinhados com o quadro de tempo mais elevado FVG.
    • Este método pode melhorar a qualidade do sinal e a taxa de sucesso geral.
  6. Transações de sobreposição inteligente

    • Modificação da lógica de negociação de sobreposição, baseada na força da tendência e no sucesso das negociações anteriores.
    • A possibilidade de uma operação de sobreposição pode ser aumentada após uma operação lucrativa e reduzida após uma operação perdedora.
  7. Aprendizagem de máquina

    • Implementar algoritmos de aprendizagem de máquina para identificar as características do FVG com maior probabilidade de sucesso.
    • Isso pode incluir a análise do tamanho do FVG, a velocidade de formação e o ambiente de mercado em que se encontra.
  8. Estrutura de avaliação estatística

    • Desenvolver um quadro de feedback mais abrangente para avaliar a performance da estratégia em diferentes condições de mercado.
    • A simulação de Monte Carlo é usada para avaliar os resultados esperados em diferentes combinações de parâmetros e condições de mercado.

Resumir

A estratégia de negociação intradiária de brecha de valor justo dinâmico oferece uma maneira sistematizada de identificar e negociar áreas de desequilíbrio de oferta e demanda no mercado. Utilizando o modelo FVG de três eixos e regras de entrada de retracção claras, a estratégia possui solidez teórica e operacionalidade prática.

A principal vantagem da estratégia reside na sua objetividade e na sua abordagem baseada na estrutura do mercado, permitindo-lhe manter a relevância em diferentes cenários de mercado. No entanto, a eficácia da estratégia pode ser significativamente aumentada pela implementação de orientações de otimização das recomendações, especialmente com a adição de filtros de cenários de mercado, ajustes baseados na volatilidade e confirmação de volume de transações.

É importante notar que nenhuma estratégia de negociação, por mais perfeita que seja, garante o sucesso. A negociação bem-sucedida requer não apenas uma estratégia sólida, mas também rigorosa disciplina de execução, gestão adequada de fundos e uma compreensão profunda do mercado.

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

//@version=6
strategy("Intraday FVG", overlay=true, pyramiding=5, max_bars_back=500, default_qty_type=strategy.percent_of_equity, commission_type=strategy.commission.percent)

// 2. FVG Detection (Three-Candle Pattern)
var bullFVGHigh = array.new_float()
var bullFVGLow = array.new_float()
var bullFVGIndex = array.new_int()
var bearFVGHigh = array.new_float()
var bearFVGLow = array.new_float()
var bearFVGIndex = array.new_int()

detectFVG() =>

    // Bullish FVG: Current low > prior high AND next high < current low
    bullCondition = low > high[2] and close[1] > high[2]
    // Bearish FVG: Current high < prior low AND next low > current high
    bearCondition = high < low[2] and close[1] < low[2]


    if bullCondition 
        // log.info("bull condition met: {0} {0} {0}", high[2], close[1], low)
        array.push(bullFVGHigh, low)
        array.push(bullFVGLow, low[2])
        array.push(bullFVGIndex, bar_index)

    
    if bearCondition
        // log.info("bear condition met: {0} {0} {0}", low[2], close[1], high)
        array.push(bearFVGHigh, high[2])
        array.push(bearFVGLow, high)
        array.push(bearFVGIndex, bar_index)

detectFVG()

// 3. Retest Execution Logic
checkRetests(arrayHigh, arrayLow, barIndex, direction) =>
    // log.info("{0} : {1}", bar_index, time)
    i = array.size(arrayHigh) - 1
    
    while i >= 0

        // log.info("barIndex : {0}" , array.get(barIndex, i))
        // log.info("bar_index : {0}" , bar_index)
        
        if array.get(barIndex, i) <  bar_index
            
            fvgHigh = array.get(arrayHigh, i)
            fvgLow = array.get(arrayLow, i)
            // log.info("visting : {0} : {1} : {2} : {3} ", array.get(barIndex, i), bar_index, fvgHigh, fvgLow)
            
            if direction == "long" and low <= fvgHigh
                // log.info("entering long")
                sl = array.get(arrayLow, i)  // Previous candle's low
                entry = close
                tp = entry + (entry - sl)*2
                strategy.entry("L"+str.tostring(array.get(barIndex, i)), strategy.long)
                strategy.exit("XL"+str.tostring(array.get(barIndex, i)), "L"+str.tostring(array.get(barIndex, i)), stop=sl, limit=tp)
                array.remove(arrayHigh, i)
                array.remove(arrayLow, i)
                array.remove(barIndex, i)
            
            if direction == "short" and high >= fvgLow
                // log.info("entering short")
                sl = array.get(arrayHigh, i)   // Previous candle's low
                entry = close
                tp = entry - (sl - entry)*2
                strategy.entry("S"+str.tostring(array.get(barIndex, i)), strategy.short)
                strategy.exit("XS"+str.tostring(array.get(barIndex, i)), "S"+str.tostring(array.get(barIndex, i)), stop=sl, limit=tp)
                array.remove(arrayHigh, i)
                array.remove(arrayLow, i)
                array.remove(barIndex, i)
        
        i := i - 1


checkRetests(bullFVGHigh, bullFVGLow, bullFVGIndex, "long")
checkRetests(bearFVGHigh, bearFVGLow, bearFVGIndex,"short")

// 5. Daily Exit at 3:15 PM IST
exitTime = hour == 15 and minute >= 15
if exitTime
    strategy.close_all()
    array.clear(bullFVGHigh)
    array.clear(bullFVGLow)
    array.clear(bearFVGHigh)
    array.clear(bearFVGLow)
    array.clear(bullFVGIndex)
    array.clear(bearFVGIndex)