Cycle de vie du cBot
Dans cet article et sa vidéo d'accompagnement, nous parcourons la structure du code et expliquons la logique derrière les événements et le cycle de vie d'un cBot cTrader.
Pour rappel, vous pouvez accéder à vos cBots dans l'application Algo de cTrader. Pour créer un nouveau cBot, cliquez simplement sur le bouton Nouveau cBot ou sélectionnez cette option dans le menu déroulant illustré ci-dessous.

Interpréter le modèle de base
Après avoir créé un nouveau cBot, vous devriez voir la structure de base suivante dans la fenêtre de l'éditeur de code.
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 27 28 29 30 31 32 33 34 35 36 | |
Notez qu'il n'y a que trois événements affichés dans le modèle de base ; ces événements sont gérés par les méthodes OnStart(), OnTick() et OnStop(). Nous ajouterons deux méthodes supplémentaires (OnBar() et OnException()) et expliquerons comment elles fonctionnent plus tard ; nous discuterons d'abord de la méthode OnStart().
Utiliser la méthode OnStart()
La méthode OnStart() est déclenchée lorsqu'un cBot démarre pour la première fois. Elle est utilisée pour initialiser toutes les variables que vous prévoyez d'utiliser dans votre cBot, y compris les indicateurs, les compteurs, les gestionnaires d'événements ou les minuteurs.
Remarque
Le modèle de code initial inclut déjà une instruction de code pour imprimer un message dans le journal lorsqu'un cBot démarre. Comme vous pouvez le voir, notre cBot a le paramètre Message, et la méthode OnStart() transmet la valeur de ce paramètre à la méthode Print().
Nous pouvons démontrer comment fonctionne la méthode OnStart() en démarrant simplement l'instance du cBot dans l'application Trade et en ouvrant l'onglet Journal pour voir le résultat.

Nous pouvons également arrêter le cBot à tout moment, modifier la valeur du paramètre Message dans l'onglet Paramètres, et redémarrer notre instance. Au démarrage, notre nouveau message sera toujours imprimé dans le journal.


Utiliser la méthode OnTick()
La méthode OnTick() est déclenchée chaque fois que le cours vendeur ou le cours acheteur du symbole change. À l'intérieur de cette méthode, vous pouvez généralement programmer les conditions d'entrée et de sortie de position ainsi que toutes les autres fonctions auxiliaires que vous devez exécuter lorsqu'un nouveau tick de données arrive.
Nous ajouterons le code suivant à la méthode OnTick() afin qu'elle imprime un message dans le journal.
1 | |
Comme vous pouvez le voir ci-dessous, notre cBot imprime maintenant les cours vendeur et acheteur dans le journal à chaque changement de prix.

Utilisez la méthode OnBar()
La méthode OnBar() n'est pas incluse dans le modèle de code cBot par défaut, nous allons donc ajouter l'extrait de code suivant pour l'ajouter.
1 2 3 4 | |
La méthode OnBar() est déclenchée chaque fois qu'une nouvelle barre ou bougie est tracée sur le graphique auquel un cBot est attaché. De la même manière que la méthode OnTick(), vous pouvez utiliser la méthode OnBar() pour programmer les conditions d'entrée et de sortie de position ainsi que toute autre logique qui doit être exécutée lors de la formation de chaque nouvelle barre.
Comment la méthode OnBar() est déclenchée
Si vous avez un graphique H1, une nouvelle barre est formée toutes les heures, ce qui signifie que la méthode OnBar() sera appelée une fois par heure. Si vous avez un graphique m1, la même méthode sera appelée une fois par minute.
Notre méthode OnBar() imprimera "OnBar" sur chaque nouvelle barre/bougie. Pour démontrer comment cela fonctionne, nous allons attacher notre cBot à un graphique m1 et jeter un coup d'œil au journal.

