Vai al contenuto

Ciclo di vita dell'indicatore personalizzato

Struttura del codice di esempio

Questo articolo ti guiderà attraverso la struttura del codice e spiegherà la logica dietro gli eventi e il ciclo di vita di un indicatore cTrader. Per accedere agli indicatori personalizzati, apri la scheda Locale nell'app Algo.

Image title

Come esempio, puoi creare un nuovo indicatore denominato "LifeCycle Test" con il seguente codice di esempio disponibile nella finestra dell'editor di codice.

Image title

Per ripristinare la versione standard, copia il codice qui sotto.

 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] = 
        }
    }
}

A prima vista, la struttura del codice include solo due metodi, il metodo Initialize() e il metodo Calculate(). Fai clic su Compila per procedere con il test di questo indicatore. Aggiungeremo un metodo aggiuntivo chiamato OnDestroy() e spiegheremo il suo scopo più avanti.

L'evento di inizializzazione

Quando un indicatore cTrader viene collegato per la prima volta a un grafico o quando l'utente modifica una qualsiasi delle impostazioni dei parametri, un'istanza dell'indicatore viene ricreata e viene chiamato il metodo Initialize(). Viene utilizzato per inizializzare tutte le variabili che intendi utilizzare nel tuo indicatore. Puoi anche definire e fare riferimento ad indicatori aggiuntivi per creare un singolo indicatore utilizzando formule di altri indicatori.

Per impostazione predefinita, il nuovo modello di codice include un'impostazione di parametro chiamata Message con il valore "Hello world!".

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

Nel metodo Initialize(), c'è una riga di codice per stampare questo messaggio nel log.

1
Print(Message);

Per dimostrare il metodo Initialize(), aggiungi un'istanza dell'indicatore facendo clic sull'icona Più accanto all'icona Compila e selezionando un simbolo. Se fai clic su Altro nella riga dell'indicatore e scegli Aggiungi un'istanza, il simbolo EURUSD con il periodo di tempo h1 verrà aggiunto automaticamente.

Image title

Nota

Aggiungere un'istanza in cTrader Algo equivale a collegare un indicatore a un grafico nell'applicazione Trade.

Ora, apri la scheda Log nel pannello Vista trading sotto il grafico. Come puoi vedere, il messaggio "Hello world" è stato stampato.

Image title

Ogni volta che l'indicatore viene aggiunto per la prima volta a un grafico o quando viene modificato un parametro, il grafico viene aggiornato e il metodo Initialize() viene chiamato nuovamente. Digita un messaggio diverso nella sezione Parametri per vedere la voce del registro aggiornarsi di conseguenza.

Image title

Calcolare l'output dell'indicatore

Il metodo Calculate() viene chiamato per ogni indice dei dati storici e a ogni tick in entrata. Ad esempio, se il grafico attuale ha 1000 barre, il metodo Calculate() verrà chiamato per l'indice 0, 1, 2 e così via, fino a un massimo di 999.

1
public override void Calculate(int index)

Il metodo Calculate() può essere chiamato più volte al secondo durante i periodi di elevata volatilità o meno volte quando il mercato è piatto. Per testare come funziona, puoi aggiungere una riga di codice al corpo del metodo Calculate() per stampare il valore dell'indice che viene passato al metodo per ogni nuovo tick di dati. Non dimenticare di fare clic su Build ogni volta dopo aver aggiunto modifiche nella finestra dell'editor di codice.

1
Print("Index: " + index);

Per passare dalla finestra dell'editor di codice al grafico, fai clic sull'istanza dell'indicatore aggiunto. Se apri la scheda Registro nel pannello Vista trading, vedrai i valori stampati per ogni indice passato al metodo.

Image title

Il metodo OnDestroy()

Il metodo OnDestroy() viene chiamato quando l'indicatore viene rimosso da un grafico e non è più necessario. Dovrai implementare questo metodo, poiché non viene aggiunto per impostazione predefinita quando crei un nuovo indicatore.

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

Questo metodo è utile per i programmatori, in quanto consente loro di rilasciare risorse non gestite ed eseguire attività di finalizzazione. Aiuta a prevenire perdite di memoria e garantisce che l'indicatore non mantenga risorse dopo la rimozione. Gli esempi includono la chiusura di connessioni a feed di dati esterni, il rilascio di oggetti di dati di grandi dimensioni e altre operazioni che liberano memoria.

In sintesi, i metodi Initialize(), Calculate() e OnDestroy() illustrano le diverse fasi del ciclo di vita dell'indicatore personalizzato. Modificando il codice di esempio nell'app Algo, sei libero di decidere come inizializzare le variabili dell'indicatore, calcolare l'output dell'indicatore ed eseguire attività di finalizzazione.

Image title