Estratégia de rede de caixa do RSI

Autora:ChaoZhang, Data: 2023-10-30 11:29:30
Tags:

img

Resumo

Esta estratégia é um bot de pseudo-rede destinado principalmente à negociação algorítmica. Ele usa uma grade dinâmica, ponderada por volume, que é atualizada apenas quando o RSI atende a certas condições. É também uma estratégia de ruptura, enquanto que os bots normais de rede não são (os bots de rede típicos vendem quando uma grade mais alta é atingida, enquanto esta estratégia vende quando uma grade mais baixa é violada sob condições específicas).

Em suma, a estratégia atualiza sua grade para os valores mais altos/mais baixos ponderados por volume da sua fonte dada (src nas configurações) cada vez que o RSI cruza abaixo/acima dos níveis de sobrecompra/supervenda. A partir deste intervalo, ele gera uma grade de cinco linhas espaçadas uniformemente e usa a fonte atual para determinar qual linha da grade é mais próxima.

Você pode configurar shorts, fonte, comprimento do RSI e níveis de sobrecompra / sobrevenda nas configurações.

Estratégia lógica

A lógica central da estratégia é a seguinte:

  1. Utilize o indicador RSI para determinar os pontos de inversão da tendência, utilizando como sinais de confirmação os cruzamentos de linhas RSI dos níveis de sobrecompra/supervenda.

  2. Quando ocorrer o sinal RSI, registar os preços mais altos/mais baixos ao longo de um período como limites superiores/inferiores da rede.

  3. Divida o intervalo em 5 linhas de grelha espaçadas uniformemente.

  4. Quando o preço atravessa a linha acima, vá longo. Quando o preço atravessa a linha abaixo, aplanar longs e ir curto.

  5. Usando breakout em vez de toque, pode detectar melhor inversões de tendência.

  6. Feche todas as ordens de pirâmide antes de fechar para evitar riscos durante a noite.

A estratégia consiste em:

  1. Configurações de entrada: fonte, parâmetros do RSI, longo/curto, etc.

  2. Calculo do RSI: calcular o RSI e verificar se há sinais de cruzamento.

  3. Grelha dinâmica: registar os intervalos de preços dos sinais RSI e calcular as linhas da grade.

  4. Verificação de sinal: detecção de linhas de rede de quebra de preço para sinais longos/cortos.

  5. Gestão de pedidos: enviar pedidos e aplanar antes do fechamento.

  6. Cartografia: traçar linhas de rede, zonas longas/cortas, etc.

Ao atualizar dinamicamente a grade e usar o RSI para o contexto da tendência mais os sinais de ruptura, esta estratégia pode efetivamente rastrear tendências e reverter quando a tendência muda.

Análise das vantagens

As principais vantagens desta estratégia são:

  1. Grade dinâmica adapta-se à tendência, ao contrário de grades fixas.

  2. Só ajusta a grelha na confirmação do RSI, reduzindo o ruído.

  3. Os sinais de fuga detetam as reversões melhor do que o toque.

  4. Para evitar riscos de lacuna durante a noite, estabiliza-se antes do fechamento.

  5. O RSI é eficaz para a detecção de sobrecompra/venda.

  6. O modo de ruptura fornece entrada de tendência mais cedo em comparação com a reversão.

  7. Ajustar o espaçamento e o tamanho da grade permite ajustar o risco.

  8. Grade visual e zonas longas/cortas.

  9. Calções opcionais para atender a diferentes comerciantes.

  10. Uma lógica simples e clara adequada para a troca de algoes.

Estes tornam a estratégia capaz de rastreamento automático de tendências com controles de risco para negociação ao vivo.

Análise de riscos

