Aller au contenu

Événements de barre

Les développeurs d'algorithmes doivent souvent se référer aux événements de barre afin d'exécuter des stratégies de trading en temps opportun en réponse aux prix mis à jour. L'API offre les événements BarOpened et BarClosed pour que les créateurs d'algorithmes puissent affiner les cBots et saisir les opportunités à différents moments du cycle de barre.

Remarque

Les événements de barre ne peuvent être gérés que lors du codage de cBots. Les indicateurs, en revanche, ont la méthode Calculate() qui est appelée à chaque tick.

Dans ce guide, nous expliquons la différence entre les méthodes OnBar() et OnBarClosed() et fournissons plusieurs cas d'utilisation.

Événements de barre en une minute !

  • La méthode OnBar() est déclenchée chaque fois qu'une nouvelle barre est dessinée sur le graphique auquel une instance est ajoutée. Elle est appelée pour la barre nouvellement formée.
  • Le gestionnaire d'événements OnBarClosed() est également déclenché à chaque nouvelle barre. Cependant, il est appelé pour la dernière barre fermée (c'est-à-dire, précédente à la barre actuelle).
  • En vous référant au bon événement de barre, vous augmentez la précision de votre analyse technique et sélectionnez le moment approprié pour les actions de l'algorithme.
  • Les types de graphiques pris en charge pour BarOpened et BarClosed sont les barres temporelles, les chandeliers japonais, le tick, les graphiques Renko, des écarts et Heikin Ashi.

Utilisez la méthode OnBar()

L'occurrence de l'événement BarOpened dépend d'un calendrier de symbole et de la fréquence des prix entrants. Habituellement, les utilisateurs de la plateforme peuvent ajuster l'occurrence de BarClosed avec les paramètres de période du graphique.

Remarque

La méthode OnBar() peut être appelée aussi fréquemment que les paramètres de période du graphique le permettent. Une fois qu'une barre se ferme, OnBar() ne sera pas déclenchée jusqu'à l'arrivée du prochain tick, ce qui déclenche logiquement la formation d'une nouvelle barre.

La méthode OnBar() est invoquée simultanément avec chaque nouvelle barre dessinée sur le graphique auquel un algorithme est attaché. Par conséquent, le gestionnaire OnBar() est l'endroit idéal pour définir une logique de trading personnalisée que votre cBot doit répéter régulièrement.

Dans l'éditeur de code, vous pouvez spécifier le gestionnaire OnBar() comme suit :

override void OnBar()

Utilisez la méthode OnBarClosed()

L'API Algo permet également d'exécuter une logique pour la dernière barre fermée, ce qui, selon la stratégie que vous souhaitez mettre en œuvre, peut être une alternative plus pratique et plus précise à la gestion de l'événement BarOpened. À l'ouverture de la barre, la nouvelle barre apparaît comme une (bougie doji) et ne contient pas de données complètes pour l'analyse technique.

L'événement BarClosed est un alias de l'événement BarOpened, ce qui signifie qu'il ne se produit que si l'événement BarOpened se produit. Par exemple, l'événement BarClosed pour la dernière barre du vendredi se produira avec la première barre ouverte le lundi, à condition que le symbole ne soit pas négocié pendant le week-end.

Remarque

La méthode OnBarClosed() ne sera pas appelée tant qu'un tick n'arrivera pas pour former la nouvelle barre.

Le gestionnaire d'événements OnBarClosed() peut être déclaré comme suit :

override void OnBarClosed()

Dans le corps de la méthode OnBarClosed(), vous pouvez déterminer quelles actions connectées vos cBots effectueront lorsque l'événement BarClosed est déclenché (par exemple, exécuter un ordre, tracer un modèle, dessiner des visuels d'analyse technique, etc.).

Lorsqu'elle est accédée dans ce gestionnaire d'événements, la collection Bars ne contient pas la barre en direct actuelle, tandis que d'autres collections (telles que Positions, Symbols, etc.) contiennent des données réelles.

Les gestionnaires d'événements OnBar() et OnBarClosed() fonctionnent comme prévu dans le backtesting et l'optimisation. Les deux méthodes peuvent être utilisées sur différents types de graphiques, y compris les barres temporelles, les chandeliers japonais, le tick, les graphiques Renko, des écarts et Heikin Ashi.

Créer des exemples de cBots

L'exemple de cBot suivant place un ordre au marché lorsque chaque troisième barre sur le graphique EURCHF est ouverte.

 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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;

namespace cAlgo
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.FullAccess)]
    public class ThirdBarMarketOrderBot : Robot
    {
        private int barCount;

        protected override void OnStart()
        {
            barCount = 0;
        }

        protected override void OnBar()
        {
            barCount++;

            if (barCount % 3 == 0)
            {
                var symbol = Symbols.GetSymbol("EURCHF");
                ExecuteMarketOrder(TradeType.Buy, symbol, 100);
            }
        }
    }
}

Comme le cBot a été lancé sur un graphique m1, l'intervalle de temps approximatif entre les ordres au marché exécutés est de trois minutes.

Image title

Ci-dessous se trouve un exemple de cBot avec l'indicateur Directional Movement System (DMS) imbriqué, qui imprime (Uptrend!) si la valeur DI+ (ligne verte) dépasse la valeur DI- (ligne rouge).

Image title

Lorsque DI- est supérieur à DI+, (Downtrend!) est imprimé dans l'événement BarClosed.

Image title

 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
37
38
39
40
41
42
43
44
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;

namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None)]
    public class OnBarClosedTest : Robot
    {

        private DirectionalMovementSystem _dms;

        [Parameter("DMS Period", DefaultValue = 14)]
        public int Period { get; set; }

        protected override void OnStart()
        {
            _dms = Indicators.DirectionalMovementSystem(Period);
        }

        protected override void OnBarClosed() 
        {

            if (_dms.DIPlus.LastValue > _dms.DIMinus.LastValue) 
            {
                Print("Uptrend!");
            }
            else if (_dms.DIPlus.LastValue == _dms.DIMinus.LastValue) 
            {
                Print("Undecided!");
            }
            else 
            {
                Print("Downtrend!");
            }

        }
    }
}

Résumé

La variété d'événements de barre existant dans l'API Algo permet aux développeurs d'algorithmes de choisir un timing précis pour les méthodes appelées. La méthode OnBar() peut être invoquée avec une fréquence différente selon le calendrier du symbole et les paramètres de période du graphique, ce qui ajoute également à la fonctionnalité des cBots. La méthode OnBarClosed() est un alias pratique de OnBar() pour travailler avec les indicateurs.