Estratégia de negociação de regressão RSI multinível e ajuste dinâmico de volatilidade

RSI、PIVOT
Data de criação: 2024-06-21 14:16:31 última modificação: 2024-06-21 14:16:31
cópia: 0 Cliques: 567
1
focar em
1617
Seguidores

Estratégia de negociação de regressão RSI multinível e ajuste dinâmico de volatilidade

Visão geral

A estratégia é um sistema de negociação de retorno de valor médio em níveis múltiplos, baseado nos indicadores RSI e na volatilidade dos preços. Utiliza os extremos do RSI e as variações de preços extraordinariamente grandes como sinais de entrada, ao mesmo tempo em que utiliza ações de risco em forma de pirâmide e paradas dinâmicas para gerenciar o risco e otimizar os ganhos.

Princípio da estratégia

  1. Condições de entrada:

    • Usando o RSI de 20 períodos (RSI20) como indicador principal
    • Configure vários limites de RSI (< 3565, 3070, 2575, 2080) e os correspondentes limites de taxa de flutuação
    • Quando o RSI atinge um determinado limiar e o tamanho da entidade de linha K atual excede o correspondente limiar de taxa de flutuação, o sinal de entrada é acionado
    • Condição adicional: Preço precisa de uma determinada porcentagem para quebrar o suporte de alta/baixa mais recente
  2. Mecanismo de aceleração:

    • Permitido até 5 entradas ((entrada inicial + 4 acréscimos)
    • Cada acréscimo exige condições mais rigorosas de RSI e volatilidade
  3. Mecanismo de saída:

    • Configure 5 níveis de paragem diferentes
    • Ponto de paragem baseado no cálculo da dinâmica de suporte/resistência no momento da entrada
    • O objetivo de suspensão diminui com o aumento do número de posições
  4. Controle de risco:

    • Utilizando o modelo de risco percentual, o risco de cada transação é fixado em 20% do valor total da conta
    • Configuração de posições simultâneas máximas permitidas de 5, limitando a abertura de risco total

Vantagens estratégicas

  1. Multi-Level Entry: A estratégia pode capturar diferentes níveis de extremos de mercado, aumentando as oportunidades de negociação, através da configuração de vários RSI e oscilação de limiares.

  2. Paradas dinâmicas: Paradas baseadas em pontos de suporte/resistência, que podem ser ajustadas de acordo com a estrutura do mercado, protegendo os lucros e evitando a saída prematura.

  3. Aumento de posições de forma piramidal: Aumento de posições de forma a aumentar o potencial de lucro, se a tendência continuar.

  4. Gerenciamento de riscos: fixação de porcentagem de risco e limite máximo de posições, controle efetivo de risco por transação e total.

  5. Flexibilidade: uma grande quantidade de parâmetros ajustáveis permite que a estratégia se adapte a diferentes ambientes de mercado e variedades de negociação.

  6. Regresso médio + acompanhamento de tendências: combina os benefícios do regresso médio e do acompanhamento de tendências para capturar uma reversão de curto prazo e não perder uma tendência maior.

Risco estratégico

  1. Excesso de negociação: pode desencadear sinais de negociação com frequência em mercados de alta volatilidade, resultando em taxas de transação excessivas.

  2. Falsa ruptura: o mercado pode se recuperar rapidamente após uma breve e extrema oscilação, causando um sinal falso.

  3. Perda contínua: se o mercado continuar em movimento unidirecional, pode resultar em perdas significativas após várias adições.

  4. Sensibilidade de parâmetros: a performance da estratégia pode ser altamente sensível à configuração de parâmetros, existindo o risco de sobreajuste.

  5. Efeitos de deslizamento: durante períodos de forte volatilidade, pode haver deslizamentos graves que afetam o desempenho da estratégia.

  6. Dependência do cenário de mercado: a estratégia pode não funcionar bem em certos cenários de mercado, como mercados de baixa volatilidade ou de forte tendência.

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

  1. Ajuste de parâmetros dinâmicos: introdução de um mecanismo de adaptação para ajustar o RSI e os limites de volatilidade de acordo com a situação do mercado.

  2. Análise de ciclo de tempo múltipla: combinada com a avaliação de tendências de mercado a mais longo prazo, para melhorar a qualidade de entrada.

  3. Optimização de Stop Loss: Aumento de Stop Loss de rastreamento ou Stop Loss dinâmico baseado em ATR para controlar ainda mais o risco.

  4. Filtragem de estado de mercado: adicione condições de filtragem, como intensidade de tendência e ciclo de flutuação, para evitar a negociação em um ambiente de mercado inadequado.

  5. Otimização de gestão de fundos: realização de uma gestão de posição mais minuciosa, como o ajuste do tamanho de negociação de acordo com diferentes níveis de sinais.

  6. Integração de aprendizado de máquina: otimizar a seleção de parâmetros e o processo de geração de sinais usando algoritmos de aprendizado de máquina.

  7. Análise de correlação: integra a análise de correlação com outros ativos, aumentando a estabilidade e a diversidade da estratégia.

Resumir

A estratégia de negociação de regressão de RSI de múltiplos níveis é um sistema de negociação quantitativa cuidadosamente concebido, que combina habilmente a análise técnica, a gestão de risco dinâmico e a tecnologia de aceleração piramidal. A estratégia apresenta um forte potencial de lucro, capturando a extrema flutuação do mercado e lucrando quando o preço retorna. No entanto, também enfrenta desafios como o excesso de negociação e a dependência do ambiente de mercado.

Código-fonte da estratégia
/*backtest
start: 2024-05-01 00:00:00
end: 2024-05-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('Retorno_Pivots_5min_Novo_v3.3')

// Input variables
bars_left1 = input(1, title = "Entry - Pivot Left Bars")
bars_right1 = input(1, title = "Entry - Pivot Right Bars")
rsi20_longentry0 = input(35, title = "Entry 1 - RSI20 Long")
rsi20_shortentry0 = input(65, title = "Entry 1 - RSI20 Short")
bar_size_entry0 = input.float(1, title="Entry 1 - Bar Size")
rsi20_longentry1 = input(30, title = "Entry 2 - RSI20 Long")
rsi20_shortentry1 = input(70, title = "Entry 2 - RSI20 Short")
bar_size_entry1 = input.float(0.8, title="Entry 2 - Bar Size")
rsi20_longentry2 = input(25, title = "Entry 3 - RSI20 Long")
rsi20_shortentry2 = input(75, title = "Entry 3 - RSI20 Short")
bar_size_entry2 = input.float(0.7, title="Entry 3 - Bar Size")
rsi20_longentry3 = input(20, title = "Entry 4 - RSI20 Long")
rsi20_shortentry3 = input(80, title = "Entry 4 - RSI20 Short")
bar_size_entry3 = input.float(0.5, title="Entry 4 - Bar Size")
limit_perc1 = input.float(0.60, title="Profit Range 1")
limit_perc2 = input.float(0.40, title="Profit Range 2")
limit_perc3 = input.float(0.20, title="Profit Range 3")
limit_perc4 = input.float(0.00, title="Profit Range 4")
limit_perc5 = input.float(0.00, title="Profit Range 5")
minimum_pivot_distance = input.float(0, title="Minimum Pivot Distance %")
barsize_1h_input = input(288, title="Highest Bar Lookback")
rsi20 = ta.rsi(close, 20)
rsi200 = ta.rsi(close, 200)
Pivot_High_Last1 = ta.valuewhen(ta.pivothigh(high, bars_left1, bars_right1), ta.pivothigh(high, bars_left1, bars_right1), 0)
Pivot_Low_Last1 = ta.valuewhen(ta.pivotlow(low, bars_left1, bars_right1), ta.pivotlow(low, bars_left1, bars_right1), 0)

barsize = math.abs(close - open)
barsize_1h = ta.highest(barsize, barsize_1h_input)

Bar0Long = rsi20 < rsi20_longentry0 and barsize >= (barsize_1h * bar_size_entry0)
Bar1Long = rsi20 < rsi20_longentry1 and barsize >= (barsize_1h * bar_size_entry1)
Bar2Long = rsi20 < rsi20_longentry2 and barsize >= (barsize_1h * bar_size_entry2)
Bar3Long = rsi20 < rsi20_longentry3 and barsize >= (barsize_1h * bar_size_entry3)

// Long Entries
Long_Entry1 = strategy.opentrades == 0 and rsi20 < rsi20[1] and ((rsi20 < rsi20_longentry0 and barsize >= (barsize_1h * bar_size_entry0)) or (rsi20 < rsi20_longentry1 and barsize >= (barsize_1h * bar_size_entry1)) or (rsi20 < rsi20_longentry2 and barsize >= (barsize_1h * bar_size_entry2)) or (rsi20 < rsi20_longentry3 and barsize >= (barsize_1h * bar_size_entry3))) and close < (Pivot_Low_Last1 * (1 - (minimum_pivot_distance / 100)))
Long_Entry2 = strategy.opentrades == 1 and strategy.position_size > 0 and rsi20 < rsi20[1] and (Bar0Long or Bar1Long or Bar2Long or Bar3Long)
Long_Entry3 = strategy.opentrades == 2 and strategy.position_size > 0 and rsi20 < rsi20[1] and (Bar0Long or Bar1Long or Bar2Long or Bar3Long)
Long_Entry4 = strategy.opentrades == 3 and strategy.position_size > 0 and rsi20 < rsi20[1] and (Bar0Long or Bar1Long or Bar2Long or Bar3Long)
Long_Entry5 = strategy.opentrades == 4 and strategy.position_size > 0 and rsi20 < rsi20[1] and (Bar0Long or Bar1Long or Bar2Long or Bar3Long)
if Long_Entry1 or Long_Entry2 or Long_Entry3 or Long_Entry4 or Long_Entry5
    strategy.entry("Long", strategy.long, comment = "ENTER-LONG_BINANCE-FUTURES_BTCBUSD_Bot-BTC-1min_1M_970d2ee265390c27")
// Longs Exits
Long_Exit1 = strategy.opentrades == 1 and close > (strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc1))
Long_Exit2 = strategy.opentrades == 2 and close > (strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc2))
Long_Exit3 = strategy.opentrades == 3 and close > (strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc3))
Long_Exit4 = strategy.opentrades == 4 and close > (strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc4))
Long_Exit5 = strategy.opentrades == 5 and close > (strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc5))
if Long_Exit1 or Long_Exit2 or Long_Exit3 or Long_Exit4 or Long_Exit5
    strategy.close("Long", comment = "EXIT-LONG_BINANCE-FUTURES_BTCBUSD_Bot-BTC-1min_1M_970d2ee265390c27")

Bar0Short = rsi20 > rsi20_shortentry0 and barsize >= (barsize_1h * bar_size_entry0)
Bar1Short = rsi20 > rsi20_shortentry1 and barsize >= (barsize_1h * bar_size_entry1)
Bar2Short = rsi20 > rsi20_shortentry2 and barsize >= (barsize_1h * bar_size_entry2)
Bar3Short = rsi20 > rsi20_shortentry3 and barsize >= (barsize_1h * bar_size_entry3)

// Short Entries
Short_Entry1 = strategy.opentrades == 0 and rsi20 > rsi20[1] and ((rsi20 > rsi20_shortentry0 and barsize >= (barsize_1h * bar_size_entry0)) or (rsi20 > rsi20_shortentry1 and barsize >= (barsize_1h * bar_size_entry1)) or (rsi20 > rsi20_shortentry2 and barsize >= (barsize_1h * bar_size_entry2)) or (rsi20 > rsi20_shortentry2 and barsize >= (barsize_1h * bar_size_entry2))) and close > (Pivot_High_Last1 * (1 + (minimum_pivot_distance / 100)))
Short_Entry2 = strategy.opentrades == 1 and strategy.position_size < 0 and rsi20 > rsi20[1] and (Bar0Short or Bar1Short or Bar2Short or Bar3Short)
Short_Entry3 = strategy.opentrades == 2 and strategy.position_size < 0 and rsi20 > rsi20[1] and (Bar0Short or Bar1Short or Bar2Short or Bar3Short)
Short_Entry4 = strategy.opentrades == 3 and strategy.position_size < 0 and rsi20 > rsi20[1] and (Bar0Short or Bar1Short or Bar2Short or Bar3Short)
Short_Entry5 = strategy.opentrades == 4 and strategy.position_size < 0 and rsi20 > rsi20[1] and (Bar0Short or Bar1Short or Bar2Short or Bar3Short)
if Short_Entry1 or Short_Entry2 or Short_Entry3 or Short_Entry4 or Short_Entry5
    strategy.entry("Short", strategy.short, comment = "ENTER-SHORT_BINANCE-FUTURES_BTCBUSD_Bot-BTC-1min_1M_970d2ee265390c27")
// Short Exits
Short_Exit1 = strategy.opentrades == 1 and close < (strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc1))
Short_Exit2 = strategy.opentrades == 2 and close < (strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc2))
Short_Exit3 = strategy.opentrades == 3 and close < (strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc3))
Short_Exit4 = strategy.opentrades == 4 and close < (strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc4))
Short_Exit5 = strategy.opentrades == 5 and close < (strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc5))
if Short_Exit1 or Short_Exit2 or Short_Exit3 or Short_Exit4 or Short_Exit5
    strategy.close("Short", comment = "EXIT-SHORT_BINANCE-FUTURES_BTCBUSD_Bot-BTC-1min_1M_970d2ee265390c27")

// Plots
plot(rsi20, color=color.new(#fbff00, 0), linewidth=2)
plot(((strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc1))), color=color.new(#00ff2a, 0), linewidth=2)
plot(((strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc2))), color=color.new(#00ff2a, 50), linewidth=2)
plot(((strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc3))), color=color.new(#00ff2a, 80), linewidth=2)
plot(((strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc4))), color=color.new(#00ff2a, 100), linewidth=2)
plot((strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc1)), color=color.new(#ff0000, 0), linewidth=2)
plot((strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc2)), color=color.new(#ff0000, 50), linewidth=2)
plot((strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc3)), color=color.new(#ff0000, 80), linewidth=2)
plot((strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc4)), color=color.new(#ff0000, 100), linewidth=2)
plot(strategy.position_avg_price, color=color.new(#ffc400, 0), linewidth=2)
plot(strategy.opentrades * (strategy.position_size / math.abs(strategy.position_size)), color=color.new(#ff00bb, 0), linewidth=2)
plot(((barsize / barsize_1h) * 100), color=color.new(#0000ff, 0), linewidth=2)