ObjectMove

Nesnenin belirtilen tutturma noktası koordinatını değiştirir.

bool  ObjectMove(
   long      chart_id,        // çizelge tanımlayıcı
   string    name,            // nesne ismi
   int       point_index,     // tutturma noktası indisi
   datetime  time,            // Zaman
   double    price            // Fiyat
   );

Parametreler

chart_id

[in]  Çizelge tanımlayıcısı. 0, mevcut çizelge anlamına gelir.

name

[in]  Nesne ismi.

point_index

[in]  Tutturma noktasının indisi. Tutturma noktalarının sayısı, nesnenin tipine bağlıdır.

time

[in]  Seçilen tutturma noktasının zaman koordinatı.

price

[in]  Seçilen tutturma noktasının fiyat koordinatı.<

Dönüş değeri

Fonksiyon, komutun doğru olarak belirtilen grafiğin sırasına başarıyla eklendiğinde true, aksi halde false döndürür.

Not

ObjectMove() için her zaman eşzamansız bir çağrı kullanılır, bu nedenle fonksiyon yalnızca komutun bir grafik sırasına eklenmesinin sonuçlarını döndürür. Bu durumda true yalnızca komutun başarıyla eklendiği anlamına gelir, ancak yürütme sonucu bilinmemektedir.

Komut yürütme sonucunu kontrol etmek için, ObjectGetXXX gibi nesne özelliklerini isteyen bir fonksiyon kullanabilirsiniz. Bununla birlikte, bu tür işlevlerin bu grafiğin kuyruğunun sonuna eklendiğini ve yürütme sonucunu beklediğini (senkron çağrı nedeniyle) unutmamalısınız ve bu nedenle zaman alıcı olabilir. Bu özellik, bir grafikte çok sayıda nesneyle çalışırken dikkate alınmalıdır.

 

Örnek:

#property copyright "Copyright 2025, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
 
#define   OBJ_NAME_ASK     "TestObjectMoveAsk"  // Ask fiyatı için grafiksel nesnenin adı
#define   OBJ_NAME_BID     "TestObjectMoveBid"  // Bid fiyatı için grafiksel nesnenin adı
#define   COUNT            100000000            // geçmişi yüklemek için tik sayısı
#define   DELAY            1                    // ms cinsinden tikler arasındaki gecikme
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- mevcut grafik kimliği, grafik sembolü ve sembol basamağı
   long   chart_idChartID();
   string symbol  = ChartSymbol(chart_id);
   int    digits  = (int)SymbolInfoInteger(symbolSYMBOL_DIGITS);
   
//--- grafikte Ask fiyatını ve Bid fiyatını görüntülemek için iki fiyat etiketi oluştur
   if(!CreatePriceLabel(chart_idtrue) || !CreatePriceLabel(chart_idfalse))
      return;
   
//--- tikleri almak için dizi
   MqlTick ticks[]={};
   
//--- grafikteki bir sonraki görünür çubuğun numarasını ve bu çubuğun milisaniye cinsinden açılış zamanını al
   int   first= (int)ChartGetInteger(chart_idCHART_FIRST_VISIBLE_BAR)-1;
   ulong from = GetTime(symbolPERIOD_CURRENTfirst)*1000;
   
//--- tik geçmişini diziye yükle
   Print("Started collecting ticks...");
   if(!GetTicksToArray(symbolticks))
      return;
      
//--- tik dizisini sıfırla ve grafikteki görünür çubuk aralığından tikleri al
   ZeroMemory(ticks);
   if(CopyTicksRange(symbolticksCOPY_TICKS_INFOfrom)<1)
     {
      PrintFormat("CopyTicksRange() from date %s failed. Error %d"TimeToString(GetTime(symbolPERIOD_CURRENTfirst)), GetLastError());
      return;
     }
   
   Sleep(500);
   PrintFormat("Tick ​​visualization started at %s (%I64u), ticks total: %u"TimeToString(GetTime(symbolPERIOD_CURRENTfirst)), fromticks.Size());
   
   int count=0;                  // işlenen tik sayısı
   int changes=0;                // işlenen fiyat değişikliği sayısı
   int total=(int)ticks.Size();  // tik dizisi büyüklüğü
   
//--- tik dizisi boyunca bir döngü içinde
   for(int i=0i<total && !IsStopped(); i++)
     {
      //--- diziden bir tik al ve tik sayacını artır
      MqlTick  tick=ticks[i];
      count++;
      
      //--- Ask ve Bid tik bayraklarını kontrol et
      bool ask_tick=((tick.flags &TICK_FLAG_ASK)==TICK_FLAG_ASK); 
      bool bid_tick=((tick.flags &TICK_FLAG_BID)==TICK_FLAG_BID); 
      bool done=false;
      
      //--- Ask fiyatı değişirse
      if(ask_tick)
        {
         if(Move(chart_idOBJ_NAME_ASKtick.timetick.ask))
           {
            changes++;
            done=true;
           }
        }
      //--- Bid fiyatı değişirse
      if(bid_tick)
        {
         if(Move(chart_idOBJ_NAME_BIDtick.timetick.bid))
           {
            changes++;
            done=true;
           }
        }
      //--- grafiksel nesnelerden herhangi biri (veya her ikisi) taşınmışsa, grafiği güncelle
      if(done)
        {
         ChartRedraw(chart_id);
         Sleep(DELAY);
        }
     }
   
//--- döngünün sonunda, işlenen tik sayısını günlükte yazdır,
//--- birkaç saniye bekle, oluşturulan nesneleri sil ve grafiği yeniden çiz
   PrintFormat("Total ticks completed: %u, Total price changes: %d"countchanges);
   Sleep(2000);
   if(ObjectsDeleteAll(chart_id"TestObjectMove")>0)
      ChartRedraw(chart_id);
   /*
   komut dosyasının çalıştırılması sonucunda, Ask ve Bid fiyatlarının hareketi,
   grafiğin sol kenarından başlayarak geçmiş verilerin sonuna kadar görünür grafikte görüntülenecektir;
   aşağıdaki veriler günlükte görüntülenecektir:
   Started collecting ticks...
   AUDUSDreceived 13726794 ticks in 969 ms
   Tick ​​visualization started at 2025.01.31 09:00 (1738314000000), ticks total44380
   Total ticks completed44380Total price changes68513
   */
  }
//+------------------------------------------------------------------+
//| Bir “fiyat etiketi” nesnesi oluştur                              |
//+------------------------------------------------------------------+
bool CreatePriceLabel(const long chart_idconst bool obj_ask)
  {
   string obj_name=(obj_ask ? OBJ_NAME_ASK : OBJ_NAME_BID);
   ResetLastError();
   if(!ObjectCreate(chart_idobj_name, (obj_ask ? OBJ_ARROW_RIGHT_PRICE : OBJ_ARROW_LEFT_PRICE), 000))
     {
      PrintFormat("%s: ObjectCreate() failed. Error %d",__FUNCTION__GetLastError());
      return(false);
     }
   return(ObjectSetInteger(chart_idobj_nameOBJPROP_COLOR, (obj_ask ? clrRed : clrBlue)));
  }
//+------------------------------------------------------------------+
//| Grafiksel nesneyi belirtilen fiyat/zaman koordinatlarına taşı |
//+------------------------------------------------------------------+
bool Move(const long chart_idconst string obj_nameconst datetime timeconst double price)
  {
   ResetLastError();
   if(!ObjectSetInteger(chart_idobj_nameOBJPROP_TIMEtime))
     {
      PrintFormat("%s: ObjectSetInteger() failed. Error %d",__FUNCTION__GetLastError());
      return(false);
     }
   if(!ObjectSetDouble(chart_idobj_nameOBJPROP_PRICEprice))
     {
      PrintFormat("%s: ObjectSetDouble() failed. Error %d",__FUNCTION__GetLastError());
      return(false);
     }
   return(true);
  }
//+------------------------------------------------------------------+
//| Tikleri diziye yükle                                             |
//+------------------------------------------------------------------+
bool GetTicksToArray(const string symbolMqlTick &array[])
  {
   int  attempts=0;     // tik geçmişi elde etme girişimlerinin sayacı
   bool success =false// tiklerin başarılı kopyalanması bayrağı
   
//--- tikleri almak için 3 deneme yap
   while(attempts<3
     {
      //--- tikleri almadan önce başlangıç zamanını ölç
      uint start=GetTickCount();
      
      //--- 1970.01.01 00:00.001'den (from parametresi = 1 ms) bu yana tik geçmişini talep et
      ResetLastError();
      int received=CopyTicks(symbolarrayCOPY_TICKS_ALL1COUNT); 
      if(received!=-1
        { 
         //--- tik sayısı ve harcanan süreye ilişkin verileri görüntüle
         PrintFormat("%s: received %d ticks in %d ms"symbolreceivedGetTickCount()-start); 
         //--- tik geçmişi senkronize edilmişse, hata kodu sıfıra eşittir
         if(GetLastError()==0
           { 
            success=true
            break
           } 
         else 
            PrintFormat("%s: %s ticks are not synchronized yet, %d ticks received for %d ms. Error=%d"
            __FUNCTION__symbolreceivedGetTickCount()-startGetLastError()); 
        } 
      //--- girişimleri say
      attempts++; 
      //--- tik veritabanının senkronizasyonunun bitmesini beklemek için bir saniye durakla
      Sleep(1000); 
     } 
//--- tik geçmişinin başlangıcından itibaren istenen tiklerin alınması üç denemede başarısız oldu  
   if(!success
     { 
      PrintFormat("Error! Failed to get ticks for symbol %s after three attempts"symbol); 
      return(false); 
     }
   return(true);
  }
//+------------------------------------------------------------------+
//| Çubuk indeksine göre zamanı geri döndür                          |
//+------------------------------------------------------------------+
datetime GetTime(const string symbolconst ENUM_TIMEFRAMES timeframeconst int index)
  {
   datetime array[1]={};
   ResetLastError();
   if(CopyTime(symboltimeframeindex1array)!=1)
      PrintFormat("%s: CopyTime() failed. Error %d",__FUNCTION__GetLastError());
   return(array[0]);
  }