Estratégia de negociação de faixa de preço dinâmica e divergência RSI: filtragem de tendência de média móvel multiperíodo e otimização de gerenciamento de posição dinâmica

RSI MA DIVERGENCE DYNAMIC POSITION SIZING TREND FILTERING BOX RANGE
Data de criação: 2025-05-15 16:07:47 última modificação: 2025-05-15 16:07:47
cópia: 3 Cliques: 306
2
focar em
319
Seguidores

Estratégia de negociação de faixa de preço dinâmica e divergência RSI: filtragem de tendência de média móvel multiperíodo e otimização de gerenciamento de posição dinâmica Estratégia de negociação de faixa de preço dinâmica e divergência RSI: filtragem de tendência de média móvel multiperíodo e otimização de gerenciamento de posição dinâmica

Visão geral

A estratégia de negociação de distância entre os preços dinâmicos e o RSI é um sistema de negociação quantitativa abrangente, que combina as três principais tecnologias de detecção de distância entre os preços, sinais de distância entre os indicadores RSI e análise de tendências de média móvel. A estratégia foi especialmente projetada para a plataforma de robôs de sinais OKX, com funções avançadas de ajuste de posição dinâmica e parcial de posição de equilíbrio.

A particularidade da estratégia reside no seu sistema de gestão de posições dinâmicas, que permite ajustar dinamicamente o volume de transação de acordo com a diferença entre o preço atual e o preço médio de detenção de posições, permitindo que a estratégia aumente as posições quando os preços continuam a evoluir na direção favorável, ao mesmo tempo em que diminui gradualmente a posição quando os preços começam a reverter, o que optimiza a eficiência do capital e o retorno do risco.

Princípio da estratégia

A estratégia baseia-se em três componentes principais:

  1. Detecção de faixas de preçosA estratégia consiste em calcular os preços máximos e mínimos de um determinado período. Estes níveis de preços são traçados no gráfico como linhas de fronteira superior e inferior, fornecendo uma gama de preços de referência visível para a negociação.

  2. RSI desviação de detecçãoA estratégia usa o índice de força e fraqueza relativa (RSI) para calcular a dinâmica do mercado e detectar o desvio entre o preço e o RSI. Quando o preço marca uma nova baixa e o RSI marca uma baixa mais alta, um desvio de bullish é formado; Quando o preço marca uma nova alta e o RSI marca uma alta mais baixa, um desvio de bullish é formado. A estratégia identifica com precisão os extremos locais, configurando um ciclo de retorno para a esquerda e para a direita (leftLookback e rightLookback).

  3. Análise de tendências de médias móveis: A estratégia calcula vários tipos de médias móveis em um período de tempo personalizado (MA20, MA50, MA100 e MA200) e determina a tendência do mercado analisando a disposição e a posição do preço em relação à linha média. A estratégia apenas aciona vários sinais em uma tendência descendente para garantir que as negociações estejam de acordo com o ambiente geral do mercado.

A lógica da transação é a seguinte:

  • Faz mais sinais.: Acionado quando o preço ultrapassa o limite inferior e detecta um desvio do pescador RSI, assegurando a execução somente em condições de tendência descendente. O sistema ajusta dinamicamente o tamanho da posição de acordo com a diferença entre o preço atual e o preço médio da posição.
  • Sinais de redução de posição: Acionado quando o preço ultrapassa a fronteira superior e detecta um desvio do RSI, mas assegurando a execução somente em condições de tendência ascendente. O sistema irá fechar algumas posições de acordo com a dinâmica do preço em relação ao preço médio da posição.

Vantagens estratégicas

  1. Mecanismo de confirmação multidimensionalA combinação de breakouts de intervalos de preços, filtragem de tendências do RSI fora do sinal e da média móvel, criou um sistema de confirmação de transações multidimensional, o que aumentou significativamente a confiabilidade e a precisão dos sinais de negociação.

  2. Gestão de posições dinâmicasEstratégia: ajustar o tamanho da posição de forma dinâmica de acordo com as condições do mercado e as mudanças de preço, em vez de usar uma distribuição de posição fixa. Isso permite que a estratégia maximize o potencial de lucro em um ambiente de mercado favorável, enquanto controla o risco em condições adversas.math.max(math.min(math.pow((avgPrice - close)* 1000/5,1.1), 100), minEnterPercent)Assegurar que os ajustes de posição sejam flexíveis e limitados.

  3. Adaptação ao mercadoA estratégia é capaz de se adaptar a diferentes ambientes de mercado através da análise de cruzamentos e de alinhamento de médias móveis, executando transações somente quando a forma técnica coincide com a tendência geral.

  4. Pontos de entrada e saída precisos: O sinal de desvio mais a quebra do intervalo de preços fornece pontos de entrada e saída precisos, reduzindo a possibilidade de falsos sinais. Os parâmetros de retrospecção (leftLookback e rightLookback) aumentam a precisão da identificação dos pontos de extremo.

  5. Visualização de comentáriosA estratégia consiste em traçar os intervalos de preços, as médias móveis e os sinais de negociação em gráficos, fornecendo um feedback visual intuitivo para que os operadores entendam e verifiquem suas decisões de negociação.

  6. Configuração de parâmetros flexívelUma variedade de parâmetros ajustáveis permite que a estratégia se adapte a diferentes mercados e estilos de negociação, como a duração do RSI, o período de intervalo de preço e o período de retrocesso.

