OnChartEvent

Fonskiyon, ChartEvent olayı meydana geldiğinde göstergeler ve uzman danışmanlarda çağrılır. Fonksiyon; grafikte, bir kullanıcı veya bir MQL5 programı tarafından yapılan değişiklikleri yönetmek içindir.

void  OnChartEvent()
   const int       id,       // olay kimliği 
   const long&     lparam,   // long type event parameter
   const double&   dparam,   // long type event parameter
   const long&     sparam    // string type event parameter
   );

Parametreler

id

[in] ENUM_CHART_EVENT listesinden olay kimliği.

lparam

[in] long tipi olay parametresi

dparam

[in] double tipi olay parametresi

sparam

[in] string tipi olay parametresi

Geri dönüş değeri

Geri dönüş değeri yok

Not

Önceden tanımlanmış OnChartEvent() fonksiyonu kullanılarak yönetilebilecek 11 olay tipi vardır. Özel olaylar için, CHARTEVENT_CUSTOM ve CHARTEVENT_CUSTOM_LAST dahil olmak üzere 65535 kimlik vardır. Özel bir olay oluşturmak için, EventChartCustom() fonksiyonunu kullanın.

ENUM_CHART_EVENT listesinden kısa olay açıklamaları:

  • CHARTEVENT_KEYDOWN — grafik penceresi odaktayken klavyede bir tuşa basma;
  • CHARTEVENT_MOUSE_MOVE — fare ve fare tuşlarını hareket ettirme (eğer bir grafik için CHART_EVENT_MOUSE_MOVE=true ise);
  • CHARTEVENT_OBJECT_CREATE — bir grafiksel nesne oluştur (eğer bir grafik için CHART_EVENT_OBJECT_CREATE=true ise);
  • CHARTEVENT_OBJECT_CHANGE — özellikler iletişim kutusundan nesne özelliklerini değiştir;
  • CHARTEVENT_OBJECT_DELETE — bir grafiksel nesneyi kaldır (eğer bir grafik için CHART_EVENT_OBJECT_DELETE=true ise);
  • CHARTEVENT_CLICK — bir grafik üzerinde tıklama;
  • CHARTEVENT_OBJECT_CLICK — bir grafiğe ait olan bir grafiksel nesneye fare tıklaması;
  • CHARTEVENT_OBJECT_DRAG — fare ile bir grafiksel nesneyi sürükleme;
  • CHARTEVENT_OBJECT_ENDEDIT — bir grafiksel nesnenin Edit girdi kutusunda metin düzenlemesini bitirme (OBJ_EDIT);
  • CHARTEVENT_CHART_CHANGE — bir grafiği değiştir;
  • CHARTEVENT_CUSTOM+n — n'nin 0 ile 65535 arasında olduğu özel olay kimliği. CHARTEVENT_CUSTOM_LAST son kabul edilebilir özel olay kimliğini içerir (CHARTEVENT_CUSTOM+65535).

Tüm MQL5 programları, uygulamanın ana iş parçacığı dışındaki diğer iş parçacıklarında çalışır. Ana uygulama iş parçacığı, tüm Windows sistem iletilerini ele almaktan sorumludur ve bu işlem sonucunda da kendi uygulaması için Windows iletileri üretir. Örneğin, fareyi bir grafikte hareket ettirme (WM_MOUSE_MOVE olayı), uygulama penceresinin sonraki görüntülenmesi için birkaç sistem iletisi oluşturur ve ayrıca grafik üzerinde çalıştırılan uzman danışmanlar ve göstergelere dahili iletiler gönderir. Ana uygulama iş parçacığının WM_PAINT sistem iletisini henüz işleme koymadığında (ve dolayısıyla değiştirilmiş grafiği henüz oluşturmadığında), bir uzman danışmanın veya bir göstergenin fare hareketi olayını halihazırda almış olduğu bir durum meydana gelebilir. Bu durumda, CHART_FIRST_VISIBLE_BAR grafik özelliği yalnızca grafik oluşturulduktan sonra değiştirilecek.

