OnTimer

Fonksiyon, Timer olayının terminal tarafından sabit zaman aralıklarında oluşturulmasıyla uzman danışmanlarda çağrılır.

void  OnTimer(void);

Geri dönüş değeri

Geri dönüş değeri yok

Not

Timer olayı, EventSetTimer() fonksiyonu ile zamanlayıcıyı etkin hale getiren bir uzman danışman için, müşteri terminali tarafından periyodik olarak oluşturulur. Genellikle, bu fonksiyon OnInit() fonksiyonu içerisinde çağrılır. Uzman danışman çalışmayı durdurduğunda, zamanlayıcı genellikle OnDeinit() fonksiyonu içerisinde çağrılan EventKillTimer() fonksiyonu ile kaldırılır.

Her bir Uzman Danışman ve her bir gösterge kendi zamanlayıcısı ile çalışır ve olayları sadece ondan alır. Mql5 uygulamasının kapatılması sırasında; zamanlayıcı, önceden oluşturulup ancak devamında EventKillTimer() fonksiyonu ile devre dışı bırakılmaması durumunda, zorla yok edilir.

Eğer zamanlayıcı olaylarını saniyede bir kereden daha sık almanız gerekiyorsa, yüksek çözünürlüklü bir zamanlayıcı oluşturmak için EventSetMillisecondTimer() fonksiyonunu kullanın.

Genelde, zamanlayıcı zaman aralığı azaltıldığında; zamanlayıcı olaylarının yöneticisi daha sık çağrıldığından, test süresi artar. Gerçek zamanlı modda çalışırken, zamanlayıcı olayları, donanım sınırlamaları nedeniyle 10-16 milisaniye içinde 1 kereden daha fazla üretilemez.

Her bir program için sadece bir zamanlayıcı çalıştırılabilir. Her bir MQL5 uygulaması ve grafiği, yeni gelen tüm olayların yerleştiği kendisine ait olaylar sırasına(kuyruğuna) sahiptir. Eğer sıra zaten Timer olayını içeriyorsa veya bu olay yönetilme aşamasındaysa, o zaman yeni Timer olayı MQL5 uygulama sırasına eklenmez.

OnTimer() yöneticisiyle Örnek Uzman Danışman

//+------------------------------------------------------------------+
//|                                               OnTimer_Sample.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2000-2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property description "Alım-satım sunucusu zamanını hesaplamak için zamanlayıcı kullanımının örneği"
#property description "Uzman danışmanı, hafta sonundan önce bir işlem haftasının sonunda çalıştırmanız önerilir."
//+------------------------------------------------------------------+
//| Uzman danışman başlatma fonksiyonu                               |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 1 saniye zaman aralıklı bir zamanlayıcı oluştur
   EventSetTimer(1);
 
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Uzman danışman sonlandırma fonksiyonu                            |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- işi tamamladıktan sonra zamanlayıcıyı kaldır
   EventKillTimer();
 
  }
//+------------------------------------------------------------------+
//| Uzman danışman tik fonksiyonu                                    |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
 
  }
//+------------------------------------------------------------------+
//| Zamanlayıcı fonksiyonu                                           |
//+------------------------------------------------------------------+
void OnTimer()
  {
//--- OnTimer() ilk çağrısının zamanı
   static datetime start_time=TimeCurrent();
//--- İlk OnTimer() çağrısı sırasında alım-satım sunucusu zamanı
   static datetime start_tradeserver_time=0;
//--- hesaplanmış alım-satım sunucusu zamanı
   static datetime calculated_server_time=0;
//--- yerel bilgisayar zamanı
   datetime local_time=TimeLocal();
//--- mevcut tahmini alım-satım sunucusu zamanı
   datetime trade_server_time=TimeTradeServer();
//--- eğer sunucu zamanı bir nedenden dolayı bilinmiyorsa, vaktinden önce çıkın
   if(trade_server_time==0)
      return;
//--- eğer başlangıç alım-satım sunucusu değeri henüz belirlenmemişse
   if(start_tradeserver_time==0)
     {
      start_tradeserver_time=trade_server_time;
      //--- alım-satım sunucusunun hesaplanmış değerini ayarla      
      Print(trade_server_time);
      calculated_server_time=trade_server_time;
     }
   else
     {
      //--- OnTimer() ilk çağrısının süresini artır
      if(start_tradeserver_time!=0)
         calculated_server_time=calculated_server_time+1;;
     }
//--- 
   string com=StringFormat("                  Başlangıç zamanı: %s\r\n",TimeToString(start_time,TIME_MINUTES|TIME_SECONDS));
   com=com+StringFormat("                  Yerel zaman: %s\r\n",TimeToString(local_time,TIME_MINUTES|TIME_SECONDS));
   com=com+StringFormat("TimeTradeServer zamanı: %s\r\n",TimeToString(trade_server_time,TIME_MINUTES|TIME_SECONDS));
   com=com+StringFormat(" EstimatedServer zamanı: %s\r\n",TimeToString(calculated_server_time,TIME_MINUTES|TIME_SECONDS));
//--- grafikteki tüm sayaçların değerlerini görüntüle
   Comment(com);
  }

Ayrıca bakınız

EventSetTimer, EventSetMillisecondTimer, EventKillTimer, GetTickCount, GetMicrosecondCount, Müşteri terminali olayları