English Русский 中文 Español Deutsch 日本語 Português 한국어 Italiano Türkçe
Le MQL5 Cookbook : Manipulation BookEvent

Le MQL5 Cookbook : Manipulation BookEvent

MetaTrader 5Exemples | 13 janvier 2022, 15:53
285 0
Denis Kirichenko
Denis Kirichenko

Introduction

Comme on le sait, le terminal de trading MetaTrader 5 est une plate-forme multi-marchés, qui facilite le trading sur le Forex, les marchés boursiers, les contrats à terme et les contrats de différence. Selon les statistiques de la section Freelance, le nombre de traders qui négocient pas seulement sur le marché Forex augmente.

Dans cet article, je voudrais présenter aux programmeurs MQL5 novices la gestion de BookEvent. Cet événement est lié au Profondeur de marché, un instrument de négociation d'actifs boursiers et de leurs dérivés. Cependant, les traders Forex peuvent également trouver la profondeur du marché utile. Dans les comptes ECN, les fournisseurs de liquidités fournissent des données sur les ordres, mais uniquement dans le cadre de leur modèle d'agrégateur. Ces comptes sont de plus en plus populaires.


1. BookEvent

Selon la documentation, cet événement est généré lorsque le statut Profondeur de marché, change. Convenons que BookEvent est un événement Profondeur de marché,.

La Profondeur de marché, est un ensemble d'ordres, qui diffèrent par leur direction (vente et achat), leur prix et leur volume. Les prix en profondeur de marché sont proches de ceux du marché et sont donc considérés comme les meilleurs.

Fig.1 Profondeur du marché dans MetaTrader 5

Fig.1 Profondeur du marché dans MetaTrader 5

Dans MetaTrader 5, un «carnet d'ordres» est nommé «Profondeur de marché» (Fig.1). Des informations détaillées sur Profondeur de marché sont disponibles dans le Guide de l'utilisateur du terminal client.

La structure MqlBookInfo fournissant des informations sur le Profondeur de marché doit être mentionnée séparément.

struct MqlBookInfo
  {
   ENUM_BOOK_TYPE   type;       // order type from the ENUM_BOOK_TYPE enumeration
   double           price;      // price
   long             volume;     // volume
  };

Il contient trois champs. Les données sur le type de commande, le prix et le volume peuvent être obtenues en traitant la structure de la commande.


2. Gestionnaire d'événements de BookEvent

La fonction de gestion des événements OnBookEvent() prend une constante comme paramètre. C'est une référence à un paramètre de chaîne.

void OnBookEvent (const string& symbol)

Le paramètre de chaîne contient le nom du symbole pour lequel un événement Profondeur de marché a eu lieu.

Le gestionnaire d'événements lui-même nécessite une préparation préalable. Pour que l'EA puisse gérer un événement Profondeur de marché, cet événement doit être souscrit à l'aide de la fonction intégrée MarketBookAdd(). Habituellement, il est situé dans le bloc d'initialisation d'EA. Si un événement Profondeur de marché n'a pas été souscrit, l'EA l'ignorera.

Offrir la possibilité de se désinscrire de la réception d'événements est considéré comme une bonne pratique de programmation. Lors de la dés-initialisation, il est nécessaire de se désinscrire de la réception de ces données en appelant la fonction MarketBookRelease().

Les mécanismes d'abonnement et de désabonnement de la réception de données sont similaires à la création et au traitement d'un temporisateur, qui doit être activé avant le traitement.


3. Modèle de gestion de BookEvent

Nous allons créer un modèle simple d'EA, qui appelle la fonction OnBookEvent(), et le nommer BookEventProcessor1.mq5.

Le modèle comprend un ensemble minimum de gestionnaires, qui sont des gestionnaires d'initialisation et de dés-initialisation de l'EA, ainsi que le gestionnaire d'événements Profondeur de marché.

Le gestionnaire d'événements Profondeur de marché lui-même est très simple :

