Ir para o conteúdo

Trend cBot

Visão geral da estratégia

O Trend cBot implementa uma estratégia onde duas Moving Averages (MAs) são utilizadas para detetar tendências e tomar decisões de negociação. O algoritmo calcula uma MA rápida e uma MA lenta, compara os seus valores ao longo do tempo e identifica pontos de cruzamento para gerar sinais de compra ou venda.

Como o Trend cBot depende de cruzamentos de MA para detetar mudanças de momentum, é mais eficaz em mercados com tendências claras e sustentadas. Por outras palavras, o algo funciona bem com símbolos que exibem movimentos direcionais fortes, seja ascendentes ou descendentes.

Criação de cBot

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

O código do Trend 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
55
56
57
58
59
60
61
62
63
64
65
66
using cAlgo.API;
using cAlgo.API.Indicators;

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

        [Parameter("MA Type", Group = "Moving Average")]
        public MovingAverageType MAType { get; set; }

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

        [Parameter("Slow Periods", Group = "Moving Average", DefaultValue = 10)]
        public int SlowPeriods { get; set; }

        [Parameter("Fast Periods", Group = "Moving Average", DefaultValue = 5)]
        public int FastPeriods { get; set; }


        private MovingAverage slowMa;
        private MovingAverage fastMa;
        private const string label = "Sample Trend cBot";

        protected override void OnStart()
        {
            fastMa = Indicators.MovingAverage(SourceSeries, FastPeriods, MAType);
            slowMa = Indicators.MovingAverage(SourceSeries, SlowPeriods, MAType);
        }

        protected override void OnTick()
        {
            var longPosition = Positions.Find(label, SymbolName, TradeType.Buy);
            var shortPosition = Positions.Find(label, SymbolName, TradeType.Sell);

            var currentSlowMa = slowMa.Result.Last(0);
            var currentFastMa = fastMa.Result.Last(0);
            var previousSlowMa = slowMa.Result.Last(1);
            var previousFastMa = fastMa.Result.Last(1);

            if (previousSlowMa > previousFastMa && currentSlowMa <= currentFastMa && longPosition == null)
            {
                if (shortPosition != null)
                    ClosePosition(shortPosition);

                ExecuteMarketOrder(TradeType.Buy, SymbolName, VolumeInUnits, label);
            }
            else if (previousSlowMa < previousFastMa && currentSlowMa >= currentFastMa && shortPosition == null)
            {
                if (longPosition != null)
                    ClosePosition(longPosition);

                ExecuteMarketOrder(TradeType.Sell, SymbolName, VolumeInUnits, label);
            }
        }

        private double VolumeInUnits
        {
            get { return Symbol.QuantityToVolumeInUnits(Quantity); }
        }
    }
}
 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
import clr

clr.AddReference("cAlgo.API")

# Import cAlgo API types
from cAlgo.API import *

# Import trading wrapper functions
from robot_wrapper import *

class SampleTrendcBot():
    Label = "Sample Trend cBot"

    def on_start(self):
        self.volume_in_units = api.Symbol.QuantityToVolumeInUnits(api.Quantity)
        self.fastMa = api.Indicators.MovingAverage(api.SourceSeries, api.FastPeriods, api.MAType)
        self.slowMa = api.Indicators.MovingAverage(api.SourceSeries, api.SlowPeriods, api.MAType)

    def on_tick(self):
        longPosition = api.Positions.Find(self.Label, api.SymbolName, TradeType.Buy)
        shortPosition = api.Positions.Find(self.Label, api.SymbolName, TradeType.Sell)

        currentSlowMa = self.slowMa.Result.Last(0)
        currentFastMa = self.fastMa.Result.Last(0)
        previousSlowMa = self.slowMa.Result.Last(1)
        previousFastMa = self.fastMa.Result.Last(1)

        if previousSlowMa > previousFastMa and currentSlowMa <= currentFastMa and longPosition is None:
            if shortPosition is not None:
                api.ClosePosition(shortPosition)
            api.ExecuteMarketOrder(TradeType.Buy, api.SymbolName, self.volume_in_units, self.Label)
        elif previousSlowMa < previousFastMa and currentSlowMa >= currentFastMa and shortPosition is None:
            if longPosition is not None:
                api.ClosePosition(longPosition)
            api.ExecuteMarketOrder(TradeType.Sell, api.SymbolName, self.volume_in_units, self.Label)

Integração de indicadores

