Ir para o conteúdo

Ciclo de vida do indicador personalizado

Estrutura de código de exemplo

Este artigo irá guiá-lo através da estrutura do código e explicar a lógica por trás dos eventos e ciclo de vida de um indicador cTrader. Para aceder aos indicadores personalizados, abra o separador Local na aplicação Algo.

Image title

Como exemplo, pode criar um novo indicador chamado "LifeCycle Test" com o seguinte código de exemplo disponível na janela do editor de código.

Image title

Para repor a versão base, copie o código 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
{
    [Indicator(AccessRights = AccessRights.None)]
    public class LifeCycleTest : Indicator
    {
        [Parameter(DefaultValue = "Hello world!")]
        public string Message { get; set; }

        [Output("Main")]
        public IndicatorDataSeries Result { get; set; }

        protected override void Initialize()
        {
            // To learn more about cTrader Algo visit our Help Center:
            // https://help.ctrader.com/ctrader-algo/


            Print(Message);
        }

        public override void Calculate(int index)
        {
            // Calculate value at specified index
            // Result[index] = 
        }
    }
}

À primeira vista, a estrutura do código inclui apenas dois métodos, o método Initialize() e o método Calculate(). Clique em Build para prosseguir com o teste deste indicador. Vamos adicionar um método adicional chamado OnDestroy() e explicar o seu propósito mais tarde.

O evento de inicialização

Quando um indicador cTrader é anexado pela primeira vez a um gráfico ou quando o utilizador altera qualquer uma das definições de parâmetros, uma instância do indicador é recriada e o método Initialize() é chamado. É usado para inicializar quaisquer variáveis que planeia utilizar no seu indicador. Também pode definir e referenciar indicadores adicionais para criar um único indicador usando fórmulas de outros indicadores.

Por predefinição, o novo modelo de código inclui uma definição de parâmetro chamada Message com o valor de "Hello world!".

1
2
[Parameter(DefaultValue = "Hello world!")]
public string Message { get; set; }

No método Initialize(), há uma linha de código para imprimir esta mensagem no registo.

1
Print(Message);

Para demonstrar o método Initialize(), adicione uma instância do indicador clicando no ícone Plus ao lado do ícone Build e selecionando um símbolo. Se clicar em More na linha do indicador e escolher Add an instance, o símbolo EURUSD com o intervalo de tempo h1 será adicionado automaticamente.

Image title

Nota

Adicionar uma instância no cTrader Algo é o mesmo que anexar um indicador a um gráfico na aplicação Trade.

Agora, abra o separador Log no painel Trade Watch abaixo do gráfico. Como pode ver, a mensagem "Hello world" foi impressa.

Image title

Sempre que o indicador é adicionado pela primeira vez a um gráfico ou quando um parâmetro é alterado, o gráfico é atualizado e o método Initialize() é chamado novamente. Digite uma mensagem diferente na secção Parameters para ver a entrada de registo atualizar-se em conformidade.

Image title

Calcular a saída do indicador

O método Calculate() é chamado para cada índice de dados históricos e em cada tick recebido. Por exemplo, se o gráfico atual tiver 1000 barras, o método Calculate() será chamado para o índice 0, 1, 2 e assim por diante, até um máximo de 999.

1
public override void Calculate(int index)

O método Calculate() pode ser chamado várias vezes por segundo durante períodos de alta volatilidade ou menos vezes quando o mercado está estável. Para testar como funciona, pode adicionar uma linha de código ao corpo do método Calculate() para imprimir o valor do índice que está a ser passado para o método para cada novo tick de dados. Não se esqueça de clicar em Build cada vez que adicionar alterações na janela do editor de código.

1
Print("Index: " + index);

Para mudar da janela do editor de código para o gráfico, clique na instância do indicador adicionada. Se abrir o separador Log no painel Trade Watch, verá os valores impressos para cada índice passado para o método.

Image title

O método OnDestroy()

O método OnDestroy() é chamado quando o indicador é removido de um gráfico e já não é necessário. Terá de implementar este método, pois não é adicionado por predefinição quando cria um novo indicador.

1
2
3
4
protected override void OnDestroy()
        {
            base.OnDestroy();            
        }

Este método é útil para programadores, pois permite-lhes libertar recursos não geridos e realizar tarefas de finalização. Ajuda a prevenir fugas de memória e garante que o indicador não retém recursos após a remoção. Os exemplos incluem fechar ligações a feeds de dados externos, libertar grandes objetos de dados e outras operações que libertam memória.

Resumo

Em resumo, os métodos Initialize(), Calculate() e OnDestroy() ilustram diferentes fases do ciclo de vida do indicador personalizado. Ao ajustar o código de exemplo na aplicação Algo, é livre de decidir como inicializar variáveis do indicador, calcular a saída do indicador e executar tarefas de finalização.

Image title