Utilisez la méthode OnStop()
La méthode OnStop() est appelée lorsque le cBot s'arrête, soit par l'utilisateur, soit via le code. Lorsque cela se produit, tout code à l'intérieur de la méthode OnStop() est exécuté. Cela peut être utilisé pour effectuer des opérations finales, comme la fermeture de positions.
Nous allons ajouter le code suivant à notre méthode OnStop() - comme d'habitude, notre cBot imprimera la valeur du paramètre Message lorsqu'il sera arrêté.
1 | |
Dans la capture d'écran ci-dessous, nous lançons et arrêtons une instance de notre cBot pour démontrer comment tout cela fonctionne.

Utilisez la méthode OnException()
La méthode OnException() fournit une tolérance aux pannes en capturant les exceptions non gérées, vous permettant de décider comment les gérer. Elle n'est pas incluse dans le modèle de code par défaut, nous allons donc l'ajouter nous-mêmes en utilisant l'extrait suivant.
1 2 3 4 | |
Pour déclencher la méthode OnException(), nous allons écrire du code pour capturer une exception qui se produit lorsque nous essayons d'accéder à des informations sur un trade qui n'existe plus. Nous allons ajouter le code ci-dessous à notre méthode OnStart().
1 | |
Le code que nous avons écrit dans la méthode OnStart() exécutera un ordre de marché avec les paramètres configurables suivants.
- Le type de trade sera un ordre d'achat.
- Le trade sera exécuté pour le symbole actuel du graphique auquel le cBot est attaché.
- Le volume de l'ordre sera de 1 000 unités.
- L'étiquette unique attachée à l'ordre sera "my label".
Nous allons également ajouter le code suivant à la méthode OnTick().
1 2 3 | |
Le code que nous avons écrit dans la méthode OnTick() trouvera la position qui a été ouverte dans la méthode OnStart() en utilisant le nom d'étiquette "my label".
Si la position est trouvée avec la même étiquette, elle imprimera alors dans le journal l'ID de position du trade ouvert. Elle imprimera également un autre message appelé "Message below" lorsque la ligne de code suivante sera exécutée.
Lorsque notre cBot est lancé et que la méthode OnTick() est appelée et que l'ordre est trouvé, le cBot imprimera l'ID de l'ordre dans le journal et, après l'ID de l'ordre, il imprimera le message "Message below".

Comme vous pouvez le voir, aucune exception ne se produit et notre cBot fait son travail parfaitement.
Maintenant, cependant, nous allons fermer manuellement la position ouverte par le cBot et apporter de petites modifications au code afin qu'une exception soit garantie de se produire. Dans la méthode OnStart(), nous allons changer l'étiquette de l'ordre en "cTrader". Dans la méthode OnTick(), nous allons commenter la condition qui vérifie s'il existe une position avec l'étiquette "my label".
Voici le code final de notre cBot - notez que ce code déclenchera toujours une exception.
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 27 28 29 30 31 32 | |
Nous allons exécuter le cBot à nouveau et voir ce qui se passe.

Ce qui s'est passé, c'est qu'un nouvel ordre de marché a été créé au démarrage du cBot. L'étiquette attachée à cet ordre était "cTrader". Dans la méthode OnTick(), le code a tenté d'obtenir une position avec l'étiquette "my label" et comme nous avons commenté la ligne de code avec la condition. Il a ensuite tenté d'imprimer dans le journal l'ID de position.
Cela a provoqué une erreur d'exception qui aurait normalement arrêté le cBot dans les versions précédentes de cTrader, mais avec la nouvelle méthode OnException(), nous pouvons maintenant capturer cela et gérer l'erreur. Le cBot continuera à fonctionner et nous pouvons enregistrer l'erreur afin qu'elle puisse être corrigée.
Résumé
Le cycle de vie du cBot se compose de plusieurs événements clés que vous pouvez gérer via les méthodes OnStart(), OnTick(), OnStop(), OnBar() et OnException(). En personnalisant la façon dont votre cBot répond aux événements majeurs, vous pouvez vous assurer que vos algorithmes se comportent exactement comme prévu.