Há também alguns riscos potenciais a ter em conta:

  1. Os mercados de Whipsaw podem causar stop losses, podem alargar as paradas ou pausar a negociação.

  2. Os intervalos durante a noite podem deixar grandes espaços abertos, reduzindo o tamanho das posições.

  3. A má regulação dos parâmetros pode aumentar as negociações ou erros de sinal.

  4. As taxas elevadas podem corroer os lucros dos negócios da rede.

  5. Os sinais de ruptura podem atrasar as inversões ligeiramente.

  6. Pode ter um desempenho inferior em tendências ascendentes constantes.

  7. Precisa de capital suficiente para posições maiores e pirâmide, caso contrário os resultados serão pobres.

Atenuantes:

  1. Otimizar os parâmetros para reduzir a frequência de negociação e o excesso de negociação.

  2. Combine com indicadores de tendência, evite os períodos de negociação.

  3. Reduzir o tamanho da transacção em % e o risco por transacção.

  4. Teste diferentes limiares de ruptura para obter o melhor equilíbrio entre o tempo e a estabilidade.

  5. Adicionar mais condições de entrada, apenas inserir tendências claras para evitar ser preso.

  6. Testes de retrocesso durante períodos mais longos para avaliar a estabilidade dos parâmetros.

  7. Explorar a otimização de parâmetros dinâmicos baseada no aprendizado de máquina para a adaptabilidade do mercado.

  8. Considerar a combinação com estratégias de opções para cobrir riscos de posição.

  9. Ajustar os parâmetros com base nas recentes condições do mercado para manter a estratégia eficaz.

  10. Construir plataformas de otimização visual para auxiliar no teste rápido.

Com a otimização de parâmetros, a combinação de sinais e mais informações de mercado, os riscos podem ser reduzidos para fazer uma estratégia algo realmente confiável.

Oportunidades de melhoria

A estratégia pode ser reforçada através de:

  1. Otimizar os parâmetros do RSI, testar os períodos do RSI para as melhores combinações.

  2. Testar diferentes espaçamentos de grelhas para obter o melhor risco-recompensa.

  3. Adição de outros indicadores aos sinais de filtragem, por exemplo MACD, KD, etc., para melhorar a precisão.

  4. Desenvolver paradas adaptativas baseadas na volatilidade do mercado.

  5. Aumentando as condições de entrada, só entrem tendências óbvias para evitar armadilhas.

  6. Testes de regresso durante períodos mais longos para avaliar a estabilidade dos parâmetros.

  7. Explorar a otimização dinâmica baseada no aprendizado de máquina para adaptabilidade.

  8. Incorporar estratégias de opções para cobrir riscos.

  9. Ajuste dos parâmetros com base nas recentes condições de mercado para manter a eficácia.

  10. Construção de plataformas de otimização visual para testes rápidos.

Com otimização automatizada, combinações de estratégias, mais informações de mercado, etc., pode alcançar uma melhor estabilidade e retornos como uma verdadeira estratégia de negociação.

Resumo

Em resumo, a estratégia da grade de caixa do RSI usa o RSI para identificar a confirmação da reversão da tendência, define redes dinâmicas de faixa de preços, breakouts de negociações e flutua intradiário - formando uma tendência flexível seguindo a estratégia de negociação do algo.

A estratégia possui vantagens, incluindo RSI para contexto de tendência, grades dinâmicas, negociação de ruptura e aplanamento total intradiário. Isso permite rastrear efetivamente as tendências com controles de risco.

Existem muitas oportunidades de aprimoramento, incorporando mais indicadores, otimização de ML, backtesting visual, etc., pode se tornar uma estratégia de negociação de algo de alto retorno mais robusta.


