English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Türkçe
Manuale MQL5: Gestione di BookEvent

Manuale MQL5: Gestione di BookEvent

MetaTrader 5Esempi | 12 gennaio 2022, 11:39
278 0
Denis Kirichenko
Denis Kirichenko

Introduzione

Come è noto, il terminale di trading MetaTrader 5 è una piattaforma multi-mercato, che facilita il trading su Forex, mercati azionari, Futures e Contratti per Differenza. Secondo le statistiche della sezione Freelance, il numero di trader che fanno trading è in crescita e non solo sul mercato Forex.

In questo articolo vorrei introdurre i programmatori MQL5 alle prime armi alla gestione di BookEvent. Questo evento è collegato a Depth of Market, uno strumento per la negoziazione di asset azionari e dei loro derivati. I trader Forex, tuttavia, possono trovare utile anche la Depth of Market. Nei conti ECN, i fornitori di liquidità forniscono dati sugli ordini, anche se solo all'interno del loro modello aggregatore. Questi account stanno diventando più popolari.


1. BookEvent

Secondo la Documentazione, questo evento viene generato quando cambia lo stato di Depth of Market. Siamo d'accordo che BookEvent è un evento Depth of Market.

La Depth of Market è una serie di ordini, che differiscono per direzione (vendita e acquisto), prezzo e volume. I prezzi in Depth of Market sono vicini a quelli di mercato e quindi sono considerati i migliori.

Fig.1 Depth of Market in MetaTrader 5

Fig.1 Depth of Market in MetaTrader 5

In MetaTrader 5 un "order book" è denominato "Depth of Market" (Fig.1). Informazioni dettagliate sulla Depth of Market sono disponibili nella Guida per l'utente al terminale del cliente.

La struttura MqlBookInfo che fornisce informazioni sulla Depth of Market va menzionata separatamente.

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

Contiene tre campi. I dati sul tipo di ordine, prezzo e volume possono essere ottenuti elaborando la struttura dell'ordine.


2. Gestore eventi di BookEvent

La funzione di gestione degli eventi OnBookEvent() accetta una costante come parametro. È un riferimento a un parametro di stringa.

void OnBookEvent (const string& symbol)

Il parametro stringa contiene il nome del simbolo per il quale si è verificato un evento Depth of Market.

Il gestore eventi stesso richiede una preparazione preliminare. Affinché l'EA possa gestire un evento Depth of Market, questo evento deve essere sottoscritto utilizzando la funzione integrata MarketBookAdd(). Di solito si trova nel blocco di inizializzazione di EA. Se un evento Depth of Market non è stato sottoscritto, l'EA lo ignorerà.

Fornire la possibilità di annullare l'iscrizione alla ricezione di eventi è considerata una buona pratica di programmazione. Alla deinizializzazione, è necessario annullare l'iscrizione alla ricezione di tali dati chiamando la funzione MarketBookRelease().

Il meccanismo di sottoscrizione e cancellazione dalla ricezione dei dati è simile alla creazione e all'elaborazione di un timer, che deve essere attivato prima dell'elaborazione.


3. Modello di gestione degli eventi di libro

Creeremo un semplice modello di EA, che chiama la funzione OnBookEvent() e lo chiameremo BookEventProcessor1.mq5.

Il modello comprende un insieme minimo di gestori, che sono gestori di inizializzazione e deinizializzazione dell'EA, nonché gestori di eventi Depth of Market.

Lo stesso gestore di eventi di Depth of Market è molto semplice:

//+------------------------------------------------------------------+
//| 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);
           }
        }
     }
  }

Poiché questo evento di Depth of Market è trasmesso (dopo l'abbonamento apparirà per tutti i simboli), è necessario specificare uno strumento richiesto.

Va notato però che nelle ultime build sono state introdotte modifiche al lavoro di Depth of Market. Nella versione attuale (build 975) non ho trovato alcun segno di trasmissione. Il conduttore è stato chiamato solo per il simbolo assegnato. Per provare questo fatto, ho semplicemente organizzato l'inserimento delle informazioni nel "Registro degli esperti".

Per farlo, utilizzeremo la funzione integrata MarketBookGet(). Restituirà tutte le informazioni su Depth of Market, ovvero il MqlBookInfo, array di strutture, che contiene i record di Depth of Market per il simbolo specificato. Va notato che questo array varierà di dimensioni, a seconda di un broker.

Il template permette di visualizzare i valori delle strutture array nel Log.

L'EA è stato lanciato per i futures SBRF-12.14 in modalità debug. La sequenza dei record nel registro degli esperti sarà la seguente:

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

È come appariva la Depth of Market in un determinato momento. Il primo elemento dell'array di strutture è un ordine di vendita al prezzo più alto (7708 Rub). L'ultimo elemento dell'array è un ordine da acquistare al prezzo più basso (7652 Rub). Quindi, i dati sulla Depth of Market vengono letti nell'array dall'alto verso il basso.

Per comodità, ho raccolto i dati nella tabella 1.

Tabella 1. Depth of Market per SBRF-12.14

Tabella 1. Depth of Market per SBRF-12.14

Il blocco superiore evidenziato in rosso contiene ordini di vendita (limiti di vendita). Il blocco inferiore evidenziato in verde include ordini di acquisto (buy-limits).

È ovvio che tra tutti gli ordini di vendita, l'ordine n. 6 ha avuto il volume maggiore con il prezzo di 7700 Rub e un volume di 1011 lotti. L'ordine #39 ha avuto il volume più grande di tutti gli ordini di acquisto con il prezzo di 7653 Rub e un volume di 534 lotti.

I dati di origine in Depth of Market sono le informazioni che un trader analizza per elaborare una strategia di trading. L'idea di trading più semplice è che la raccolta e il raggruppamento di ordini con volumi significativi a livelli di prezzo contigui creano zone di supporto e resistenza. Nella sezione seguente, creeremo un indicatore che terrà traccia dei cambiamenti nella Depth of Market.


4. Depth of Market

Esistono molti indicatori diversi che funzionano con i dati sulla Depth of Market. Puoi trovarne alcuni interessanti nel Market di MetaTrader 5. Mi piace più di tutti Ishift. Yury Kulikov, lo sviluppatore, è riuscito a creare uno strumento compatto e informativo.

Tutti i programmi, che lavorano con i dati sulla Depth of Market, avranno una forma di Expert Advisor o di un indicatore, poiché solo questi programmi MQL5 dispongono del gestore di eventi BookEvent.

Creiamo un breve programma che mostrerà dati in tempo reale sulla Depth of Market. Per prima cosa dobbiamo specificare i dati da visualizzare. Sarà un pannello, con barre orizzontali che indicano il volume dell'ordine. La dimensione delle barre, tuttavia, sarà di natura relativa. Il volume massimo di tutti gli ordini correnti sarà considerato pari al 100%. La Fig. 2 mostra che l'ordine al prezzo di 7507 Rub ha il volume maggiore di 519 lotti.

Per una corretta inizializzazione del pannello è necessario specificare l'esatta Depth of Market o il numero di livelli (parametro "DOM depth"). Questo numero varia da broker a broker.

Fig.2 Pannello Depth of Market

Fig. 2 Pannello Depth of Market

Il codice del programma per il pannello è scritto con approccio di programmazione orientata agli oggetti. La classe responsabile dell'operazione del pannello è denominata 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[]);
  };