Her bir olay tipi için, OnChartEvent() fonksiyonunun girdileri ilgili olayı yönetmek için gerekli belirli değerlere sahiptir. Tablo, parametreler aracılığı ile aktarılan olayları ve değerleri listeler.

Olay

'id' parametre değeri

'lparam' parametre değeri

'dparam' parametre değeri

'sparam' parametre değeri

Tuşa basma olayı

CHARTEVENT_KEYDOWN

basılı tuş kodu

Anahtar basılı durumda tutulurken tuşa basma sayısı

Klavye tuşlarının durumunu açıklayan bit maskesinin dizi değeri

Fare olayları (eğer bir grafik için CHART_EVENT_MOUSE_MOVE=true ise)

CHARTEVENT_MOUSE_MOVE

X koordinatı

Y koordinatı

Fare tuşlarının durumunu açıklayan bit maskesinin dizi değeri

Fare tekerlek olayı (eğer bir grafik için CHART_EVENT_MOUSE_WHEEL=true ise)

CHARTEVENT_MOUSE_WHEEL

Tuşların ve fare düğmelerinin durum bayrakları, imlecin X ve Y koordinatları. Açıklamalara bakın; örnekteki

Fare tekerleğinin Delta değeri

Bir grafiksel nesne oluşturma (eğer bir graik için CHART_EVENT_OBJECT_CREATE=true ise)

CHARTEVENT_OBJECT_CREATE

Oluşturulan grafiksel nesnenin adı

Özellikler iletişim kutusu aracılığı ile nesne özelliklerini değiştirme

CHARTEVENT_OBJECT_CHANGE

Değiştirilmiş grafiksel nesnenin adı

Bir grafiksel nesneyi silme (eğer bir grafik için CHART_EVENT_OBJECT_DELETE=true ise)

CHARTEVENT_OBJECT_DELETE

Silinmiş grafiksel nesnenin adı

Bir grafikte fare tıklaması

CHARTEVENT_CLICK

X koordinatı

Y koordinatı

Bir grafiksel nesnede fare tıklaması

CHARTEVENT_OBJECT_CLICK

X koordinatı

Y koordinatı

Olayın meydana geldiği grafiksel nesnenin adı

Fare ile bir grafiksel nesneyi hareket ettirme

CHARTEVENT_OBJECT_DRAG

Hareket ettirilmiş grafiksel nesnenin adı

Bir "Girdi alanı" grafiksel nesnesinin girdi kutusunun metin düzenlemesini bitirme

CHARTEVENT_OBJECT_ENDEDIT

Metin düzenlemesinin bitirildiği "Girdi alanı" grafiksel nesnesinin ismi

Özellikler iletişim penceresi aracılığı ile grafiği yeniden boyutlandırma veya değiştirme

CHARTEVENT_CHART_CHANGE

N numaralı özel olay

CHARTEVENT_CUSTOM+N

EventChartCustom() fonksiyonu tarafından tanımlanan değer

EventChartCustom() fonksiyonu tarafından tanımlanan değer

EventChartCustom() fonksiyonu tarafından tanımlanan değer

Örnek grafik olay dinleyicisi:

//+------------------------------------------------------------------+
//|                                          OnChartEvent_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 "Örnek grafik olay dinleyicisi ve özel olay oluşturucusu"
//--- hizmet tuşları kimlikleri
#define KEY_NUMPAD_5       12
#define KEY_LEFT           37
#define KEY_UP             38
#define KEY_RIGHT          39
#define KEY_DOWN           40
#define KEY_NUMLOCK_DOWN   98
#define KEY_NUMLOCK_LEFT  100
#define KEY_NUMLOCK_5     101
#define KEY_NUMLOCK_RIGHT 102
#define KEY_NUMLOCK_UP    104
//+------------------------------------------------------------------+
//| Uzman danışman başlatımı                                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- CHARTEVENT_CUSTOM sabiti değerini görüntüle
   Print("CHARTEVENT_CUSTOM=",CHARTEVENT_CUSTOM);
