Ir para o conteúdo

Como utilizar indicadores em cBots

Neste artigo e no vídeo correspondente, demonstraremos como pode referenciar e utilizar indicadores personalizados nos seus cBots. Para tal, desenvolveremos um algoritmo de negociação que utiliza o resultado de um indicador personalizado de exemplo para realizar operações de negociação.

Criar um novo cBot

Para ver todos os indicadores personalizados atualmente instalados na sua máquina, mude para a aplicação Algo e vá para o separador Indicadores.

Se vir um ou mais indicadores personalizados aqui, significa que pode utilizá-los livremente em qualquer um dos seus outros algos. Para este tutorial, utilizaremos o indicador Sample SMA e desenvolveremos um cBot que negocia com base na direção da média móvel simples.

Primeiro, iremos criar um novo cBot e renomeá-lo para algo informativo como "Robô SMA". O nosso cBot entrará numa negociação de compra quando a SMA se tornar bullish e entrará numa negociação de venda quando a SMA se tornar bearish. O nosso cBot não fará cobertura das suas posições, o que significa que as posições opostas serão fechadas a cada novo sinal.

Inicializar um indicador

Quando se trata de indicadores personalizados, o nosso primeiro passo é adicionar uma referência ao indicador personalizado. Para referenciar um indicador personalizado, precisamos de executar os seguintes passos:

  1. Clique no botão Gerir referências.
  2. Encontre o indicador que queremos referenciar na janela recém-aberta.
  3. Marque a caixa de seleção ao lado do indicador que queremos referenciar.
  4. Clique em Aplicar.

Depois de o indicador ter sido referenciado, podemos criar uma variável de instância do seu tipo.

1
SampleSMA _sma;

Nota

O tipo de indicador deve ser o mesmo que o nome da classe do indicador. Isto pode ser diferente do nome do ficheiro do indicador.

O próximo passo é inicializar o indicador no nosso método OnStart(). No entanto, antes de fazermos isso, adicionaremos um parâmetro ao cBot que nos permitirá configurar os períodos utilizados pelo indicador SMA personalizado.

1
2
[Parameter(DefaultValue = 14)]
public int Periods { get; set; }

Podemos utilizar o método Indicators.GetIndicator<>() para inicializar quaisquer indicadores personalizados que estejamos a referenciar. Precisamos de definir o tipo de indicador e passar os parâmetros do indicador separados por vírgulas.

Nota

Os parâmetros precisam de ser passados na ordem declarada na classe do indicador.

No nosso caso, o tipo é SampleSMA e passaremos os valores de origem deste indicador, que neste caso são os preços de fecho das barras e o parâmetro Period.

1
_sma = Indicators.GetIndicator<SampleSMA>(Bars.ClosePrices, Periods);

Implementar lógica de negociação

Com o nosso indicador inicializado, podemos implementar a nossa lógica de negociação. O nosso indicador SMA personalizado guarda os valores da média móvel na coleção Results. A coleção Results apresenta dois métodos úteis, IsRising() e IsFalling(). Estes métodos permitem-nos descobrir se os resultados do indicador estão a subir ou a descer.

Utilizaremos estes métodos para implementar as nossas condições de negociação.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
protected override void OnBarClosed()
{
    if(_sma.Result.IsRising())
    {        

    }
    else if(_sma.Result.IsFalling())
    {

    }
}

Agora preencheremos as nossas declarações if. Quando a média móvel estiver a subir, fecharemos todas as posições de venda e abriremos uma posição de compra. Por outro lado, quando a média móvel estiver a descer, fecharemos todas as posições de compra e abriremos uma posição de venda.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
protected override void OnBarClosed()
{
    if(_sma.Result.IsRising())
    {
        Close(TradeType.Sell);
        Open(TradeType.Buy);
    }
    else if(_sma.Result.IsFalling())
    {
        Close(TradeType.Buy);
        Open(TradeType.Sell);            
    }
}

No nosso código, utilizámos dois novos métodos que a API não fornece por padrão. O método Open() abre novas posições com base na direção e quantidade definidas. O método Close() fecha todas as posições da direção definida.

Aqui está como o método Open() é definido.

1
2
3
4
5
private void Open(TradeType tradeType)
{
    if(Positions.Count == 0)
        ExecuteMarketOrder(tradeType, SymbolName, Volume, InstanceId);
}

Para executar uma ordem dentro do método Open(), também precisamos de adicionar o parâmetro Volume.

1
2
[Parameter(DefaultValue = 10000)]
public int Volume { get; set; }

Tudo o que resta é definir o método Close().

1
2
3
4
5
private void Close(TradeType tradeType)
{
    foreach (var position in Positions.Where(p => p.TradeType == tradeType))
        position.Close();
}

Realizar testes de verificação

Como sempre, antes de deixarmos o cBot negociar em nosso nome, iremos testá-lo minuciosamente. Para fazer o mesmo, adicione uma instância e depois mude para o separador Testes de verificação.

Para testar ainda mais o nosso cBot, adicionamos o indicador personalizado que referenciámos ao gráfico onde uma instância está anexada e verificamos se os pontos de entrada da posição correspondem aos resultados do indicador.

Para saber mais sobre como usar e desenvolver cBots, sinta-se à vontade para navegar por outras secções da documentação e subscrever o nosso canal do YouTube para ser notificado quando publicarmos um novo vídeo.

Neste artigo e no vídeo que o acompanha, mostraremos como pode referenciar e usar indicadores personalizados nos seus cBots. Para tal, iremos desenvolver um algoritmo de negociação que usa o resultado de um indicador personalizado pré-feito para realizar operações de negociação.

Criar um novo cBot

Para ver todos os indicadores personalizados atualmente instalados na sua máquina, mude para a aplicação Algo e prossiga para os 'Indicadores'