English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Italiano
MQL5 Cookbook: BookEvent İşleme

MQL5 Cookbook: BookEvent İşleme

MetaTrader 5Örnekler | 14 Ocak 2022, 13:24
224 0
Denis Kirichenko
Denis Kirichenko

Giriş

İyi bildiğimiz gibi, MetaTrader 5 alım satım terminali; Forex, menkul kıymetler piyasası, Vadeli İşlemler ve Sözleşmeler üzerinde alım satım yapmayı kolaylaştıran çoklu piyasa platformudur. Freelance bölümü istatistiklerine göre, yalnızca Forex piyasasında işlem yapan yatırımcıların sayısı artmıyor.

Bu makalede, acemi MQL5 programcılarına BookEvent işlemesini tanıtmak istiyorum. Bu olay, hisse senedi varlıklarının ve türevlerinin alım satım işlemi için bir enstrüman olan Piyasa Derinliği ile bağlantılıdır. Bununla birlikte, Forex yatırımcıları Piyasa Derinliğini de faydalı bulabilirler. ECN hesaplarındaki likidite sağlayıcıları, yalnızca kendi kaynak modelleri içinde olsa da, talimatlarla ilgili verileri sağlar. Bu hesaplar giderek daha popüler hale gelmektedir.


1. BookEvent

Belgelere göre, bu olay Piyasa Derinliği statüsü değiştiğinde oluşturulur. BookEvent'in bir Piyasa Derinliği olayı olduğunu kabul edelim.

Piyasa Derinliği, yön (satma ve alma), fiyat ve hacim bakımından farklılık gösteren bir dizi talimattır. Piyasa Derinliğindeki fiyatlar piyasa fiyatlarına yakındır, bu nedenle en iyisi olarak kabul edilir.

Şek.1 MetaTrader 5'te Piyasa Derinliği

Şek.1 MetaTrader 5'te Piyasa Derinliği

MetaTrader 5'teki "talimat defteri", "Piyasa Derinliği" olarak adlandırılır (Şekil 1). Piyasa Derinliği hakkında ayrıntılı bilgi, İstemci Terminali Kullanıcı Kılavuzunda bulunabilir.

Pazar Derinliği hakkında bilgi veren MqlBookInfo yapısından ayrıca bahsedilmelidir.

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

Bu üç tane alan içermektedir. Talimat yapısı işlendiğinde, talimatın türü, fiyatı ve hacmi ile ilgili veriler elde edilebilir.


2. BookEvent Olay İşleyicisi

OnBookEvent() olay işleme işlevi, parametre olarak bir sabit alır. Bu dize parametresine bir referanstır.

void OnBookEvent (const string& symbol)

Dize parametresi, kendisi için Piyasa Derinliği olayını gerçekleştiren sembol adını içerir.

Olay işleyicinin kendisi ön hazırlık gerektirir. EA'nın Piyasa Derinliği olayını işlemesi için, yerleşik işlev MarketBookAdd() kullanılarak bu olaya abone olunmalıdır. Genellikle EA başlatma bloğunda bulunur. Piyasa Derinliği olayına abone olunmamışsa, EA bunu yoksayacaktır.

Olayları alma aboneliğini iptal etmek için mümkünlük sağlama, iyi bir programlama pratiği olarak kabul edilir. Başlatmayı geri alma sırasında, MarketBookRelease() işlevini çağırarak bu verileri alma aboneliğinden çıkmak gerekir.

Veri alma aboneliği ve aboneliği iptal etme mekanizmaları, işlemeden önce etkinleştirilmesi gereken bir zamanlayıcı oluşturmaya ve işlemeye benzer.


3. BookEvent İşleme Şablonu

OnBookEvent() işlevini çağıran ve onu BookEventProcessor1.mq5 olarak adlandıran basit bir EA şablonu oluşturacağız.

Şablon, EA'nın başlatma ve başlatmayı geri alma işleyicileri olan minimum işleyici kümesinin yanı sıra Piyasa Derinliği olay işleyicisini de içerir.

Piyasa Derinliği olay işleyicisinin kendisi zaten çok basittir:

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

Bu Piyasa Derinliği olayı bir yayın olayı olduğu için (tüm semboller için abonelikten sonra görünecektir), gerekli bir enstrüman belirtilmelidir.

Son birkaç derlemede, Piyasa Derinliği çalışmasında değişiklikler yapıldığına dikkat edilmelidir. Mevcut sürümde (build 975) herhangi bir yayınlma belirtisi bulamadım. İşleyici yalnızca atanan sembol için çağrılmıştır. Bu gerçeği kanıtlamak için "Experts Log"a basit bir şekilde bilgi girişi düzenledim.