//+------------------------------------------------------------------+
//| BookEvent function                                               |
//+------------------------------------------------------------------+
void OnBookEvent(const string &symbol)
  {
   Print("Book event for: "+symbol);
//--- select the symbol
   if(symbol==_Symbol)
     {
      //--- array of the DOM structures
      MqlBookInfo last_bookArray[];

      //--- get the book
      if(MarketBookGet(_Symbol,last_bookArray))
        {
         //--- process book data
         for(int idx=0;idx<ArraySize(last_bookArray);idx++)
           {
            MqlBookInfo curr_info=last_bookArray[idx];
            //--- print
            PrintFormat("Type: %s",EnumToString(curr_info.type));
            PrintFormat("Price: %0."+IntegerToString(_Digits)+"f",curr_info.price);
            PrintFormat("Volume: %d",curr_info.volume);
           }
        }
     }
  }

Comme cet événement Profondeur de marché est un événement diffusé (après abonnement, il apparaîtra pour tous les symboles), un instrument requis doit être spécifié.

Il convient de noter cependant que dans les dernières versions, des changements ont été introduits dans le travail de Profondeur de marché. Dans la version actuelle (build 975), je n'ai trouvé aucun signe de diffusion. Le gestionnaire n'a été appelé que pour le symbole attribué. Pour prouver ce fait, j'ai simplement arrangé la saisie d'informations dans le «Journal des experts».

Pour ce faire, nous allons utiliser la fonction intégrée MarketBookGet(). Il renverra toutes les informations sur Depth of Market, à savoir le MqlBookInfo, tableau de structures, qui contient les enregistrements Depth of Market pour le symbole spécifié. Il convient de noter que cette matrice variera en taille, en fonction d'un broker.

Le modèle permet d'afficher les valeurs des structures de tableau dans le journal.

L'EA a été lancé pour les contrats à terme SBRF-12.14 en mode débogage. La séquence des enregistrements dans le journal des experts sera la suivante :

EL      0       11:24:32.250    BookEventProcessor1 (SBRF-12.14,M1)     Book event for: SBRF-12.14
MF      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_SELL
KP      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7708
LJ      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 6
MP      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_SELL
HF      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7705
LP      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 6
MJ      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_SELL
GL      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7704
ON      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 3
MD      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_SELL
FR      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7703
PD      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 2
MN      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_SELL
DH      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7701
QQ      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 10
GH      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_SELL
QM      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7700
OK      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 1011
ER      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_SELL
KS      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7698
EE      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 50
OM      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_SELL
KI      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7696
IO      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 21
QG      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_SELL
LO      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7695
MK      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 1
QQ      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_SELL
KE      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7694
QQ      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 5
QK      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_SELL
PK      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7691
LO      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 2
QE      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_SELL
HQ      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7688
OE      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 106
MO      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_SELL
RG      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7686
IP      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 18
GI      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_SELL
FL      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7684
QI      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 3
GS      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_SELL
IR      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7681
LG      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 4
GM      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_SELL
JH      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7680
RM      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 2
GG      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_SELL
DN      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7679
HH      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 19
IQ      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_SELL
ED      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7678
EQ      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 1
IK      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_SELL
OJ      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7676
DO      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 2
IE      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_SELL
RP      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7675
EE      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 1
QR      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_BUY
LF      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7671
LP      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 40
QD      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_BUY
KL      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7670
QJ      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 21
QN      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_BUY
CR      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7669
RD      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 20
QP      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_BUY
DH      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7668
NN      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 17
QJ      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_BUY
QN      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7667
RK      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 2
OL      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_BUY
DE      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7666
MQ      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 151
QF      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_BUY
OJ      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7665
RO      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 2
OH      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_BUY
FQ      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7664
EF      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 49
OR      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_BUY
GG      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7663
OS      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 3
ED      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_BUY
JM      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7662
PI      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 4
CN      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_BUY
ES      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7661
LD      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 13
CP      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_BUY
FI      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7660
LM      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 2
IJ      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_BUY
NO      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7659
II      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 12
IL      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_BUY
ME      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7658
IP      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 3
GF      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_BUY
NK      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7657
FM      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 15
GH      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_BUY
MQ      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7656
DD      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 6
MS      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_BUY
NG      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7655
KR      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 9
KE      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_BUY
OM      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7654
IK      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 14
KO      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_BUY
NS      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7653
DF      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 534
MQ      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Type: BOOK_TYPE_BUY
OI      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Price: 7652
IO      0       11:24:33.812    BookEventProcessor1 (SBRF-12.14,M1)     Volume: 25

