OnBookEvent

Fonksiyon, BookEvent olayı meydana geldiğinde göstergelerde ve uzman danışmanlarda çağrılır. Piyasa Derinliği değişikliklerini yönetmek içindir.

void  OnBookEvent(
   const string&  symbol         // sembol
   );

Parametreler

symbol

[in] BookEvent in geldiği sembolün adı

Geri dönüş değeri

Geri dönüş değeri yok

Not

Herhangi bir sembol için BookEvent olaylarını almak için, MarketBookAdd() fonksiyonunu kullanarak ilgili sembollere abone olun. İlgili sembol için BookEvent olaylarını almak amacıyla açılan aboneliği iptal etmek için, MarketBookRelease() fonksiyonunu çağırın.

BookEvent, tüm grafikte yayınlanır. Bu durum; bir grafikteki bir uygulamanın MarketBookAdd fonksiyonunu kullanarak BookEvent e abone olması durumunda, aynı grafikte başlatılan ve OnBookEvent() yöneticisine sahip olan diğer tüm göstergeler ve uzman danışmanların da bu olayı alması anlamına gelmektedir Bu nedenle, OnBookEvent() yöneticisine aktarılan bir sembol adını, symbol parametresi olarak analiz etmek gerekir.

Aynı grafikte çalışan tüm uygulamalar için, sembollere göre sıralanmış ayrı BookEvent sayaçları sağlanır. Bu, her bir grafiğin farklı sembollerde çoklu aboneliklere sahip olabileceği ve her sembol için bir sayacın sağlandığı anlamına gelir. BookEvent e abone olmak ve abonelikten çıkmak, belirtilen semboller için abonelik sayacını yalnızca bir grafikte değiştirir. Başka bir deyişle, aynı sembol için BookEvent e bitişik iki grafik olabilir, ancak farklı abonelik sayaç değerlerine sahip olabilirler.

Başlangıç abonelik sayaç değeri sıfırdır. Her bir MarketBookAdd() çağrısında, grafikte belirtilen bir sembol için abonelik sayacı bir arttırılır (MarketBookAdd()'deki grafik ve sembol eşleşmek zorunda değildir). MarketBookRelease() i çağırırken, grafikteki belirli bir sembol için abonelik sayacı bir azalır. Herhangi bir sembol için BookEvent olayları, sayaç sıfıra eşit olana kadar grafikte yayınlanır. Bu nedenle, çalışmasının sonunda MarketBookAdd () çağrılarını içeren her bir MQL5 programının, MarketBookRelease () i kullanarak her sembol için olay alımı aboneliğinden doğru bir şekilde ayrılması önemlidir. Bunu başarmak için, MarketBookAdd() ve MarketBookRelease() çağrılarının sayısı, MQL5 program ömrünün tamamı boyunca her çağrı için bile olmalıdır. Program içindeki bayrakların veya özel abonelik sayaçlarının kullanılması, BookEvent olaylarıyla güvenle çalışmanızı sağlar ve bu olayı aynı grafikteki üçüncü parti programlarında da almak için aboneliklerin devre dışı bırakılmasını engeller.

BookEvent olayları hiçbir zaman atlanmaz, bir önceki BookEvent yönetimi hala sonlanmamış olasa bile her zaman kuyruğa eklenir.

 

Örnek

//+------------------------------------------------------------------+
//|                                           OnBookEvent_Sample.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2000-2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com/en/articles/2635"
#property version   "1.00"
#property description "OnBookEvent() i kullanarak piyasa derinliği yenilenme oranının ölçümünün örneği"
#property description "Kod şu makaleden alınmıştır: https://www.mql5.com/en/articles/2635"
//--- girdi parametreleri
input ulong ExtCollectTime   =30;  // saniye cinsinden test süresi
input ulong ExtSkipFirstTicks=10;  // başlangıçta atlanan tik sayısı
//--- BookEvent olaylarına aboneliğin bayrağı
bool book_subscribed=false;
//--- piyasa derinliğinden istekleri kabul etmek için dizi
MqlBookInfo  book[];
//+------------------------------------------------------------------+
//| Uzman danışman başlatama fonksiyonu                              |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- başlangıcı göster
   Comment(StringFormat("İlk %I64u ticklerinin gelmesini bekleme",ExtSkipFirstTicks));
   PrintFormat("İlk %I64u ticklerinin gelmesini bekleme",ExtSkipFirstTicks);
//--- piyasa derinliği yayınlanımını etkinleştir
   if(MarketBookAdd(_Symbol))
     {
      book_subscribed=true;
      PrintFormat("%s: MarketBookAdd(%s) fonksiyonu true geri döndürdü",__FUNCTION__,_Symbol);
     }
   else
      PrintFormat("%s: MarketBookAdd(%s) fonksiyonu false geri döndürdü! GetLastError()=%d",__FUNCTION__,_Symbol,GetLastError());
//--- başarılı başlatma
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Uzman danışmanı sonlandır                                        |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- sonlandırma neden kodunu görüntüle
   Print(__FUNCTION__,": Sonlandırma neden kodu = ",reason);  
//--- piyasa derinliği olayları alınımı aboneliğini iptal et
   if(book_subscribed)
     {
      if(!MarketBookRelease(_Symbol))
         PrintFormat("%s: MarketBookRelease(%s) false geri döndürdü! GetLastError()=%d",_Symbol,GetLastError());
      else
         book_subscribed=false;
     }
//--- 
  }
//+------------------------------------------------------------------+
//| BookEvent fonksiyonu                                             |
//+------------------------------------------------------------------+
void OnBookEvent(const string &symbol)
  {
   static ulong starttime=0;             // test başlangıç zamanı
   static ulong tickcounter=0;           // piyasa derinliği güncelleme sayacı
//--- sadece eğer onlara abone olunmuşsa piyasa derinliği olayları ile çalış
   if(!book_subscribed)
      return;
//--- sadece belirli bir sembol için güncellemeleri say
   if(symbol!=_Symbol)
      return;
//--- kuyruğu temizlemek ve hazırlamak için ilk tikleri atlayın
   tickcounter++;
   if(tickcounter<ExtSkipFirstTicks)
      return;
//--- başlangıç zamanını hatırla
   if(tickcounter==ExtSkipFirstTicks
      starttime=GetMicrosecondCount();
//--- piyasa derinliği verileri için istek oluştur
   MarketBookGet(symbol,book);
//--- ne zaman durulacak?  
   ulong endtime=GetMicrosecondCount()-starttime;
   ulong ticks  =1+tickcounter-ExtSkipFirstTicks;
// testin başlangıcından bu yana mikrosaniye cinsinden ne kadar süre geçti?
   if(endtime>ExtCollectTime*1000*1000) 
     {
      PrintFormat("%.1f saniye için %I64u tikler: %.1f tikler/saniye ",ticks,endtime/1000.0/1000.0,ticks*1000.0*1000.0/endtime);
      ExpertRemove();
      return;
     }
//--- yorum alanında sayaçları görüntüle
   if(endtime>0)
      Comment(StringFormat("%.1f saniye için %I64u tikler: %.1f tikler/saniye ",ticks,endtime/1000.0/1000.0,ticks*1000.0*1000.0/endtime));
  }

 

 

Ayrıca bakınız

MarketBookAdd, MarketBookRelease, MarketBookGet, OnTrade, OnTradeTransaction, OnTick, Olay yönetimi fonksiyonları, Program yürütme, Müşteri terminal olayları