Bunu yapmak için, yerleşik MarketBookGet() işlevini kullanacağız. Piyasa Derinliği ile ilgili tüm bilgileri, yani belirtilen sembol için Piyasa Derinliği kayıtlarını içeren yapı dizisi MqlBookInfo ile ilgili tüm bilgileri döndürür. Unutulmamalıdır ki bu dizinin boyutu, aracıya bağlı olarak değişiklik gösterecektir.

Şablon, Logtaki dizi yapısı değerlerinin görüntülenmesine olanak tanır.

EA, SBRF-12.14 vadeli işlemleri için hata ayıklama modunda başlatılmıştır. Experts günlüğündeki kayıtların sırası aşağıdaki gibi olacaktır:

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

Bu, Piyasa Derinliği belirli noktalarda böyle olduğu içindir. Yapı dizisinin ilk unsuru, en yüksek fiyattan (7708 Ruble) satış talimatıdır. Dizinin son unsuru, en düşük fiyattan (7652 Ruble) satın alma talimatıdır. Yani, Piyasa Derinliği verileri yukarıdan aşağıya doğru sıralanarak okunur.

Kolaylık sağlamak için verileri Tablo 1'de topladım.

Tablo 1 SBRF-12.14 için Piyasa Derinliği

Tablo 1. SBRF-12.14 için Piyasa Derinliği

Kırmızı ile vurgulanan üst blok, satış talimatlarını (satış limitlerini) içerir. Yeşil ile vurgulanan alt blok, satın alma talimatlarını (satın alma limitlerini) içerir.

Tüm satış talimatları arasında 6 numaralı talimatın, 7700 Ruble fiyatı ve 1011 lotluk hacmi ile en büyük hacme sahip olduğu açıkça görünmektedir. 39 numaralı talimat, 7653 Ruble fiyatı ve 534 lotluk hacmi ile tüm satın alma talimatları arasındaki en büyük hacme sahiptir.

Pazar Derinliğindeki kaynak veriler, yatırımcının bir alım satım stratejisi oluşturmak için analiz ettiği bilgilerdir. En basit alım satım fikri, bitişik fiyat seviyelerindeki önemli hacimli talimatların toplanması ve kümelenmesiyle destek ve direnç bölgeleri oluşturulmasıdır. Bir sonraki bölümde, Piyasa Derinliğindeki değişiklikleri takip edecek bir gösterge oluşturacağız.


4. Piyasa Derinliği

Piyasa Derinliği verileriyle çalışan çok sayıda çeşit gösterge vardır. MetaTrader 5 Market'de birkaç ilginç şey bulabilirsiniz. Benim en sevdiğim IShift olabilir. Geliştirici Yury Kulikov, kompakt ve bilgilendirici bir araç oluşturmayı başarmıştır.

Piyasa Derinliği verileriyle çalışan tüm programlar, yalnızca bu MQL5 programlarında BookEvent olay işleyicisi bulunduğu için Expert Advisor veya gösterge biçiminde olacaktır.

Hadi canlı Piyasa Derinliği verilerini gösterecek kısa bir program oluşturalım. İlk önce görüntülenecek verileri belirlememiz gereklidir. Bu talimatın hacmini gösteren yatay çubukların olduğu bir panel olacaktır. Bununla birlikte, çubukların boyutu göreceli nitelikte olacaktır. Tüm mevcut talimatların maksimum hacmi %100 olarak kabul edilecektir. Şekil 2, 7507 Ruble fiyatındaki talimatın 519 lotla en büyük hacme sahip olduğunu göstermektedir.

Panelin doğru şekilde başlatılması için, Piyasa Derinliği veya seviye sayısı tam olarak belirtilmelidir ("DOM derinliği" parametresi). Bu numara aracıdan aracıya farklılık gösterir.

Şek.2 Piyasa Paneli Derinliği

Şek.2 Piyasa Paneli Derinliği

Panelin program kodu Nesneye Yönelik Programlama yaklaşımı ile yazılmıştır. Panel operasyonundan sorumlu sınıf, CBookBarsPanel. olarak adlandırılır.

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