Questa classe contiene quattro membri di dati.

  • L'attributo m_obj_arr è un contenitore per i puntatori agli oggetti del tipo CObject. Viene utilizzato per memorizzare i dati sulla Depth of Market. Per quest'ultimo verrà creata una classe separata.
  • L'attributo m_arr_size è responsabile del numero di livelli di Depth of Market.
  • Gli attributi m_width e m_height memorizzano le dimensioni del pannello (larghezza e altezza in pixel).

Per quanto riguarda i metodi, il loro insieme oltre a costruttore e distruttore standard include:

  • metodo di inizializzazione
  • metodo di deinizializzazione
  • metodo di aggiornamento

Creeremo la classe CBookRecord separata per ogni riga del pannello (livello di Depth of Market) specificando il prezzo, la barra orizzontale e il volume.

Comprenderà tre puntatori. Uno di questi punterà all'oggetto del tipo CChartObjectRectLabel (etichetta rettangolare per lavorare con una barra orizzontale) e due puntatori del tipo CChartObjectLabel (etichette di testo per il prezzo e il 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);
  };

Tra i metodi ci sono:

  • metodo di creazione di un record;
  • metodo di impostazione dei dati;
  • modalità di ricezione dei dati;
  • metodo di formattazione di grandi numeri.

Quindi il gestore di BookEvent per EA e, in sostanza, l'indicatore, apparirà come segue:

//+------------------------------------------------------------------+
//| 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);
     }
  }

Quindi, ogni volta che viene generato BookEvent, il pannello aggiornerà i suoi dati. Chiameremo la versione aggiornata del programma come BookEventProcessor2.mq5.

Nel video qui sopra puoi vedere come funziona l'EA.


Conclusione

Questo articolo è dedicato a un altro evento del Terminal: l'evento Depth of Market. Questo evento è spesso al centro degli algoritmi di trading ad alta frequenza (HFT). Questo tipo di trading sta guadagnando popolarità tra i trader.

Spero che i trader che iniziano a programmare su MQL5 troveranno utili esempi inclusi di gestione dell'evento Depth of Market. I file sorgente allegati a questo articolo sono comodi da inserire nella cartella del progetto. Nel mio caso è \MQL5\Projects\BookEvent.

Tradotto dal russo da MetaQuotes Ltd.
Articolo originale: https://www.mql5.com/ru/articles/1179

File allegati |
BookEvent.zip (3.84 KB)
Tracciare linee di tendenza basate su frattali utilizzando MQL4 e MQL5 Tracciare linee di tendenza basate su frattali utilizzando MQL4 e MQL5
L'articolo descrive l'automazione del tracciamento delle linee di tendenza in base all'indicatore Fractals utilizzando MQL4 e MQL5. La struttura dell'articolo fornisce una vista comparativa della soluzione per due lingue. Le linee di tendenza vengono tracciate utilizzando gli ultimi due frattali conosciuti.
Perché l'hosting virtuale su MetaTrader 4 e MetaTrader 5 è migliore del solito VPS? Perché l'hosting virtuale su MetaTrader 4 e MetaTrader 5 è migliore del solito VPS?
La rete Virtual Hosting Cloud è stata sviluppata appositamente per MetaTrader 4 e MetaTrader 5 e presenta tutti i vantaggi di una soluzione nativa. Approfitta della nostra offerta gratuita 24 ore su 24: prova subito un server virtuale.
Grafico liquido Grafico liquido
Ti piacerebbe vedere un grafico orario con le barre che si aprono dal secondo e dal quinto minuto dell'ora? Che aspetto ha un grafico ridisegnato quando l'orario di apertura delle barre cambia ogni minuto? Quali vantaggi ha il trading su tali grafici? Troverai le risposte a queste domande in questo articolo.
Le foreste casuali prevedono le tendenze Le foreste casuali prevedono le tendenze
Questo articolo considera l'utilizzo del pacchetto Rattle per la ricerca automatica di modelli per prevedere le posizioni lunghe e corte di coppie di valute sul Forex. Questo articolo può essere utile sia per i trader principianti che per quelli esperti.