Sistema de negociação de reversão e acompanhamento de tendência de média móvel dupla

移动平均线 RSI ADX ATR 布林带 MA BB 动量 趋势 波动率
Data de criação: 2025-05-26 17:32:14 última modificação: 2025-05-26 17:32:14
cópia: 0 Cliques: 270
2
focar em
319
Seguidores

Sistema de negociação de reversão e acompanhamento de tendência de média móvel dupla Sistema de negociação de reversão e acompanhamento de tendência de média móvel dupla

Visão geral

Este sistema de negociação binário de acompanhamento de tendências e inversão de movimentos é uma estratégia de negociação quantitativa abrangente, que combina elementos de acompanhamento de tendências e negociação de inversão. A estratégia utiliza médias móveis de dois períodos diferentes (de 100 e 500) para determinar a direção da tendência do mercado, enquanto integra vários indicadores técnicos como condições de filtragem, incluindo o RSI (índice de força relativa), o ADX (índice de direção média) e o ATR (índice de amplitude de ondas reais). O sistema permite negociações em muitas direções, tanto em aberto como em aberto, e aplica diferentes regras de entrada e saída de acordo com diferentes condições de mercado.

Princípio da estratégia

O principal princípio da estratégia é um mecanismo de dupla verificação baseado na identificação de tendências e na confirmação de dinâmicas:

  1. Identificação de tendênciasA estratégia usa uma média móvel de 100 e 500 ciclos (EMA ou SMA opcional) para determinar a tendência do mercado. Quando a MA100 está acima da MA500, é considerada uma tendência ascendente; o contrário pode ser uma tendência descendente.

  2. Requisitos de entrada múltipla

    • O preço deve ser superior a MA100 e MA500 simultaneamente.
    • Condições de filtragem de tendência opcionais: MA100 > MA500
    • Condição de filtragem RSI opcional: O RSI deve ser superior à sua média de deslizamento
    • Condição de filtragem ADX opcional: o ADX deve estar acima da sua média de deslizamento para garantir a intensidade da tendência
    • Condição de filtragem ATR opcional: o ATR deve ser maior que a sua média lisa para garantir a volatilidade adequada
  3. Condições de entrada

    • O preço deve ser inferior a MA100 e MA500 simultaneamente
    • Preço deve ser abaixo do que o Brin traz para baixo (indicando que está vendido demais)
    • O RSI deve estar abaixo do limiar definido (o padrão é 33, indicando um excesso de venda)
    • Condições de filtragem ATR opcionais
    • Bloqueio de forte subida: não entrar em branco se o MA100 for superior ao MA500 acima da porcentagem definida (evitar a folga em uma forte tendência ascendente)
  4. Gestão de riscos e estratégias de saída

    • Multi-Head Stop: definido como a porcentagem abaixo do preço de entrada (default 3%)
    • A partir daí, a tendência é para que os preços baixem para MA500.
    • Stop loss em branco: % acima do preço de entrada (default 3%)
    • A parede de cabeça vazia: definida como a porcentagem abaixo do preço de entrada (default 4%)
    • Gerenciamento de fundos: 100% dos fundos da conta são usados por padrão em cada transação, permitindo um acréscimo piramidal

Este design permite a estratégia de capturar grandes oportunidades de ondas em mercados em tendência, enquanto procura pontos de reversão em condições de oversold.