C'est à quoi ressemblait Depth of the Market à un certain moment. Le premier élément de l'éventail des structures est un ordre de vente au prix le plus élevé (7708 roubles). Le dernier élément du tableau est un ordre d'achat au prix le plus bas (7652 Rub). Ainsi, les données de profondeur de marché sont lues dans le tableau de haut en bas.

Pour plus de commodité, j'ai rassemblé les données dans le tableau 1.

Tableau 1. Profondeur de marché pour SBRF-12.14

Table 1. Profondeur de marché pour SBRF-12.14

Le bloc supérieur surligné en rouge contient les ordres de vente (limites de vente). Le bloc inférieur surligné en vert comprend les ordres d'achat (limites d'achat).

Il est évident que parmi tous les ordres de vente, l'ordre n°6 avait le plus gros volume avec un prix de 7700 Rub et un volume de 1011 lots. L'ordre n°39 avait le volume le plus important de tous les ordres d'achat avec un prix de 7653 roubles et un volume de 534 lots.

Les données source dans Profondeur de marché sont les informations qu'un trader analyse pour élaborer une stratégie de trading. L'idée de trading la plus simple est que la collecte et le regroupement d'ordres avec des volumes importants à des niveaux de prix contigus créent des zones de support et de résistance. Dans la section suivante, nous allons créer un indicateur qui suivra les changements dans la profondeur du marché.


4. Profondeur de marché

Il existe de nombreux indicateurs différents fonctionnant avec les données de profondeur de marché. Vous pouvez en trouver quelques-uns intéressants sur le marché MetaTrader 5. J'aime par-dessus tout IShift. Yury Kulikov, le développeur, a réussi à créer un outil compact et informatif.

Tous les programmes, fonctionnant avec les données de Profondeur de marché, auront la forme d'un Expert Advisor ou d'un indicateur, car seuls ces programmes MQL5 disposent du gestionnaire d'événements BookEvent.

Créons un court programme qui montrera les données de profondeur de marché en direct. Dans un premier temps, nous devons spécifier les données à afficher. Ce sera un panneau, avec des barres horizontales indiquant le volume de la commande. La taille des barres, cependant, sera de nature relative. Le volume maximum de toutes les commandes en cours sera considéré comme 100%. La figure 2 montre que l’ordre au prix de 7507 Rub a le plus gros volume de 519 lots.

Pour une initialisation correcte du panneau, la profondeur exacte du marché ou le nombre de niveaux doit être spécifié (le paramètre « profondeur DOM »). Ce nombre diffère d'un broker à l'autre.

Fig.2 Panneau de la profondeur de marché

Fig. 2 Panneau de la profondeur de marché

Le code du programme pour le panneau est écrit avec une approche de programmation orientée objet. La classe responsable du fonctionnement du panneau est nommée CBookBarsPanel.

//+------------------------------------------------------------------+
//| Book bars class                                                  |
//+------------------------------------------------------------------+
class CBookBarsPanel
  {
private:
   //--- Data members
   CArrayObj         m_obj_arr;
   uint              m_arr_size;
   //---
   uint              m_width;
   uint              m_height;

   //--- Methods
public:
   void              CBookBarsPanel(const uint _arr_size);
   void             ~CBookBarsPanel(void){};
   //---
   bool              Init(const uint _width,const uint _height);
   void              Deinit(void){this.m_obj_arr.Clear();};
   void              Refresh(const MqlBookInfo &_bookArray[]);
  };

Cette classe contient quatre données membres.

  • L'attribut m_obj_arr est un conteneur pour les pointeurs vers les objets de type CObject. Il est utilisé pour stocker les données de profondeur de marché. Une classe distincte sera créée pour ce dernier.
  • L'attribut m_arr_size est responsable du nombre de niveaux de profondeur de marché.
  • Les attributs m_width et m_height stockent les dimensions du panneau (largeur et hauteur en pixels).

En ce qui concerne les méthodes, leur ensemble en plus du constructeur et du destructeur standard comprend :

  • méthode d'initialisation
  • méthode de dés-initialisation
  • méthode de mise à jour

