MQL5 Cookbook: BookEvent İşleme
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
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
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
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
- Ücretsiz ticaret uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz