Estratégia de negociação de tendências quantitativas multinível com base em rompimento de níveis de suporte e resistência e backtesting

Pivot SR MA BREAKOUT RETEST Trend
Data de criação: 2025-02-20 16:00:35 última modificação: 2025-02-20 16:00:35
cópia: 2 Cliques: 377
2
focar em
319
Seguidores

Estratégia de negociação de tendências quantitativas multinível com base em rompimento de níveis de suporte e resistência e backtesting Estratégia de negociação de tendências quantitativas multinível com base em rompimento de níveis de suporte e resistência e backtesting

Visão geral

Esta é uma estratégia de negociação quantitativa baseada em suportes de ruptura e resistência. A estratégia é executada através da identificação de pontos críticos de suporte e resistência, após a ruptura do preço. A estratégia usa o posicionamento dinâmico da barra para trás e para a direita para os pontos críticos e combina a diferença de resistência de retorno para filtrar a falsa ruptura, aumentando a precisão e a estabilidade da negociação.

Princípio da estratégia

A estratégia inclui principalmente a seguinte lógica central:

  1. Identificar pontos de pivô de suporte e resistência críticos olhando para trás e para a direita em um número especificado de linhas K
  2. Variabilidade de configuração de estado que rastreia a ruptura e o retorno do ponto de resistência do suporte candidato
  3. Atualizar a resistência do suporte do candidato quando novos pontos de pivô surgirem
  4. Fazer transações quando o preço ultrapassa a resistência de suporte candidato e retrocede:
    • Faça mais quando os preços sobem de suporte e voltam para perto de suporte
    • Cancelamento quando o preço ultrapassa a resistência e retorna perto da resistência
  5. O uso de parâmetros de tolerância para filtrar oscilações de preços na retomada, melhorando a qualidade do sinal

Vantagens estratégicas

  1. A teoria clássica da análise técnica, a lógica clara e fácil de entender.
  2. Identificação dinâmica de pontos-chave e adaptabilidade
  3. Combinação de dupla confirmação de ruptura e retransmissão para reduzir falhas
  4. Filtração de ruído com parâmetros de tolerância para maior precisão
  5. Estrutura de código clara, fácil de manter e expandir
  6. Aplicável a vários períodos de tempo e variedades

Risco estratégico

  1. A frequência de transações em mercados turbulentos pode levar a perdas
  2. Falso sinal de ruptura ainda existe
  3. A otimização de parâmetros pode apresentar o risco de overfitting
  4. Os investidores devem ter em mente que os investidores devem ter um alto nível de confiança.
  5. Os custos de transação devem ser considerados

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

  1. Adição de filtros de tendência para negociar apenas na direção da tendência principal
  2. Participação no mecanismo de confirmação de transações
  3. Optimizar o tempo de entrada, considerando a confirmação de indicadores técnicos adicionais
  4. Melhoria do mecanismo de contenção de danos
  5. Adição de lógica de gerenciamento de posição
  6. Considere a inclusão de análises de ciclo de tempo múltiplo

Resumir

A estratégia é construída com base na clássica teoria da resistência de suporte e na lógica de retrospectiva de ruptura, com uma boa base teórica. Os efeitos de negociação estáveis podem ser obtidos através da otimização de parâmetros e controle de risco. A estrutura do código da estratégia é clara, fácil de entender e expandir, com um forte valor prático.

Código-fonte da estratégia
/*backtest
start: 2024-02-21 00:00:00
end: 2025-02-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/

//@version=5
strategy("SR Breakout & Retest Strategy (4hr)", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// ===== USER INPUTS =====
leftBars    = input.int(3, "Left Pivot Bars", minval=1)
rightBars   = input.int(3, "Right Pivot Bars", minval=1)
tolerance   = input.float(0.005, "Retest Tolerance (Fraction)", step=0.001)

// ===== PIVOT CALCULATION =====
pLow  = ta.pivotlow(low, leftBars, rightBars)
pHigh = ta.pivothigh(high, leftBars, rightBars)

// ===== STATE VARIABLES FOR CANDIDATE LEVELS =====
var float candidateSupport  = na
var bool  supportBroken     = false
var bool  supportRetested   = false

var float candidateResistance = na
var bool  resistanceBroken    = false
var bool  resistanceRetested  = false

// ===== UPDATE CANDIDATE LEVELS =====
if not na(pLow)
    candidateSupport := pLow
    supportBroken    := false
    supportRetested  := false

if not na(pHigh)
    candidateResistance := pHigh
    resistanceBroken    := false
    resistanceRetested  := false

// ===== CHECK FOR BREAKOUT & RETEST =====
// -- Support: Price breaks below candidate support and then retests it --
if not na(candidateSupport)
    if not supportBroken and low < candidateSupport
        supportBroken := true

    if supportBroken and not supportRetested and close >= candidateSupport and math.abs(low - candidateSupport) <= candidateSupport * tolerance
        supportRetested := true
        label.new(bar_index, candidateSupport, "Support Retest", 
                  style=label.style_label_up, color=color.green, textcolor=color.white, size=size.tiny)
        // Example trading logic: Enter a long position on support retest
        strategy.entry("Long_Support", strategy.long)

// -- Resistance: Price breaks above candidate resistance and then retests it --
if not na(candidateResistance)
    if not resistanceBroken and high > candidateResistance
        resistanceBroken := true

    if resistanceBroken and not resistanceRetested and close <= candidateResistance and math.abs(high - candidateResistance) <= candidateResistance * tolerance
        resistanceRetested := true
        label.new(bar_index, candidateResistance, "Resistance Retest", 
                  style=label.style_label_down, color=color.red, textcolor=color.white, size=size.tiny)
        // Example trading logic: Enter a short position on resistance retest
        strategy.entry("Short_Resistance", strategy.short)

// ===== PLOTTING =====
plot(pLow, title="Pivot Low (Support)", style=plot.style_circles, color=color.green, linewidth=2)
plot(pHigh, title="Pivot High (Resistance)", style=plot.style_circles, color=color.red, linewidth=2)