Robô de negociação racional alimentado pela estratégia RSI

Autora:ChaoZhang, Data: 2024-02-19 14:43:34
Tags:

img

Resumo

Esta estratégia de negociação incorpora três indicadores técnicos robustos - Índice de Força Relativa (RSI), Bandas de Bollinger e níveis de Suporte / Resistência para permitir decisões de negociação automatizadas.

Estratégia lógica

A lógica central deste robô de negociação é baseada no RSI, Bandas de Bollinger e análise de Suporte/Resistência.

Em primeiro lugar, o RSI mede a força da tendência em curso. RSI acima de 70 implica um mercado sobrecomprado enquanto RSI abaixo de 30 sugere um mercado sobrevendido.

Em segundo lugar, as bandas de Bollinger definem a faixa de volatilidade do mercado. As bandas superior e inferior abrangem a faixa de flutuação normal do mercado. Tocando a faixa superior sugere uma zona relativamente alta onde uma reversão para baixo é provável. Da mesma forma, tocando a faixa inferior indica uma zona relativamente baixa onde um salto para cima é esperado.

Por fim, os níveis de suporte e resistência podem ser derivados das bandas de Bollinger. O suporte reside em torno da faixa inferior, enquanto a resistência paira em torno da faixa superior. Isso implica que uma tendência de alta pode encontrar pressão de venda em torno da resistência, levando a um potencial declínio. Por outro lado, uma tendência de baixa pode atender à demanda de compra em torno do suporte, provocando um rebote técnico.

Ao consolidar estes indicadores, a lógica de entrada é definida como: ir longo quando o preço toca a faixa inferior (zona de sobrevenda) coincidindo com o Suporte; ir curto quando o preço ultrapassa a faixa superior (zona de sobrecompra) com o alto excedendo a Resistência.

Principais benefícios

  1. Confiabilidade robusta do sinal através da combinação de vários indicadores

  2. Execução totalmente automatizada sem interferência manual

  3. Alertas em tempo real para atualizações instantâneas em movimento

  4. Anotações de gráficos intuitivas para visualizar os níveis de negociação

  5. Parâmetros personalizáveis para otimização entre instrumentos e prazos

Controle de riscos

  1. A volatilidade excepcional pode acarretar uma perda de paragem, e níveis razoáveis de perda de paragem podem ajudar a limitar a perda máxima.

  2. O ajuste de parâmetros subóptimo pode levar a excesso de negociação ou má qualidade do sinal.

  3. A falha do sistema pode causar interrupção do sinal ou atrasos na execução.

Oportunidades de melhoria

  1. Incorporar uma lógica de stop loss para restringir ainda mais o risco de queda.

  2. Introduzir regras de dimensionamento das posições de acordo com o património líquido da conta para uma gestão de risco mais inteligente.

  3. Aproveitar o aprendizado de máquina treinando o modelo em dados históricos para melhorar as capacidades preditivas.

  4. Realizar otimização paramétrica em vários produtos para descobrir os melhores conjuntos de parâmetros adaptados a cada produto.

Conclusão

A estratégia demonstra forte adaptabilidade e versatilidade. Ao monitorar múltiplos indicadores para avaliar as condições do mercado, ele pode identificar de forma confiável os níveis de reversão de tendência para execução automatizada. Melhorias contínuas no algoritmo elevarão o desempenho da estratégia para gerar consistentemente alfa. Uma excelente solução de negociação de algo adequada para negociação quantitativa.


/*backtest
start: 2024-01-19 00:00:00
end: 2024-02-06 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("RSI, Bollinger Bands, and Support/Resistance Trading Bot", overlay=true)

// Define RSI parameters
rsiLength = input(14, title="RSI Length")
rsiOverbought = input(70, title="Overbought Level")
rsiOversold = input(30, title="Oversold Level")

// Define Bollinger Bands parameters
bbLength = input(20, title="Bollinger Bands Length")
bbMultiplier = input(2, title="Bollinger Bands Multiplier")

// Calculate RSI
rsiValue = rsi(close, rsiLength)

// Calculate Bollinger Bands
basis = sma(close, bbLength)
upperBand = basis + bbMultiplier * stdev(close, bbLength)
lowerBand = basis - bbMultiplier * stdev(close, bbLength)

// Calculate Support and Resistance based on Bollinger Bands
support = basis - bbMultiplier * stdev(close, bbLength)
resistance = basis + bbMultiplier * stdev(close, bbLength)

// Strategy logic
rsiCondition = rsiValue > rsiOverbought or rsiValue < rsiOversold
touchingUpperBand = close >= upperBand
touchingLowerBand = close <= lowerBand

// Entry conditions
longCondition = touchingLowerBand and low <= support
shortCondition = touchingUpperBand and high >= resistance

// Exit conditions
longExitCondition = crossover(close, basis)
shortExitCondition = crossunder(close, basis)

// Automatic close if moving in opposite direction
if (strategy.position_size > 0 and shortCondition)
    strategy.close("Long")

if (strategy.position_size < 0 and longCondition)
    strategy.close("Short")

// Strategy orders
strategy.entry("Long", strategy.long, when=longCondition)
strategy.entry("Short", strategy.short, when=shortCondition)

// Plot entry and exit arrows
plotarrow(series=longCondition ? 1 : na, colorup=color.new(color.green, 0), offset=-1, minheight=5)
plotarrow(series=shortCondition ? 1 : na, colordown=color.new(color.red, 0), offset=-1, minheight=5)
plotarrow(series=longExitCondition ? -1 : na, colorup=color.new(color.red, 0), offset=-1, minheight=5)
plotarrow(series=shortExitCondition ? -1 : na, colordown=color.new(color.green, 0), offset=-1, minheight=5)

// Plot Bollinger Bands on chart
plot(upperBand, title="Upper Band", color=color.red)
plot(lowerBand, title="Lower Band", color=color.green)

// Highlight areas where price touches Bollinger Bands
bgcolor(touchingUpperBand ? color.new(color.red, 90) : na)
bgcolor(touchingLowerBand ? color.new(color.green, 90) : na)

// Plot Support and Resistance
plot(support, title="Support", color=color.blue)
plot(resistance, title="Resistance", color=color.purple)

// Plot RSI on chart
hline(rsiOverbought, "Overbought Level", color=color.red)
hline(rsiOversold, "Oversold Level", color=color.green)
plot(rsiValue, title="RSI", color=color.blue)


Mais.