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.

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.

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 | |
À 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 | |
No método Initialize(), há uma linha de código para imprimir esta mensagem no registo.
1 | |
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.

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.

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.

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 | |
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 | |
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.

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 | |
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.