//---
   Print("Uzman danışman çalıştırıldı ",MQLInfoString(MQL5_PROGRAM_NAME));
//--- grafik nesnesi oluşturma olaylarını almanın bayrağını ayarla
   ChartSetInteger(ChartID(),CHART_EVENT_OBJECT_CREATE,true);
//--- grafik nesnesi kaldırma olaylarını almanın bayrağını ayarla
   ChartSetInteger(ChartID(),CHART_EVENT_OBJECT_DELETE,true);
//--- fare tekerleği kaydırma iletilerini etkinleştir
   ChartSetInteger(0,CHART_EVENT_MOUSE_WHEEL,1);
//--- grafik özelliklerinin zorla güncellenmesi olay işleme için hazırlık sağlar
   ChartRedraw();
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Uzman danışman tik fonksiyonu                                    |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- özel bir olay oluşturmak için tik sayacı
   static int tick_counter=0;
//--- birikmiş tikleri bu değere bölün
   int simple_number=113;
//--- 
   tick_counter++;
//--- eğer tik sayacı simple_number ın katları ise özel bir olay gönder
   if(tick_counter%simple_number==0)
     {
      //--- 0'dan 65535'e kadar bir özel olay kimliği oluştur
      ushort custom_event_id=ushort(tick_counter%65535);
      //---  parametre doldurma ile özel bir olay gönder
      EventChartCustom(ChartID(),custom_event_id,tick_counter,SymbolInfoDouble(Symbol(),SYMBOL_BID),__FUNCTION__);
      //--- örnek sonuçlarını analiz etmek için bir günlüğe ekle
      Print(__FUNCTION__,": Özel bir olay gönder, kimlik=",custom_event_id);
     }
//---     
  }
//+------------------------------------------------------------------+
//| ChartEvent fonksiyonu                                            |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//--- tuş basımı
   if(id==CHARTEVENT_KEYDOWN)
     {
      switch((int)lparam)
        {
         case KEY_NUMLOCK_LEFT:  Print("KEY_NUMLOCK_LEFT e basıldı");   break;
         case KEY_LEFT:          Print("KEY_LEFT e basıldı");           break;
         case KEY_NUMLOCK_UP:    Print("KEY_NUMLOCK_UP a basıldı");     break;
         case KEY_UP:            Print("KEY_UP a basıldı");             break;
         case KEY_NUMLOCK_RIGHTPrint("KEY_NUMLOCK_RIGHT a basıldı");  break;
         case KEY_RIGHT:         Print("KEY_RIGHT a basıldı");          break;
         case KEY_NUMLOCK_DOWN:  Print("KEY_NUMLOCK_DOWN a basıldı");   break;
         case KEY_DOWN:          Print("KEY_DOWN a basıldı");           break;
         case KEY_NUMPAD_5:      Print("KEY_NUMPAD_5 a basıldı");       break;
         case KEY_NUMLOCK_5:     Print("KEY_NUMLOCK_5 a basıldı");      break;
         default:                Print("Listede olmayan tuşa basıldı");
        }
     }
//--- bir grafiğe sol tıklama
   if(id==CHARTEVENT_CLICK)
      Print("Grafik üzerindeki fare tıklama koordinatları: x = ",lparam,"  y = ",dparam);
//--- bir grafiksel nesneye tıklama
   if(id==CHARTEVENT_OBJECT_CLICK)
      Print("Fare tıklaması yapıldı, nesne adı '"+sparam+"'");
//--- nesne kaldırıldı
   if(id==CHARTEVENT_OBJECT_DELETE)
      Print("Kaldırılan nesne adı ",sparam);
//--- nesne oluşturuldu
   if(id==CHARTEVENT_OBJECT_CREATE)
      Print("Oluşturulan nesne adı ",sparam);
//--- değiştirilen nesne
   if(id==CHARTEVENT_OBJECT_CHANGE)
      Print("Değiştirilen nesne adı ",sparam);