Nous allons créer la classe CBookRecord distincte pour chaque ligne du panneau (niveau Profondeur de marché en spécifiant le prix, la barre horizontale et le volume.

Il comprendra trois pointeurs. L'un d'eux pointera vers l'objet de type CChartObjectRectLabel (étiquette rectangulaire pour travailler avec une barre horizontale) et deux pointeurs de type CChartObjectLabel (étiquettes de texte pour le prix et le volume).

//+------------------------------------------------------------------+
//| Book record class                                                |
//+------------------------------------------------------------------+
class CBookRecord : public CObject
  {
private:
   //--- Data members
   CChartObjectRectLabel *m_rect;
   CChartObjectLabel *m_price;
   CChartObjectLabel *m_vol;
   //---
   color             m_color;

   //--- Methods
public:
   void              CBookRecord(void);
   void             ~CBookRecord(void);
   bool              Create(const string _name,const color _color,const int _X,
                            const int _Y,const int _X_size,const int _Y_size);
   //--- data
   bool              DataSet(const long _vol,const double _pr,const uint _len);
   bool              DataGet(long &_vol,double &_pr) const;

private:
   string            StringVolumeFormat(const long _vol);
  };

Parmi les méthodes figurent :

  • méthode de création d'un enregistrement ;
  • méthode de paramétrage des données ;
  • méthode de réception des données;
  • méthode de formatage des grands nombres.

Ensuite, le gestionnaire de BookEvent pour l'EA et, essentiellement, l'indicateur, se présentera comme suit :

//+------------------------------------------------------------------+
//| BookEvent function                                               |
//+------------------------------------------------------------------+
void OnBookEvent(const string &symbol)
  {
//--- select the symbol
   if(symbol==_Symbol)
     {
      //--- array of the DOM structures
      MqlBookInfo last_bookArray[];

      //--- get the book
      if(MarketBookGet(_Symbol,last_bookArray))
         //--- refresh panel
         myPanel.Refresh(last_bookArray);
     }
  }

Ainsi, chaque fois que BookEvent est généré, le panneau mettra à jour ses données. Nous allons nommer la version mise à jour du programme BookEventProcessor2.mq5.

Dans la vidéo ci-dessus, vous pouvez voir comment fonctionne l'EA.


Conclusion

Cet article est dédié à un autre événement du Terminal - l'événement Profondeur de marché . Cet événement est souvent au cœur des algorithmes de trading haute fréquence (HFT). Ce type de trading gagne en popularité parmi les traders.

J'espère que les traders commençant à programmer sur MQL5 trouveront utiles les exemples inclus de gestion de l'événement Profondeur de marché. Les fichiers sources joints à cet article sont pratiques à mettre dans le dossier du projet. Dans mon cas, c'est \MQL5\Projects\BookEvent.

Traduit du russe par MetaQuotes Ltd.
Article original : https://www.mql5.com/ru/articles/1179

Fichiers joints |
BookEvent.zip (3.84 KB)
Tracer des lignes de tendance basées sur des fractales à l’aide de MQL4 et MQL5 Tracer des lignes de tendance basées sur des fractales à l’aide de MQL4 et MQL5
L’article décrit l’automatisation du traçage des lignes de tendance en fonction de l’indicateur Fractals à l’aide de MQL4 et MQL5. La structure de l’article fournit une vue comparative de la solution pour deux langues. Les courbes de tendance sont tracées à l’aide de deux dernières fractales connues.
Pourquoi l'hébergement virtuel sur MetaTrader 4 et MetaTrader 5 est meilleur que les VPS habituels Pourquoi l'hébergement virtuel sur MetaTrader 4 et MetaTrader 5 est meilleur que les VPS habituels
Le réseau Virtual Hosting Cloud a été développé spécialement pour MetaTrader 4 et MetaTrader 5 et présente tous les avantages d'une solution native. Bénéficiez de notre offre gratuite de 24 heures - testez un serveur virtuel dès maintenant.
Graphique Liquide Graphique Liquide
Souhaitez-vous voir un graphique horaire avec des barres s'ouvrant à partir de la deuxième et de la cinquième minute de l'heure ? À quoi ressemble un graphique redessiné lorsque l'heure d'ouverture des bars change toutes les minutes ? Quels sont les avantages du trading sur de tels graphiques ? Vous trouverez des réponses à ces questions dans cet article.
Les forêts aléatoires prédisent les tendances Les forêts aléatoires prédisent les tendances
Cet article envisage d'utiliser le package Rattle pour la recherche automatique de modèles afin de prédire les positions longues et courtes des paires de devises sur le Forex. Cet article peut être utile à la fois pour les traders débutants et expérimentés.