Risco estratégico

  1. Risco de Falso BreakoutA ruptura do intervalo de preços pode ser, por vezes, temporária e não o início de uma tendência real. Isso pode levar a negociações desnecessárias e a perdas. A forma de reduzir o risco é adicionar fatores de confirmação, como o alargamento do ciclo de retorno ou o aumento da confirmação do volume de transação.

  2. Risco de excesso de negociaçãoA correção de posição dinâmica pode levar a transações excessivas, aumentando os custos de transação. Recomenda-se o estabelecimento de um mínimo de ajustamento razoável (min.

  3. Risco de atraso da linha médiaA média móvel tem um atraso, especialmente em mercados de rápida mudança. Este risco pode ser reduzido por meio de ajustes no tipo de média usada (como a mudança de SMA para EMA) ou ajustes no ciclo da média.

  4. Sensibilidade do parâmetroA estratégia depende de vários parâmetros, como o RSI, o período médio, etc. As pequenas mudanças nesses parâmetros podem afetar significativamente o desempenho da estratégia. É recomendável encontrar configurações robustas através do teste de retorno de diferentes combinações de parâmetros e re-otimizar periodicamente os parâmetros para se adaptar a mudanças nas condições do mercado.

  5. Dependência do mercado únicoA estratégia pode funcionar bem em certas condições de mercado e mal em outras. Recomenda-se testar a estratégia em diferentes ambientes de mercado e diferentes prazos e considerar a inclusão de filtros de estado de mercado para suspender a negociação em condições de mercado inadequadas.

Direção de otimização

  1. Aumentar a confirmação do volumeA estratégia atual baseia-se apenas no preço e no RSI para tomar decisões de negociação. A análise de volume de transação pode ser verificada pela eficácia de uma ruptura entre os intervalos de preço, evitando a falsa ruptura de um volume de transação insuficiente.

  2. Introdução de um mecanismo de ajuste de taxa de flutuaçãoDurante períodos de alta volatilidade, adicione um filtro de sinal ou ajuste a fórmula de tamanho de posição para reduzir o risco de falso sinal e controlar o limite de risco máximo. O indicador ATR (Average True Range) pode ser usado para quantificar a volatilidade e ajustar dinamicamente os parâmetros de negociação.

  3. Adicionar filtro de lucro/dívidaA estratégia geral consiste em: estimar o potencial de risco-retorno antes de cada transação, e executar apenas as transações que atingem o mínimo de perda-luz em relação à depreciação, otimizando assim o retorno esperado da estratégia geral. Isso pode ser feito através da configuração de níveis de stop loss e stop loss dinâmicos baseados no ATR.

  4. Introdução à análise de múltiplos quadros temporais: A qualidade do sinal pode ser melhorada adicionando confirmação de tendência em um período de tempo mais elevado. Por exemplo, execute uma transação somente quando a tendência do dia-a-dia coincide com a tendência do período de tempo de negociação atual.

  5. Melhorias no algoritmo de posição dinâmicaA função de correção atual pode produzir ajustes excessivos ou excessivos em casos extremos. Algoritmos mais complexos podem ser considerados, como fórmulas de auto-adaptação baseadas na volatilidade do mercado e na situação atual de lucro, ou a introdução de limites de abertura de risco para garantir que uma única transação não afete excessivamente a carteira geral.

  6. Adição de parâmetros de otimização automáticaImplementar um ciclo de otimização automática de parâmetros, ajustando periodicamente os parâmetros da estratégia com base nos dados mais recentes do mercado, para que a estratégia possa se adaptar melhor às condições de mercado em mudança. Isso pode ser feito por meio de um quadro de feedback ou algoritmos de aprendizado de máquina.

Resumir

A estratégia de negociação de distância entre os intervalos de preço dinâmico e o RSI é um sistema de negociação quantitativo avançado que integra vários métodos de análise técnica, combinado com a tendência de distância entre os intervalos de preço, o RSI e a média móvel, fornecendo uma forte estrutura de decisão de negociação. Sua maior vantagem é o sistema de gerenciamento de posições dinâmicas, que pode ajustar automaticamente a escala de negociação de acordo com as condições do mercado, otimizando a eficiência do capital enquanto mantém o controle do risco.

Embora existam alguns riscos inerentes às estratégias, como falsas brechas e sensibilidade a parâmetros, a estabilidade e adaptabilidade das estratégias podem ser aumentadas ainda mais através de direções de otimização sugeridas, como o aumento da confirmação de volume de transação, a introdução de ajustes de taxa de volatilidade e a análise de múltiplos períodos de tempo. Para os comerciantes que desejam implementar estratégias avançadas em plataformas de negociação automatizadas (como o robô de sinais OKX), isso oferece uma estrutura básica flexível e robusta, que pode ser personalizada e ampliada de acordo com o estilo de negociação individual e as preferências do mercado.

Código-fonte da estratégia
/*backtest
start: 2025-05-07 00:00:00
end: 2025-05-14 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=6
// Strategy: Box Range with RSI Divergence (Dynamic Adjustment - OKX Signal Format)
// © aws2333
//I'm chinese 
strategy("Kaito  Box with RSI Div(Dynamic Adjustment + MA + Long)", overlay=true,default_qty_type=strategy.percent_of_equity, default_qty_value=10)


rsiOverbought = 80 
rsiOversold = 13   
boxLength = input.int(3, title="Box Length", minval=1) 
rsiLength = input.int(2, title="RSI Length", minval=1) 
divergenceLookback = input.int(2, title="Divergence Lookback Period", minval=1) 
leftLookback = input.int(2, title="Left Lookback", minval=1)  
rightLookback = input.int(2, title="Right Lookback", minval=1) 
var float avgPrice = na       
//var float position_size = 0     

signalToken = input.string("**********", "Signal Token")
enterOrderType = input.string("limit", "Order Type", options=["market", "limit"])
enterOrderPriceOffset = input.float(0.05, "Order Price Offset", minval=0, maxval=100, step=0.01)
enterInvestmentType = input.string("percentage_investment", "Investment Type", options=["margin", "contract", "percentage_balance", "percentage_investment"])
exitOrderType = input.string("limit", "Order Type", options=["market", "limit"])
exitOrderPriceOffset = input.float(0.05, "Order Price Offset", minval=0, maxval=100, step=0.01)
exitInvestmentType = input.string("percentage_position", "Investment Type", options=["percentage_position"])
maxLag = input.float(30, "maxLag")

minEnterPercent = 1.3  
minExitPercent = 0.09  


highestHigh = ta.highest(high, boxLength) 
lowestLow = ta.lowest(low, boxLength)  


plot(highestHigh, title="Upper Box", color=color.new(color.green, 0), linewidth=1, style=plot.style_line)
plot(lowestLow, title="Lower Box", color=color.new(color.red, 0), linewidth=1, style=plot.style_line)


rsi = ta.rsi(low, rsiLength)


isLowestLeft = low < ta.lowest(low[1], leftLookback)  
isLowestRight = low <= ta.lowest(low, rightLookback) 
isLowestClose = isLowestLeft and isLowestRight      

isHighestLeft = low > ta.highest(low[1], leftLookback) 
isHighestRight = low >= ta.highest(low, rightLookback) 
isHighestClose = isHighestLeft and isHighestRight      

lowestClose = ta.lowest(low, divergenceLookback)
lowestRsi = ta.lowest(rsi, divergenceLookback)
highestClose = ta.highest(low, divergenceLookback)
highestRsi = ta.highest(rsi, divergenceLookback)


lowestClosePrev = ta.lowest(low[1], leftLookback)
lowestRsiPrev = ta.lowest(rsi[1], leftLookback)
highestClosePrev = ta.highest(low[1], leftLookback)
highestRsiPrev = ta.highest(rsi[1], leftLookback)



bullishDivergence = isLowestClose and (low < lowestClosePrev) and (rsi > lowestRsiPrev) and (rsi < rsiOversold)
bearishDivergence = isHighestClose and (low > highestClosePrev) and (rsi < highestRsiPrev) and (rsi > rsiOverbought)


ma(source, length, type) =>
    type == "SMA" ? ta.sma(source, length) :type == "EMA" ? ta.ema(source, length) :type == "SMMA (RMA)" ? ta.rma(source, length) :type == "WMA" ? ta.wma(source, length) :type == "VWMA" ? ta.vwma(source, length) :na


custom_timeframe = input.timeframe("3", "Custom time period (leave blank for current period)")


ma_type = input.string("SMA", "Moving average type", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])


ma20_period = input.int(20, "MA20 ", minval=1)
ma50_period = input.int(50, "MA50 ", minval=1)
ma100_period = input.int(100, "MA100 ", minval=1)
ma200_period = input.int(200, "MA200 ", minval=1)


source_close = request.security(syminfo.tickerid, custom_timeframe, close)


ma20 = ma(source_close, ma20_period, ma_type)
ma50 = ma(source_close, ma50_period, ma_type)
ma100 = ma(source_close, ma100_period, ma_type)
ma200 = ma(source_close, ma200_period, ma_type)


up_signal_1 = ma20 > ma200  
up_signal_2 = ma50 > ma200  
up_signal_3 = ma100 > ma200 
up_signal_4 = (high > ma20 and high > ma50 and high > ma100 and high > ma200)
up_trend = (up_signal_1 and up_signal_2 and up_signal_3 and (source_close > ma200)) or up_signal_4 


down_signal_1 = ma20 < ma200  
down_signal_2 = ma50 < ma200  
down_signal_3 = ma100 < ma200 
down_signal_4 = (low < ma20 and low < ma50 and low < ma100 and low < ma200)
down_trend = (down_signal_1 and down_signal_2 and down_signal_3 and (source_close < ma200)) or down_signal_4 




plot(ma20, color=color.yellow, title="MA20")
plot(ma50, color=color.orange, title="MA50")
plot(ma100, color=color.red, title="MA100")
plot(ma200, color=color.maroon, title="MA200")


var float longAddPercent = na 
var float shortAddPercent = na 
roundToFourDecimals(value) => math.round(value * 10000) / 10000

if not na(avgPrice)
    if close < avgPrice
        longAddPercent := roundToFourDecimals(math.max(math.min(math.pow((avgPrice - close)* 1000/5,1.1)  , 100), minEnterPercent)) 
    if close > avgPrice
        longAddPercent := 1
 
    if close == avgPrice
        longAddPercent := 1


if not na(avgPrice)
    if close < avgPrice
        shortAddPercent := 0.01
 
    if close > avgPrice
        shortAddPercent := roundToFourDecimals(math.max(math.min(math.pow((close - avgPrice)*1000,1.1), 100), minExitPercent)) 
    if close == avgPrice
        longAddPercent := 1


longSignal = (close <= lowestLow) and bullishDivergence
shortSignal = (close >= highestHigh) and bearishDivergence
plotLongSignal = down_trend and longSignal and close < avgPrice
plotShortSignal = up_trend and shortSignal and close > avgPrice  

if plotLongSignal
    label.new(bar_index, avgPrice, "average price: " + str.tostring(avgPrice, "#.####"), style=label.style_label_up, color=color.green, textcolor=color.white )
if plotShortSignal
    label.new(bar_index, avgPrice,"average price: " + str.tostring(avgPrice, "#.####"), style=label.style_label_down, color=color.red, textcolor=color.white)




if plotLongSignal
    label.new(
         bar_index, 
         close, 
         "LONG :" + str.tostring(longAddPercent, "#.####") + "%, Close: " + str.tostring(close, "#.####"), 
         style=label.style_label_up, 
         color=color.new(color.green, 80), 
         textcolor=color.white
         )

if plotShortSignal
    label.new(
             bar_index, 
             close, 
             "EXIT LONG :" + str.tostring(shortAddPercent, "#.####") + "%, Close: " + str.tostring(close, "#.####"), 
             style=label.style_label_down, 
             color=color.new(color.red, 80), 
             textcolor=color.white
             )


if longSignal

    avgPrice := na(avgPrice) ? close : (avgPrice + close) / 2 







  
if down_trend and longSignal
     
    strategy.entry("Long",strategy.long,qty=longAddPercent )
    
var float close_size = na

if up_trend and shortSignal 

    if strategy.position_size > 0
        close_size := strategy.position_size * (shortAddPercent/100)  
        strategy.order("Partial Close Long", strategy.short, close_size)