//--- nesne hareket ettirildi veya çapa noktalarının koordinatları değişti
   if(id==CHARTEVENT_OBJECT_DRAG)
      Print("Nesnenin çapa noktalarının değişimi, ilgili nesne adı ",sparam);
//--- Edit grafiksel nesnesinin girdi alanının metni değiştirildi
   if(id==CHARTEVENT_OBJECT_ENDEDIT)
      Print("Edit nesnesinde metin değişti, ",sparam,"  id=",id);
//--- fare hareket olayları
   if(id==CHARTEVENT_MOUSE_MOVE)
      Comment("POINT: ",(int)lparam,",",(int)dparam,"\n",MouseState((uint)sparam));
   if(id==CHARTEVENT_MOUSE_WHEEL)
     {
      //--- Bu olay için fare düğmelerinin ve tekerleğinin durumunu dikkate al
      int flg_keys = (int)(lparam>>32);          // Ctrl ve Shift tuşunun ve de fare düğmelerinin durumlarının bayrağı
      int x_cursor = (int)(short)lparam;         // Fare tekerleği olayı meydana geldiğindeki X koordinatı
      int y_cursor = (int)(short)(lparam>>16);   // Fare tekerleği olayı meydana geldiğindeki Y koordinatı
      int delta    = (int)dparam;                // +120 yada -120 ye ulaşılınca tetikleyen fare kaydırımının toplam değeri
      //--- bayrağı yönetme
      string str_keys="";
      if((flg_keys&0x0001)!=0)
         str_keys+="LMOUSE ";
      if((flg_keys&0x0002)!=0)
         str_keys+="RMOUSE ";
      if((flg_keys&0x0004)!=0)
         str_keys+="SHIFT ";
      if((flg_keys&0x0008)!=0)
         str_keys+="CTRL ";
      if((flg_keys&0x0010)!=0)
         str_keys+="MMOUSE ";
      if((flg_keys&0x0020)!=0)
         str_keys+="X1MOUSE ";
      if((flg_keys&0x0040)!=0)
         str_keys+="X2MOUSE ";
 
      if(str_keys!="")
         str_keys=", tuşlar='"+StringSubstr(str_keys,0,StringLen(str_keys)-1)+"'";
      PrintFormat("%s: X=%d, Y=%d, delta=%d%s",EnumToString(CHARTEVENT_MOUSE_WHEEL),x_cursor,y_cursor,delta,str_keys);
     }
//--- özellikler iletişim penceresi kullanarak grafiği yeniden boyutlandırmanın veya grafik özelliklerini değiştirmenin olayı
   if(id==CHARTEVENT_CHART_CHANGE)
      Print("grafik boyutunu ve özelliklerini değiştirme");
//--- özel olay
   if(id>CHARTEVENT_CUSTOM)
      PrintFormat("Özel olay, kimlik=%d, lparam=%d, dparam=%G, sparam=%s",id,lparam,dparam,sparam);
  }
//+------------------------------------------------------------------+
//| MouseState                                                       |
//+------------------------------------------------------------------+
string MouseState(uint state)
  {
   string res;
   res+="\nML: "   +(((state& 1)== 1)?"DN":"UP");   // fare sol
   res+="\nMR: "   +(((state& 2)== 2)?"DN":"UP");   // fare sağ 
   res+="\nMM: "   +(((state&16)==16)?"DN":"UP");   // fare orta
   res+="\nMX: "   +(((state&32)==32)?"DN":"UP");   // fare ilk X tuşu
   res+="\nMY: "   +(((state&64)==64)?"DN":"UP");   // fare ikinci X tuşu
   res+="\nSHIFT: "+(((state& 4)== 4)?"DN":"UP");   // shift tuşu
   res+="\nCTRL: " +(((state& 8)== 8)?"DN":"UP");   // control tuşu
   return(res);
  }

Ayrıca bakınız

EventChartCustom, Grafik olaylarının türleri, Olay yönetimi fonksiyonları, Program yürütme, Müşteri terminal olayları