/*backtest
start: 2023-09-29 00:00:00
end: 2023-10-29 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © wbburgin

//@version=5
// strategy("RSI Box Strategy (pseudo-Grid Bot)", overlay=true, initial_capital = 10000, 
//  default_qty_type = strategy.percent_of_equity, default_qty_value = 1, pyramiding = 33, commission_value=0.10)

src = input.source(close,"Source")
rsiLength = input.int(14,"RSI Length")
oblvl = input.int(70,"Overbought Level")
oslvl = input.int(30,"Oversold Level")
useShorts = input.bool(false,"Use Shorts",inline="B")
showGrid = input.bool(false,"Show Grid",inline="B")

rsi = ta.rsi(src,rsiLength)

rsi_crossdn = ta.crossunder(rsi,oblvl)
rsi_crossup = ta.crossover(rsi,oslvl)

highest = ta.vwma(ta.highest(src,rsiLength),rsiLength)
lowest = ta.vwma(ta.lowest(src,rsiLength), rsiLength)

gridTop = ta.valuewhen(rsi_crossdn,highest,0)
gridBottom = ta.valuewhen(rsi_crossup,lowest,0)
gridMiddle = math.avg(gridTop,gridBottom)
gridMidTop = math.avg(gridMiddle,gridTop)
gridMidBottom = math.avg(gridMiddle,gridBottom)

diff1 = math.abs(src - gridTop)
diff2 = math.abs(src - gridBottom)
diff3 = math.abs(src - gridMiddle)
diff4 = math.abs(src - gridMidTop)
diff5 = math.abs(src - gridMidBottom)

minDiff = math.min(diff1, diff2, diff3, diff4, diff5)

// Determine which line is the closest
float closestLine = na
if minDiff == diff1
    closestLine := gridTop
else if minDiff == diff2
    closestLine := gridBottom
else if minDiff == diff3
    closestLine := gridMiddle
else if minDiff == diff4
    closestLine := gridMidTop
else if minDiff == diff5
    closestLine := gridMidBottom

buyCrosses = ta.crossover(src,gridTop) or ta.crossover(src,gridBottom) or ta.crossover(src,gridMiddle) or ta.crossover(src,gridMidTop) or ta.crossover(src,gridMidBottom)
sellCrosses= ta.crossunder(src,gridTop) or ta.crossunder(src,gridBottom) or ta.crossunder(src,gridMiddle) or ta.crossunder(src,gridMidTop) or ta.crossunder(src,gridMidBottom)

condition_bull = buyCrosses
condition_bear = sellCrosses

var float bull_status_line = na
var float bear_status_line = na
var float bull_buy_line = na
var float bear_sell_line = na

if condition_bull
    bull_status_line := closestLine
if condition_bear
    bear_status_line := closestLine

if bull_status_line == gridBottom
    bull_buy_line := gridMidBottom
if bull_status_line == gridMidBottom
    bull_buy_line := gridMiddle
if bull_status_line == gridMiddle
    bull_buy_line := gridMidTop
if bull_status_line == gridMidTop
    bull_buy_line := gridTop

if bear_status_line == gridTop
    bear_sell_line := gridMidTop
if bear_status_line == gridMidTop
    bear_sell_line := gridMiddle
if bear_status_line == gridMiddle
    bear_sell_line := gridMidBottom
if bear_status_line == gridMidBottom
    bear_sell_line := gridBottom

l = ta.crossover(src,bull_buy_line)
s = ta.crossunder(src,bear_sell_line)

if l
    strategy.entry("Long",strategy.long)
if s
    strategy.close("Long")
    if useShorts
        strategy.entry("Short",strategy.short)

// Plotting
in_buy = ta.barssince(l) < ta.barssince(s)
u=plot(bull_buy_line,color=na,title="Buy Plot")
d=plot(bear_sell_line,color=na,title="Sell Plot")

plot(not showGrid?na:gridBottom,color=color.new(color.white,75),title="Grid Line -2")
plot(not showGrid?na:gridMidBottom,color=color.new(color.white,75),title="Grid Line -1")
plot(not showGrid?na:gridMiddle,color=color.new(color.white,75),title="Grid Line 0")
plot(not showGrid?na:gridMidTop,color=color.new(color.white,75),title="Grid Line 1")
plot(not showGrid?na:gridTop,color=color.new(color.white,75),title="Grid Line 2")


fill(u,d,color=in_buy ? color.new(color.lime,75) : color.new(color.red,75))

Mais.