Uma moving average é um indicador técnico popular que suaviza os dados de preço para identificar tendências durante um período específico. Os indicadores de média móvel incluem a Simple Moving Average (SMA), Exponential Moving Average (EMA), Time Series, Triangular, Weighted, Welles Wilder Smoothing, Hull, etc.

O Trend cBot utiliza duas MAs para monitorizar tendências no mercado:

  • MA Rápida – reage mais rapidamente às mudanças de preço e normalmente representa tendências de curto prazo.
  • MA Lenta – reage mais lentamente às mudanças de preço e representa tendências de longo prazo.

O cBot observa eventos de cruzamento entre a MA rápida e a MA lenta e utiliza-os para gerar sinais:

  • Sinal de compra – quando a MA lenta cruza abaixo da MA rápida, é interpretado como um momentum ascendente e é gerado um sinal de compra.
  • Sinal de venda – quando a MA rápida cruza abaixo da MA lenta, é interpretado como um momentum descendente e é gerado um sinal de venda.

Se for gerado um novo sinal enquanto a posição de negociação oposta estiver aberta, como um sinal de compra quando uma posição de venda está aberta, o cBot fecha a posição existente e abre uma nova. Esta configuração garante que apenas uma posição está aberta de cada vez.

Cálculo e lógica

Configuração inicial

O cBot inicializa as duas MAs no método OnStart(), que é chamado quando o cBot inicia.

As MAs são calculadas usando diferentes períodos numa série de dados. fastMA é calculada com FastPeriods, enquanto slowMA é calculada com SlowPeriods.

Cálculos MA em tempo real

A lógica principal para decisões de negociação é executada no método OnTick(), que é chamado sempre que um novo tick (dados de preço) é recebido. As duas MAs são continuamente calculadas usando fórmulas integradas do cTrader para o MAType selecionado e atualizadas a cada tick.

O cBot obtém os valores atuais e anteriores das MAs e depois procede à condição de cruzamento. O cBot compara os valores atuais e anteriores das MAs para determinar se houve um cruzamento:

  • Deteção de tendência ascendente – se a slowMA cruzar abaixo da fastMA, é interpretado como um momentum ascendente e resulta num sinal de compra.
  • Deteção de tendência descendente – se a fastMA cruzar abaixo da slowMA, é interpretado como um momentum descendente e resulta num sinal de venda.

Execução de negociação

Após detetar um cruzamento, o cBot executa uma negociação com base no sinal gerado:

  • Execução de negociação para um sinal de compra – o cBot verifica e fecha qualquer posição curta (venda) aberta. Em seguida, abre uma nova posição de compra.
  • Execução de negociação para um sinal de venda – o cBot verifica e fecha qualquer posição longa (compra) aberta. Em seguida, abre uma nova posição de venda.

Parâmetros

Parâmetro Unidade Definição Dicas
Quantidade Lote Volume de cada negociação. Os traders de scalping que se concentram em pequenos movimentos de preço podem optar por tamanhos de lote pequenos para minimizar o risco enquanto fazem muitas negociações num curto período.

Os traders de swing que mantêm posições por mais tempo podem usar tamanhos de lote grandes, já que antecipam grandes movimentos no mercado e querem maximizar os seus ganhos potenciais.
Tipo de MA Tipo de moving average. Em mercados menos voláteis, os traders podem preferir o SMA porque suaviza os dados de preço de forma mais eficaz e reduz as hipóteses de o cBot ser induzido em erro por flutuações de curto prazo.

Em mercados voláteis, os utilizadores podem preferir o EMA pela sua capacidade de reagir rapidamente às alterações de preço e detetar reversões de tendência precoces.
Fonte Dados de preço utilizados para calcular a moving average. As opções disponíveis incluem o preço de fecho, preço de abertura, preço máximo e preço mínimo. Os traders conservadores podem usar o preço de fecho como fonte, uma vez que representa o preço final de uma vela e tende a ser mais fiável.

Os traders mais agressivos podem preferir o preço mais alto ou mais baixo se quiserem detetar reversões de tendência ou oportunidades de breakout em pontos extremos do intervalo de preços.
Períodos Lentos Número de períodos utilizados para calcular a moving average lenta. Os day traders podem definir valores baixos para se concentrarem em tendências de curto prazo e capturar oportunidades frequentes durante o dia.

Os traders que visam tendências de longo prazo podem definir valores altos para garantir que o cBot entra em negociações apenas quando existe uma tendência forte e confirmada.
Períodos Rápidos Número de períodos utilizados para calcular a moving average rápida. Os traders que procuram entradas e saídas rápidas podem definir valores baixos para garantir que o cBot reage rapidamente aos movimentos de preço de curto prazo.