Vantagens estratégicas

  1. Altamente adaptávelA estratégia oferece uma alta personalização através de vários filtros opcionais (RSI, ADX, ATR) que se adaptam a diferentes ambientes de mercado e estilos de comerciantes. O usuário pode ativar ou desativar esses filtros de forma flexível de acordo com a situação atual do mercado.

  2. Transações bidirecionaisA estratégia combina os dois métodos de negociação, permitindo tanto fazer mais em uma tendência ascendente quanto fazer menos em condições de sobrevenda extrema, aumentando as oportunidades de lucro.

  3. Julgar as tendências da inteligênciaO uso de sistemas de dupla linha uniforme ((MA100 e MA500) fornece um julgamento de tendências mais confiável e é mais capaz de filtrar brechas falsas do que um único sistema de linha uniforme.

  4. Adaptação à volatilidade dinâmicaAtravés do filtro ATR, a estratégia é capaz de se adaptar automaticamente às mudanças na volatilidade do mercado, evitando transações frequentes em ambientes de baixa volatilidade e reduzindo custos de transação desnecessários.

  5. Prevenção de uma reviravolta na perseguiçãoA negociação aérea estabelece um mecanismo de “bloqueio de alta forte” que proíbe o shorting quando a MA100 é superior à MA500 em relação à porcentagem definida, evitando o risco de contracorrência em situações de alta forte.

  6. Mecanismo de confirmação múltiplaO sinal de entrada requer a confirmação conjunta de vários indicadores técnicos, reduzindo significativamente a probabilidade de falsos sinais e aumentando a robustez da estratégia.

  7. Mecanismo de saída flexívelA estratégia foi concebida com uma lógica de saída diferente para o multihead e o headless, com o multihead passando pelo MA500 como um stop loss dinâmico, enquanto o headless possui um objetivo de parada fixo, o que corresponde às características de negociação em diferentes direções.

Risco estratégico

  1. Sensibilidade do parâmetroA estratégia depende de vários indicadores técnicos e configurações de parâmetros, e pequenas mudanças nesses parâmetros podem causar diferenças significativas nos resultados de feedback. Em negociações reais, os parâmetros ótimos podem mudar com a mudança do estado do mercado, com o risco de superalimentar os dados históricos. A solução é usar otimização em etapas e testes avançados para verificar a robustez dos parâmetros.

  2. Risco de atrasoIndicadores como a média móvel são, em essência, indicadores de atraso, que podem não ser capazes de capturar os pontos de inflexão em tempo hábil em mercados altamente voláteis, resultando em atrasos de entrada ou saída. Recomenda-se uma redução apropriada do ciclo da média móvel ou o aumento de outros indicadores de liderança em mercados altamente voláteis.

  3. Desempenho fraco no período de transiçãoA solução é adicionar um mecanismo de identificação do estado do mercado, reduzindo automaticamente a posição ou suspendendo a negociação quando o mercado é identificado como um mercado de turbulência.

  4. Riscos de gestão de fundosA estratégia é usar 100% dos fundos da conta por padrão, além de permitir um aumento de posição em uma pirâmide, podendo enfrentar um retorno maior em situações adversas. Recomenda-se ajustar o tamanho da posição de acordo com a tolerância ao risco pessoal e evitar o uso de todos os fundos das transações.

  5. Risco de liquidezEm mercados ou períodos de baixa liquidez, pode haver risco de aumento de pontos de deslizamento ou impossibilidade de negociar o preço esperado. Sugere-se a estratégia de operar em pares e períodos de negociação mainstream com bastante liquidez.

  6. Risco de um Cisne NegroO limite máximo de perdas é recomendado e considera o risco extremo de cobertura de derivativos, como o uso de opções.

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

  1. Introdução à classificação do estado do mercadoA estratégia atual usa a mesma configuração de parâmetros em diferentes estados de mercado (trend, oscilação, alta e baixa volatilidade). Pode-se considerar a adição de funções de identificação de estados de mercado e otimizar diferentes combinações de parâmetros para diferentes estados. A implementação concreta pode ser dividida em estados de mercado por meio de indicadores de taxa de flutuação (como o percentual de ATR) ou indicadores de intensidade de tendência (como o ADX threshold).

  2. Optimizar a gestão de fundosA estratégia atual é usar fundos de conta em proporções fixas, que podem ser melhoradas para gerenciamento de posições dinâmicas baseadas na volatilidade, aumentando as posições em ambientes de baixa volatilidade e reduzindo as posições em ambientes de alta volatilidade para equilibrar o risco. O valor relativo do ATR pode ser usado para ajustar dinamicamente a proporção de fundos por transação.

  3. Aumentar o filtro de tempo: alguns mercados podem ter melhor ou pior desempenho em determinados períodos de tempo, pode ser adicionado um filtro de tempo para evitar períodos de tempo de mau desempenho na história. Isso pode ser feito através da análise do desempenho da estratégia em diferentes períodos de tempo (por exemplo, o tempo de negociação da Ásia, Europa, EUA).

  4. Confirmação do Multi-TemposA estratégia atual funciona apenas em um único período de tempo (de 3 horas), pode considerar a adição de confirmação de tendências em períodos de tempo mais elevados, entrando apenas quando a tendência do período de tempo mais alto é consistente, aumentando a taxa de vitória. Por exemplo, o sinal de múltiplas cabeças no gráfico de 3 horas só é executado quando a tendência do diagrama é para cima.

  5. Paragem dinâmica e paradaA estratégia pode ser melhor adaptada a diferentes ambientes de flutuação. O ATR pode ser usado como um múltiplo para definir o ponto de parada e parada, ampliando automaticamente a faixa de parada quando a volatilidade aumenta.

  6. Integração de indicadores emocionaisA adição de indicadores de sentimento de mercado como filtros adicionais, como volume de negociação, taxa de capital (para contratos permanentes) ou prémios de futuros, para evitar negociações adversas em estados de extrema emoção. Esses indicadores podem servir como sinais de alerta de que o mercado está muito quente ou muito frio.

  7. Otimização de aprendizagem de máquina: Seleção dinâmica de combinações de parâmetros ideais usando algoritmos de aprendizagem de máquina, ajuste automático de parâmetros de estratégia com base no estado mais recente do mercado. Isso pode ser feito através da implementação de parâmetros de otimização de janelas de rolagem ou métodos de aprendizado de força.

Resumir

O Binary Equilibrium Trading System é uma estratégia de negociação quantitativa bem concebida, que oferece uma maior adaptabilidade e personalização, mantendo a simplicidade da estratégia, através da combinação de um sistema equilíbrio, indicadores de dinâmica e filtros de taxa de flutuação. O principal benefício da estratégia é o seu mecanismo de confirmação múltipla e o sistema de filtragem flexível, que permite a adaptação a diferentes ambientes de mercado.

No entanto, como todas as estratégias de negociação, ele também enfrenta desafios como sensibilidade a parâmetros, atraso e mudanças no estado do mercado. A solidez e adaptabilidade da estratégia devem ser aumentadas ainda mais com a introdução de melhorias em direções como classificação do estado do mercado, gerenciamento dinâmico de fundos, análise de múltiplos quadros temporais e otimização de aprendizado de máquina.

Acima de tudo, os comerciantes devem ter uma boa compreensão dos princípios e limitações da estratégia ao aplicá-la, ajustá-la adequadamente de acordo com as preferências de risco pessoais e a experiência de mercado, e sempre aderir aos rigorosos princípios de gerenciamento de risco. Não há uma estratégia de negociação perfeita, mas com otimização contínua e aplicação cuidadosa, este sistema pode ser uma arma poderosa na caixa de ferramentas dos comerciantes.

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

//@version=6
strategy("Momentum Long + Short Strategy (BTC 3H)", overlay=true,
     default_qty_type=strategy.percent_of_equity,
     default_qty_value=100,
     initial_capital=1000,
     commission_type=strategy.commission.percent,
     commission_value=0.1,
     slippage=1,
     pyramiding=1)


// ==============================================================================
// === LONG TRADE SETTINGS
// ==============================================================================
enableLongs     = input.bool(true,  "Enable Long Trades", group="LONG TRADE SETTINGS")
slPercentLong   = input.float(3.0, "Long Stop Loss %", minval=0.1, group="LONG TRADE SETTINGS")

useRSIFilter     = input.bool(false, "Enable RSI Filter", group="LONG FILTER SETTINGS")
useADXFilter     = input.bool(false, "Enable ADX Filter", group="LONG FILTER SETTINGS")
useATRFilter     = input.bool(false, "Enable ATR Filter", group="LONG FILTER SETTINGS")
useTrendFilter   = input.bool(true,  "Require MA100 > MA500", group="LONG FILTER SETTINGS")

smoothType      = input.string("EMA", "Smoothing Type", options=["EMA", "SMA"], group="LONG FILTER SETTINGS")
smoothingLength = input.int(100, "Smoothing Length (for filters)", group="LONG FILTER SETTINGS")

rsiLengthLong   = input.int(14, "RSI Length", group="RSI FILTER")
adxLength       = input.int(14, "ADX Length", group="ADX FILTER")
atrLength       = input.int(14, "ATR Length", group="ATR FILTER")


// ==============================================================================
// === SHORT TRADE SETTINGS
// ==============================================================================
enableShorts         = input.bool(false, "Enable Short Trades", group="SHORT TRADE SETTINGS")
slPercentShort       = input.float(3.0, "Short Stop Loss %", minval=0.1, group="SHORT TRADE SETTINGS")
tpPercentShort       = input.float(4.0, "Short Take Profit %", minval=0.1, group="SHORT TRADE SETTINGS")
rsiLengthShort       = input.int(14, "RSI Length", group="SHORT FILTER SETTINGS")
rsiThresholdShort    = input.float(33, "RSI Threshold", minval=1, maxval=100, group="SHORT FILTER SETTINGS")
bbLength             = input.int(20, "Bollinger Band Length", group="SHORT FILTER SETTINGS")
useATRFilterShort    = input.bool(true, "Enable ATR Filter (Short)", group="SHORT FILTER SETTINGS")
useStrongUptrendBlock = input.bool(true, "Block Shorts if MA100 > MA500 by (%)", group="SHORT FILTER SETTINGS")
shortTrendGapPct     = input.float(2.0, "Threshold (%) for Blocking Shorts", minval=0.1, group="SHORT FILTER SETTINGS")


// ==============================================================================
// === COMMON INDICATORS
// ==============================================================================
ma100 = smoothType == "EMA" ? ta.ema(close, 100) : ta.sma(close, 100)
ma500 = smoothType == "EMA" ? ta.ema(close, 500) : ta.sma(close, 500)
priceAboveMAs = close > ma100 and close > ma500
trendAlignment = not useTrendFilter or ma100 > ma500

plot(ma100, title="MA 100", color=color.orange)
plot(ma500, title="MA 500", color=color.blue)


// ==============================================================================
// === LONG FILTER LOGIC
// ==============================================================================
rsiLong = ta.rsi(close, rsiLengthLong)
rsiSmooth = smoothType == "EMA" ? ta.ema(rsiLong, smoothingLength) : ta.sma(rsiLong, smoothingLength)
rsiPass = not useRSIFilter or rsiLong > rsiSmooth

dmi(len) =>
    up       = ta.change(high)
    down     = -ta.change(low)
    plusDM   = na(up) ? na : (up > down and up > 0 ? up : 0)
    minusDM  = na(down) ? na : (down > up and down > 0 ? down : 0)
    trur     = ta.rma(ta.tr, len)
    plusDI   = 100 * ta.rma(plusDM, len) / trur
    minusDI  = 100 * ta.rma(minusDM, len) / trur
    dx       = 100 * math.abs(plusDI - minusDI) / (plusDI + minusDI)
    ta.rma(dx, len)

adx = dmi(adxLength)
adxSmooth = smoothType == "EMA" ? ta.ema(adx, smoothingLength) : ta.sma(adx, smoothingLength)
adxPass = not useADXFilter or adx > adxSmooth

atr = ta.atr(atrLength)
atrSmooth = smoothType == "EMA" ? ta.ema(atr, smoothingLength) : ta.sma(atr, smoothingLength)
atrPass = not useATRFilter or atr > atrSmooth


// ==============================================================================
// === SHORT FILTER LOGIC
// ==============================================================================
rsiShort = ta.rsi(close, rsiLengthShort)
bbBasis = ta.sma(close, bbLength)
bbDev   = ta.stdev(close, bbLength)
bbLower = bbBasis - bbDev * 2
priceBelowBB = close < bbLower
priceBelowMAs = close < ma100 and close < ma500
rsiOversold = rsiShort < rsiThresholdShort

atrShort = ta.atr(atrLength)
atrShortSmoothed = smoothType == "EMA" ? ta.ema(atrShort, smoothingLength) : ta.sma(atrShort, smoothingLength)
atrShortPass = not useATRFilterShort or atrShort > atrShortSmoothed

emaGapTooWide = (ma100 - ma500) / ma500 * 100 > shortTrendGapPct
strongUptrendBlock = not useStrongUptrendBlock or not emaGapTooWide


// ==============================================================================
// === ENTRY CONDITIONS
// ==============================================================================
longCondition = enableLongs and priceAboveMAs and trendAlignment and rsiPass and adxPass and atrPass
shortCondition = enableShorts and priceBelowMAs and priceBelowBB and rsiOversold and atrShortPass and strongUptrendBlock

if longCondition
    strategy.entry("Long", strategy.long)

if shortCondition
    strategy.entry("Short", strategy.short)


// ==============================================================================
// === EXIT CONDITIONS
// ==============================================================================
longStop = strategy.position_avg_price * (1 - slPercentLong / 100)
strategy.exit("SL Long", from_entry="Long", stop=longStop)

if strategy.position_size > 0 and close < ma500
    strategy.close("Long", comment="TP Below MA500")

shortStop = strategy.position_avg_price * (1 + slPercentShort / 100)
shortTP   = strategy.position_avg_price * (1 - tpPercentShort / 100)

strategy.exit("SL/TP Short", from_entry="Short", stop=shortStop, limit=shortTP)