Aller au contenu

Cycle de vie d'un indicateur personnalisé

Exemple de structure de code

Cet article vous guidera à travers la structure du code et expliquera la logique derrière les événements et le cycle de vie d'un indicateur cTrader. Pour accéder aux indicateurs personnalisés, ouvrez l'onglet Local dans l'application Algo.

Image title

À titre d'exemple, vous pouvez créer un nouvel indicateur nommé "LifeCycle Test" avec l'exemple de code suivant disponible dans la fenêtre de l'éditeur de code.

Image title

Pour réinitialiser à la version standard, copiez le code ci-dessous.

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

En un coup d'œil, la structure du code ne comprend que deux méthodes, la méthode Initialize() et la méthode Calculate(). Cliquez sur Générer pour procéder au test de cet indicateur. Nous ajouterons une méthode supplémentaire appelée OnDestroy() et expliquerons son objectif plus tard.

L'événement d'initialisation

Lorsqu'un indicateur cTrader est attaché pour la première fois à un graphique ou lorsque l'utilisateur modifie l'un des paramètres, une instance d'indicateur est recréée et la méthode Initialize() est appelée. Elle est utilisée pour initialiser toutes les variables que vous prévoyez d'utiliser dans votre indicateur. Vous pouvez également définir et référencer des indicateurs supplémentaires pour créer un seul indicateur à l'aide de formules provenant d'autres indicateurs.

Par défaut, le nouveau modèle de code comprend un paramètre appelé Message avec la valeur « Hello world! ».

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

Dans la méthode Initialize(), il y a une ligne de code pour imprimer ce message dans le journal.

1
Print(Message);

Pour démontrer la méthode Initialize(), ajoutez une instance d'indicateur en cliquant sur l'icône Plus à côté de l'icône Build et en sélectionnant un symbole. Si vous cliquez sur Plus dans la ligne de l'indicateur et choisissez Ajouter une instance, le symbole EURUSD avec la période h1 sera ajouté automatiquement.

Image title

Remarque

L'ajout d'une instance dans cTrader Algo est identique à l'attachement d'un indicateur à un graphique dans l'application Trade.

Maintenant, ouvrez l'onglet Journal dans le panneau Visualisation des trades sous le graphique. Comme vous pouvez le voir, le message « Hello world » a été imprimé.

Image title

Chaque fois que l'indicateur est ajouté pour la première fois à un graphique ou lorsqu'un paramètre est modifié, le graphique est actualisé et la méthode Initialize() est à nouveau appelée. Saisissez un message différent dans la section Paramètres pour voir l'entrée du journal se mettre à jour en conséquence.

Image title

Calculer la sortie de l'indicateur

La méthode Calculate() est appelée pour chaque indice de données historiques et à chaque tick entrant. Par exemple, si le graphique actuel comporte 1000 barres, la méthode Calculate() sera appelée pour l'indice 0, 1, 2, et ainsi de suite, jusqu'à un maximum de 999.

1
public override void Calculate(int index)

La méthode Calculate() peut être appelée plusieurs fois par seconde pendant les périodes de forte volatilité ou moins souvent lorsque le marché est plat. Pour tester son fonctionnement, vous pouvez ajouter une ligne de code au corps de la méthode Calculate() pour imprimer la valeur d'indice qui est transmise à la méthode pour chaque nouveau tick de données. N'oubliez pas de cliquer sur Build à chaque fois après avoir ajouté des modifications dans la fenêtre de l'éditeur de code.

1
Print("Index: " + index);

Pour passer de la fenêtre de l'éditeur de code au graphique, cliquez sur l'instance d'indicateur ajoutée. Si vous ouvrez l'onglet Journal dans le panneau Visualisation des trades, vous verrez les valeurs imprimées pour chaque indice transmis à la méthode.

Image title

La méthode OnDestroy()

La méthode OnDestroy() est appelée lorsque l'indicateur est retiré d'un graphique et n'est plus nécessaire. Vous devrez implémenter cette méthode, car elle n'est pas ajoutée par défaut lorsque vous créez un nouvel indicateur.

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

Cette méthode est utile pour les programmeurs, car elle leur permet de libérer des ressources non gérées et d'effectuer des tâches de finalisation. Elle aide à prévenir les fuites de mémoire et garantit que l'indicateur ne conserve pas de ressources après son retrait. Les exemples incluent la fermeture de connexions à des flux de données externes, la libération d'objets de données volumineux et d'autres opérations qui libèrent de la mémoire.

Résumé

En résumé, les méthodes Initialize(), Calculate() et OnDestroy() illustrent différentes étapes du cycle de vie de l'indicateur personnalisé. En ajustant le code d'exemple dans l'application Algo, vous êtes libre de décider comment initialiser les variables de l'indicateur, calculer la sortie de l'indicateur et exécuter les tâches de finalisation.

Image title