Os traders que seguem tendências mais amplas do mercado podem definir valores altos para reduzir o número de falsos sinais e concentrar-se em movimentos substanciais de preço.

Aplicação

Mercados com tendência

O Trend cBot tem um bom desempenho em mercados com tendência, onde os movimentos de preços são consistentes e sustentados. Nesses mercados, as Moving Averages frequentemente capturam a tendência, tornando os cruzamentos indicadores eficazes para sinais de compra e venda.

Caso de uso

Considere um cenário onde o EURUSD está numa forte tendência de alta, resultando em máximos diários e mínimos mais altos no seu gráfico. O cruzamento da média móvel deteta a tendência, e o cBot inicia sinais de compra em cada cruzamento ascendente da MA rápida sobre a MA lenta.

Melhores práticas

  • Use valores de período altos para as MAs ao negociar em períodos mais longos para evitar ruído e capturar tendências sustentadas.
  • Em mercados com tendência para commodities (por exemplo, ouro) com volatilidade relativamente baixa, use uma Simple Moving Average para garantir que pequenas flutuações de preço são filtradas.

Ativos de alta volatilidade

Os ativos que experimentam movimentos de preço acentuados e significativos tendem a beneficiar da capacidade do cBot de responder a tendências de movimento rápido quando uma média móvel adequada é selecionada.

Caso de uso

Considere um cenário onde o Bitcoin está no meio de uma corrida ou época de alta das criptomoedas. O BTC experimenta rápidas flutuações de preço, por vezes com tendência de alta de milhares de dólares em poucos dias. O cBot capitaliza a tendência de alta acentuada entrando em posições longas quando a MA rápida cruza acima da MA lenta.

Melhores práticas

  • Use uma Exponential Moving Average para que o cBot reaja mais rapidamente às mudanças recentes de preço.
  • Considere definir períodos rápidos e lentos curtos para capturar o momentum inicial.

Swing trading

Os swing traders que mantêm posições por vários dias ou semanas beneficiam da capacidade do cBot de detetar tendências de médio prazo quando são usadas configurações adequadas. O cruzamento de média móvel fornece pontos claros de entrada e saída para negociações em mercados que têm oscilações periódicas de preço.

Caso de uso

Considere um cenário onde um swing trader identifica tendências periódicas no GBPUSD e usa o cBot no gráfico de 4 horas para capturar tendências que duram vários dias. Quando a MA rápida cruza acima da MA lenta, o cBot entra numa posição de compra, mantendo-a até que a tendência se inverta.

Melhor prática

Use períodos de comprimento médio para as MAs rápida e lenta para garantir que o cBot ignora flutuações menores enquanto captura movimentos significativos do mercado.

Estratégias de rutura

O Trend cBot é útil em eventos de quebra onde os preços saem de um intervalo de consolidação e entram numa nova tendência. Os cruzamentos de Moving Averages podem sinalizar o início de um movimento forte quando ocorre uma quebra.

Caso de uso

Considere um cenário onde uma ação importante está a ser negociada num intervalo apertado durante vários dias ou semanas e é esperada uma quebra. O cBot pode ser implementado para captar a quebra. Quando o preço da ação quebra acima da resistência, a MA rápida cruza sobre a MA lenta, desencadeando um sinal de compra.

Melhor prática

Use valores baixos para o período da MA rápida para permitir que o cBot capte a tendência cedo, resultando em pontos de entrada favoráveis para as negociações.

Summary

O Trend cBot segue um processo matemático direto baseado em cruzamentos de Moving Averages para detetar mudanças de tendência e executar negociações. Ao comparar os valores atuais e anteriores das MAs rápida e lenta, o cBot determina se deve comprar ou vender, garantindo que as posições estão sempre alinhadas com a tendência detetada.

O cBot pode apresentar um melhor desempenho quando é combinado com outros indicadores. O Relative Strength Index (RSI) ou o Moving Average Convergence Divergence (MACD) podem filtrar sinais falsos e confirmar a força da tendência. Por exemplo, o RSI pode ser usado para verificar condições de sobrecompra ou sobrevenda antes de agir sobre os cruzamentos de MA.

Usando os parâmetros personalizáveis do cBot, pode ajustar o algoritmo para se adequar às suas necessidades de negociação e apetite pelo risco. Adicionalmente, pode fazer testes de verificação do cBot com diferentes valores, configurações e dados para encontrar uma combinação de parâmetros ideal ou lucrativa para um símbolo e período específicos.