Ir para o conteúdo

RSI cBot

Visão geral da estratégia

O RSI cBot implementa uma estratégia simples de reversão baseada em momentum que depende do Relative Strength Index (RSI) como seu indicador principal.

O RSI cBot compra e vende automaticamente com base nos valores do RSI que refletem o momentum do mercado e determinam condições de sobrecompra ou sobrevenda. O cBot está programado para fechar as posições existentes antes de abrir novas, garantindo que apenas uma posição relevante esteja aberta em qualquer momento.

Quando o RSI cai abaixo de 30, o mercado é visto como sobrevendido e o cBot abre posições de compra. O sinal de compra baseia-se na expectativa de que o preço irá aumentar depois de o mercado atingir uma condição de sobrevenda.

Quando o RSI sobe acima de 70, o mercado é visto como sobrecomprado e o cBot abre posições de venda. O sinal de venda baseia-se na expectativa de que o preço irá cair depois de o mercado ficar sobrecomprado.

A estratégia baseada no indicador RSI é mais adequada para mercados onde o cBot pode negociar reversões com base em sinais do RSI.

Criação de cBot

Saiba como criar cBots, usando C# ou Python, nos nossos guias passo a passo.

O código do RSI cBot está disponível nos nossos repositórios públicos C# e Python. O mesmo código é fornecido como um modelo no assistente de criação de algoritmos no cTrader Windows ou Mac, ou pode simplesmente copiar e usar o snippet abaixo:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
using cAlgo.API;
using cAlgo.API.Indicators;