Bu sınıf dört veri üyesi içerir.

  • m_obj_arr özniteliği, CObject türündeki nesnelere yönelik işaretçiler için kapsayıcıdır. Piyasa Derinliği verilerini depolamak için kullanılır. İkincisi için ayrı bir sınıf oluşturulacaktır.
  • Piyasa Derinliği seviyelerinin sayısından m_arr_size özniteliği sorumludur.
  • m_width ve m_height öznitelikleri, panel boyutlarını (piksel cinsinden genişlik ve yükseklik) depolar.

Yöntemler söz konusu olduğunda, standart oluşturucu ve yıkıcının yanı sıra, kümeler şunları içerir:

  • başlatma yöntemi
  • başlatmayı geri alma yöntemi
  • güncelleme yöntemi

Fiyat, yatay çubuk ve hacim belirterek panelin (Pazar Derinliği seviyesinin) her satırı için ayrı bir CBookRecord sınıfı oluşturacağız.

Bu üç tane işaretçiden oluşacaktır. Bunlardan biri CChartObjectRectLabel türündeki nesneye (yatay çubukla çalışmak için dikdörtgen etiket) ve CChartObjectLabel türündeki iki işaretçiye (fiyat ve hacim için metin etiketlerine) işaret edecektir.

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

Yöntemler arasında:

  • kayıt oluşturma yöntemi;
  • veri ayarlama yöntemi;
  • veri alma yöntemi;
  • büyük sayıları biçimlendirme yöntemi.

Ardından, EA için olan BookEvent işleyicisi ve en önemlisi gösterge aşağıdaki gibi görünecektir:

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

Bu nedenle, her BookEvent oluşturulduğunda, panel verilerini güncelleyecektir. Programın güncellenmiş sürümünü BookEventProcessor2.mq5 olarak adlandıracağız.

Yukarıdaki videoda EA'nın nasıl çalıştığını görebilirsiniz.


Sonuç

Bu makale, Terminalin başka bir olayına - Piyasa Derinliği olayına ayrılmıştır. Bu olay genellikle yüksek frekanslı alım satım algoritmalarının (HFT) merkezinde yer alır. Bu tür alım satım, yatırımcılar arasında popülerlik kazanmaktadır.

MQL5'te programlamaya başlayan yatırımcıların, Piyasa Derinliği olayının işlenmesine ilişkin eklenen örnekleri yararlı bulacağını umuyorum. Bu makaleye eklenen kaynak dosyaların proje klasörüne yerleştirilmesi uygundur. Benim durumumda bu \MQL5\Projects\BookEvent olur.

MetaQuotes Ltd tarafından Rusçadan çevrilmiştir.
Orijinal makale: https://www.mql5.com/ru/articles/1179

Ekli dosyalar |
BookEvent.zip (3.84 KB)
MQL4 ve MQL5 kullanarak fraktallara dayalı trend çizgileri çizme MQL4 ve MQL5 kullanarak fraktallara dayalı trend çizgileri çizme
Makale, MQL4 ve MQL5 kullanarak Fraktallar göstergesine dayalı trend çizgilerinin çizilme otomasyonunu açıklar. Makale yapısı, iki dil için çözümün karşılaştırmalı bir görünümünü sağlar. Trend çizgileri, bilinen son iki fraktal kullanılarak çizilir.
Neden MetaTrader 4 ve MetaTrader 5'teki Sanal Barındırma Sıradan VPS'den Daha İyidir? Neden MetaTrader 4 ve MetaTrader 5'teki Sanal Barındırma Sıradan VPS'den Daha İyidir?
Sanal Barındırma Bulut ağı, MetaTrader 4 ve MetaTrader 5 için özel olarak geliştirilmiştir ve tüm yerel çözüm avantajlarına sahiptir. 24 saat ücretsiz teklifimizin avantajlarından yararlanın - hemen sanal sunucuyu test edin.
Likit Grafik Likit Grafik
Saatin ikinci ve beşinci dakikasından itibaren çubukların açıldığı saatlik bir grafik görmek ister misiniz? Çubukların açılış zamanı her dakika değiştiğinde yeniden çizilen bir grafik nasıl görünür? Bu tür grafiklerdealım satım yapmanın ne gibi avantajları vardır? Bu soruların cevaplarını bu yazıda bulacaksınız.
Rastgele Ormanlar Öngörü Trendleri Rastgele Ormanlar Öngörü Trendleri
Bu makale, Forex'te döviz çiftlerinin uzun ve kısa pozisyonlarını tahmin ederek formasyonların otomatik araması için Rattle paketi kullanmayı ele almaktadır. Bu makale hem acemi hem de deneyimli yatırımcılar için faydalı olabilir.