namespace cAlgo
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None, AddIndicators = true)]
    public class SampleRSIcBot : Robot
    {
        [Parameter("Quantity (Lots)", Group = "Volume", DefaultValue = 1, MinValue = 0.01, Step = 0.01)]
        public double Quantity { get; set; }

        [Parameter("Source", Group = "RSI")]
        public DataSeries Source { get; set; }

        [Parameter("Periods", Group = "RSI", DefaultValue = 14)]
        public int Periods { get; set; }

        private RelativeStrengthIndex rsi;

        protected override void OnStart()
        {
            rsi = Indicators.RelativeStrengthIndex(Source, Periods);
        }

        protected override void OnTick()
        {
            if (rsi.Result.LastValue < 30)
            {
                Close(TradeType.Sell);
                Open(TradeType.Buy);
            }
            else if (rsi.Result.LastValue > 70)
            {
                Close(TradeType.Buy);
                Open(TradeType.Sell);
            }
        }

        private void Close(TradeType tradeType)
        {
            foreach (var position in Positions.FindAll("SampleRSI", SymbolName, tradeType))
                ClosePosition(position);
        }

        private void Open(TradeType tradeType)
        {
            var position = Positions.Find("SampleRSI", SymbolName, tradeType);
            var volumeInUnits = Symbol.QuantityToVolumeInUnits(Quantity);

            if (position == null)
                ExecuteMarketOrder(tradeType, SymbolName, volumeInUnits, "SampleRSI");
        }
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import clr

clr.AddReference("cAlgo.API")

# Import cAlgo API types
from cAlgo.API import *

# Import trading wrapper functions
from robot_wrapper import *

class SampleRSIcBot():
    def on_start(self):
        self.rsi = api.Indicators.RelativeStrengthIndex(api.Source, api.Periods)

    def on_tick(self):
        if self.rsi.Result.LastValue < 30:
            self.close_position(TradeType.Sell)
            self.open_position(TradeType.Buy)
        elif self.rsi.Result.LastValue > 70:
            self.close_position(TradeType.Buy)
            self.open_position(TradeType.Sell)

    def close_position(self, tradeType):
        for position in api.Positions.FindAll("SampleRSI", api.SymbolName, tradeType):
            api.ClosePosition(position)

    def open_position(self, tradeType):
        position = api.Positions.Find("SampleRSI", api.SymbolName, tradeType)
        volumeInUnits = api.Symbol.QuantityToVolumeInUnits(api.Quantity)
        if position is None:
            api.ExecuteMarketOrder(tradeType, api.SymbolName, volumeInUnits, "SampleRSI")

Integração de indicadores

O Relative Strength Index (RSI) é o principal indicador utilizado no RSI cBot. O RSI é um oscilador de momentum que mede a velocidade e a mudança dos movimentos de preço. Varia entre 0 e 100 e é utilizado para identificar condições de sobrecompra ou sobrevenda no mercado.

Com base na sua avaliação das condições de sobrecompra ou sobrevenda, o RSI determina se o cBot compra ou vende. O RSI cBot não depende de nenhum outro indicador ou fator, como médias móveis ou volume; utiliza apenas os níveis do RSI para sinais de negociação.

O cBot concentra-se em dois limites principais:

  • RSI < 30 sinaliza que o mercado está sobrevendido e aciona ordens de compra.
  • RSI > 70 sinaliza que o mercado está sobrecomprado e aciona ordens de venda.

O cBot monitoriza continuamente o valor do RSI, verificando-o a cada novo tick. Isto garante que o algoritmo está sempre pronto para agir assim que o RSI se move para território de sobrevenda ou sobrecompra.

Lógica

Configuração inicial

O indicador RSI é inicializado usando os parâmetros Source e Periods especificados no método OnStart(), que é chamado quando o cBot é iniciado. Os cálculos são feitos usando fórmulas incorporadas do cTrader para o indicador.

Monitorização de condições

A lógica condicional para negociações é executada no método OnTick(), que é chamado sempre que um novo tick (atualização de preço) é recebido. Se RSI < 30, é gerado um sinal de compra. Se RSI > 70, é gerado um sinal de venda.

Gestão de posições

Antes do cBot abrir uma nova posição com base no sinal gerado, o método Close() verifica e fecha todas as posições opostas abertas com a etiqueta "SampleRSI". Esta configuração garante que apenas uma negociação está ativa em qualquer momento para um determinado símbolo.

Execução de negociação

O método Open() verifica se já existe uma posição do mesmo tipo com base no sinal gerado (compra ou venda). Se não for encontrada uma posição, o cBot abre uma nova posição com a quantidade especificada e outros parâmetros que são passados dentro do método.

Parâmetro Unidade Definição Dicas
Quantidade Lote Volume de cada negociação. Traders conservadores podem optar por tamanhos de lote pequenos para minimizar o risco.

Traders agressivos podem optar por tamanhos de lote maiores para maximizar os ganhos potenciais, embora com maior risco.
Fonte Fonte de dados para o indicador RSI. As opções disponíveis incluem o preço de fecho, preço de abertura, preço máximo e preço mínimo. O preço de fecho é frequentemente usado para cálculos do RSI porque reflete o ponto de preço mais importante numa vela. No entanto, os traders podem experimentar diferentes séries de dados e selecionar aquela que melhor se adequa às condições do mercado.

O preço máximo ou mínimo pode ajudar a identificar movimentos extremos de preço, enquanto os preços médios ou típicos oferecem uma perspetiva mais equilibrada ao longo de um período.
Períodos Número de períodos (velas) usados para calcular o RSI. O valor predefinido, 14, é o valor padrão ou configuração popular para este indicador. Scalpers ou traders que procuram lucrar com movimentos de preço de curto prazo (por exemplo, num gráfico de 5 minutos) podem optar por períodos baixos. Esta configuração torna o RSI mais responsivo, fazendo com que gere sinais de compra e venda com mais frequência.

Traders de swing ou de longo prazo (por exemplo, num gráfico de 1 hora) podem preferir períodos de RSI maiores. Esta configuração diminui a sensibilidade do RSI, tornando-o mais suave e mais resistente a flutuações rápidas de preço. Com o ruído filtrado, o RSI concentra-se nas principais tendências de mercado e gera menos sinais.

Aplicação

Mercados em intervalo (laterais)

Num mercado em intervalo, os preços oscilam entre um nível de resistência (limite superior) e um nível de suporte (limite inferior). Tais eventos são ideais para estratégias baseadas em RSI porque fornecem muitas instâncias de sobrecompra e sobrevenda. Como os preços frequentemente invertem a direção ao atingir níveis de suporte ou resistência em mercados em intervalo, o RSI tem maior probabilidade de fornecer sinais precisos.

Caso de uso

Considere um cenário onde o EURUSD se move repetidamente entre 1,1000 e 1,1200. O cBot pode demonstrar bom desempenho ao comprar perto do limite inferior para sobrevenda (RSI < 30) e vender perto do limite superior para sobrecompra (RSI > 70).

Melhores práticas

  • Concentre-se em negociar durante períodos de baixa volatilidade. O indicador RSI funciona melhor quando o mercado não está a fazer movimentos significativos de tendência.
  • Verifique os gráficos de preços para períodos em que o preço flutua dentro de um intervalo claro.
  • Monitorize as quebras. Se o preço se mover significativamente fora do intervalo, pare o cBot e reavalie as condições do mercado.

Mercados de baixa volatilidade

Os mercados de baixa volatilidade são caracterizados por pequenos movimentos de preços e ausência de tendências principais. O RSI é particularmente útil em tais ambientes porque pode identificar desequilíbrios de mercado de curto prazo sem ser influenciado por fortes tendências direcionais.

Em ambientes de baixa volatilidade, o preço tende a oscilar entre níveis de sobrecompra e sobrevenda, levando a frequentes oportunidades de negociação para o cBot.

Caso de uso

Um índice de ações como o S&P 500 pode apresentar períodos de baixa volatilidade, onde o seu preço se move entre bandas estreitas. Durante tais períodos, o cBot aproveita pequenas reversões. Entra em posições longas quando o RSI cai abaixo de 30 e posições de venda quando o RSI sobe acima de 70.

Melhores práticas

  • Use indicadores de volatilidade para determinar quando o mercado está a entrar numa fase de baixa volatilidade.
  • Ajuste o tamanho do lote e os períodos do RSI para permitir que o indicador identifique eficazmente pequenas alterações de preço.
  • Use estratégias adicionais de gestão de risco como um stop loss para se proteger contra movimentos inesperados do mercado.

Mercados em consolidação após tendências fortes

Após uma forte tendência ascendente ou descendente, os mercados frequentemente entram numa fase de consolidação onde o preço estabiliza. Os traders fazem então take profit ou aguardam uma nova direção do mercado, e o período de consolidação torna-se ideal para estratégias de negociação baseadas no RSI.

No período de consolidação após uma forte tendência, o indicador RSI pode identificar quando o mercado entrou em território de sobrecompra ou sobrevenda. O RSI cBot pode então captar pontos de reversão dentro da consolidação.

Caso de uso

Considere um cenário em que uma ação blue-chip entra em consolidação após uma subida ou queda significativa. O preço da ação começa a oscilar dentro de um intervalo estreito. O cBot deteta então condições de sobrecompra (RSI > 70) ou sobrevenda (RSI < 30) durante esta fase e negoceia em conformidade.

Melhores práticas

  • Após uma forte tendência, aguarde que o mercado comece a consolidar antes de executar o cBot.
  • Monitorize os níveis de suporte e resistência de longo prazo para garantir que o mercado entrou verdadeiramente em consolidação e não está a preparar-se para outra quebra.

Resumo

O indicador RSI é central para a estratégia do cBot e impulsiona todas as decisões de compra e venda. Embora o cBot seja eficaz a utilizar o indicador para capitalizar reversões em mercados sobrevendidos e sobrecomprados, a sua dependência de um único algoritmo acarreta o risco de sinais falsos e contexto de mercado limitado.

A capacidade de especificar valores para parâmetros-chave e selecionar uma fonte de dados permite aos utilizadores adaptar o RSI cBot aos seus estilos de negociação individuais, tolerância ao risco e condições de mercado. Quer seja um scalper, um trader de swing ou um investidor de longo prazo, ajustar os parâmetros do cBot pode levar a um melhor alinhamento com a sua estratégia e aumentar as hipóteses de sucesso.

Os traders podem fazer testes de verificação do cBot com diferentes valores, configurações e dados para encontrar uma combinação de parâmetros ideal ou rentável para o seu símbolo e período escolhidos. Adicionalmente, os utilizadores do cTrader podem modificar o código do cBot e implementar indicadores de volatilidade para se protegerem contra tendências fortes e filtrar sinais que não sejam de reversão.