ObjectCreate

Belirtilen çizelge alt-penceresi üzerinde, belirtilen isim, tip ve koordinatlar ile yeni bir nesne oluşturur. Nesnenin oluşturulması sırasında 30 koordinat belirtilebilir.

bool  ObjectCreate(
   long         chart_id,      // çizelge tanımlayıcısı
   string       name,          // nesne ismi
   ENUM_OBJECT  type,          // nesne tipi
   sub_window   nwin,          // pencere indisi
   datetime     time1,         // ilk tutturma noktasının zaman koordinatı
   double       price1,        // ilk tutturma noktasının fiyat koordinatı
  ... 
   datetime     timeN=0,       // N-inci tutturma noktasının zaman koordinatı
   double       priceN=0,      // N-inci tutturma noktasının fiyat koordinatı
  ... 
   datetime     time30=0,      // 30-uncu tutturma noktasının zaman koordinatı
   double       price30=0      // 30-uncu tutturma noktasının fiyat koordinatı
   );

Parametreler

chart_id

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

name

[in]  Nesne ismi. Bu isim, çizelge (alt-pencereler de dahil) içinde benzersiz olmalıdır.

type

[in]  Nesne tipi. Bu değer, ENUM_OBJECT sayımının değerlerinden biri olabilir.

sub_window

[in]  Çizelge alt penceresinin indisi. 0, ana çizelge penceresi demektir. Belirtilen alt-pencere mevcut olmalıdır aksi durumda fonksiyon 'false' dönüşü yapar.

time1

[in]  İlk tutturma noktasının zaman koordinatı.

price1

[in]  İlk tutturma noktasının fiyat koordinatı.

timeN=0

[in]  N-inci tutturma noktasının zaman koordinatı.

priceN=0

[in]  N-inci tutturma noktasının fiyat koordinatı.

time30=0

[in]  Otuzuncu tutturma noktasının zaman koordinatı.

price30=0

[in]  Otuzuncu 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. Bir nesne zaten oluşturulmuşsa, onun koordinatlarını değiştirmek için bir girişim yapılır.

Not

ObjectCreate() için her zaman eşzamansız bir çağrı kullanılır, bu nedenle fonksiyon yalnızca komutu bir grafik sırasına ekleme sonuçlarını verir. 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 ObjectFind() işlevini veya ObjectGetXXX gibi nesne özelliklerini isteyen başka herhangi bir işlevi 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.

Bir nesne adı 63 karakteri aşmamalıdır.

Çizelge alt-pencerelerinin numaralandırılmasına (eğer göstergeli alt-pencereler mevcutsa) 1 ile başlanır. Ana çizelge penceresi her zaman 0 indisine sahiptir.

Fazla sayıda (30'a kadar) tutturma noktası, ilerideki kullanımlar için uygulanır. Ayrıca, grafiksel nesneler için kullanılacak 30 muhtemel tutturma noktası, bir fonksiyonun çağrısında kullanılabilecek parametrelerin sayısının sınırına (64'ten fazla olamaz) bağlı olarak belirlenir.

Bir nesne yeniden isimlendirildiğinde, aynı anda iki olay ortaya çıkar. Bu olaylar, bir Uzman Danışman veya gösterge içerisinde OnChartEvent() fonksiyonu ile işlenebilir:

  • eski isimli nesnenin silinmesi olayı;
  • yeni isimli nesnenin oluşturulması olayı.

Her bir nesne tipi için belirtilmesi gereken belli sayıda tutturma noktası vardır:

Tanıtıcı

Açıklama

Tutturma noktaları

OBJ_VLINE

Dikey Çizgi

Tek tutturma noktası. Gerçekte, sadece zaman koordinatı kullanılır.

OBJ_HLINE

Yatay Çizgi

Tek tutturma noktası. Gerçekte, sadece fiyat koordinatı kullanılır.<

OBJ_TREND

Trend Çizgisi

İki tutturma noktası.

OBJ_TRENDBYANGLE

Açılı Trend Çizgisi

İki tutturma noktası.

OBJ_CYCLES

Döngü Çizgileri

İki tutturma noktası.

OBJ_ARROWED_LINE

Oklu çizgi

İki tutturma noktası.

OBJ_CHANNEL

Eşit-Aralıklı Kanal

Üç tutturma noktası.

OBJ_STDDEVCHANNEL

Standart Sapma Kanalı

İki tutturma noktası.

OBJ_REGRESSION

Doğrusal Regresyon Kanalı

İki tutturma noktası.

OBJ_PITCHFORK

Andrews Çatalı (Üçlü Çizgi)

Üç tutturma noktası.

OBJ_GANNLINE

Gann Çizgisi

İki tutturma noktası.

OBJ_GANNFAN

Gann Yelpazesi

İki tutturma noktası.

OBJ_GANNGRID

Gann Izgarası

İki tutturma noktası.

OBJ_FIBO

Fibonacci Düzeltme Seviyeleri

İki tutturma noktası.

OBJ_FIBOTIMES

Fibonacci Zaman Dilimleri

İki tutturma noktası.

OBJ_FIBOFAN

Fibonacci Yelpazesi

İki tutturma noktası.

OBJ_FIBOARC

Fibonacci Yayları

İki tutturma noktası.

OBJ_FIBOCHANNEL

Fibonacci Kanalı

Üç tutturma noktası.

OBJ_EXPANSION

Fibonacci Açılımı

Üç tutturma noktası.

OBJ_ELLIOTWAVE5

Elliott Dürtü Dalgası

Beş tutturma noktası.

OBJ_ELLIOTWAVE3

Elliott Düzeltme Dalgası

Üç tutturma noktası.

OBJ_RECTANGLE

Dikdörtgen

İki tutturma noktası.

OBJ_TRIANGLE

Üçgen

Üç tutturma noktası.

OBJ_ELLIPSE

Elips

Üç tutturma noktası.

OBJ_ARROW_THUMB_UP

İyi (Başparmak Yukarı)

Tek tutturma noktası.

OBJ_ARROW_THUMB_DOWN

Kötü (Başparmak Aşağı)

Tek tutturma noktası.

OBJ_ARROW_UP

Yukarı Ok

Tek tutturma noktası.

OBJ_ARROW_DOWN

Aşağı Ok

Tek tutturma noktası.

OBJ_ARROW_STOP

Dur (Stop) İşareti

Tek tutturma noktası.

OBJ_ARROW_CHECK

Kontrol İşareti

Tek tutturma noktası.

OBJ_ARROW_LEFT_PRICE

Sol Fiyat Etiketi

Tek tutturma noktası.

OBJ_ARROW_RIGHT_PRICE

Sağ Fiyat Etiketi

Tek tutturma noktası.

OBJ_ARROW_BUY

Alış Sinyali

Tek tutturma noktası.

OBJ_ARROW_SELL

Satış Sinyali

Tek tutturma noktası.

OBJ_ARROW

Ok

Tek tutturma noktası.

OBJ_TEXT

Metin

Tek tutturma noktası.

OBJ_LABEL

Etiket

Nesne konumu, OBJPROP_XDISTANCE ve OBJPROP_YDISTANCE özellikleri ile belirlenir.

OBJ_BUTTON

Düğme

Nesne konumu, OBJPROP_XDISTANCE ve OBJPROP_YDISTANCE özellikleri ile belirlenir.

OBJ_CHART

Çizelge

Nesne konumu, OBJPROP_XDISTANCE ve OBJPROP_YDISTANCE özellikleri ile belirlenir.

OBJ_BITMAP

Bitmap Etiketi

Tek tutturma noktası.

OBJ_BITMAP_LABEL

Bitmap Etiketi

Nesne konumu, OBJPROP_XDISTANCE ve OBJPROP_YDISTANCE özellikleri ile belirlenir.

OBJ_EDIT

Düzenle

Nesne konumu, OBJPROP_XDISTANCE ve OBJPROP_YDISTANCE özellikleri ile belirlenir.

OBJ_EVENT

Ekonomik takvimdeki bir olaya karşılık gelen "Olay" nesnesi

Tek tutturma noktası. Gerçekte, sadece zaman koordinatı kullanılır.

OBJ_RECTANGLE_LABEL

Özel grafiksel arayüzler oluşturmak ve tasarlamak için "Dikdörtgen Etiket" nesnesi.

Nesne konumu, OBJPROP_XDISTANCE ve OBJPROP_YDISTANCE özellikleri ile belirlenir.

Örnek:

#property copyright "Copyright 2025, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
 
#property script_show_inputs
 
#define   OBJ_NAME   "TestObjectCreate"            // nesne adı
#define   OBJ_X      40                            // nesnenin X koordinatı
#define   OBJ_Y      40                            // nesnenin Y koordinatı
#define   OBJ_WIDTH  300                           // nesne genişliği
#define   OBJ_HEIGHT 200                           // nesne yüksekliği
#define   WND        0                             // grafik alt penceresi
 
input ENUM_OBJECT InpObjectToCreate =  OBJ_VLINE;  /* Object type to create   */ // grafik üzerinde çizilecek nesne türü
 
struct SPoint                                      // çapa noktası yapısı
  {
   double   price;
   datetime time;
  };
 
SPoint   ExtAnchorPoints[5];                       // grafiksel nesnenin çapa noktalarının dizisi
long     ExtChartID;                               // kimlik
 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- mevcut çubuk sayısını kontrol et
   int bars=Bars(_Symbol,_Period);
   if(bars<7)
     {
      PrintFormat("The number of available bars (%d) is not enough to create some graphical objects",bars);
      return;
     }
//--- mevcut grafik kimliği
   ExtChartID=ChartID();
 
//--- önceden oluşturulmuş nesneyi sil
   ObjectDelete(ExtChartIDOBJ_NAME);
 
//--- beş çapa noktası belirle (zaman/fiyat)
   SetAnchorPointsData();
 
//--- çapa noktalarının fiyatı/zamanı
   datetime tm0=ExtAnchorPoints[0].time;
   double   pr0=ExtAnchorPoints[0].price;
   datetime tm1=ExtAnchorPoints[1].time;
   double   pr1=ExtAnchorPoints[1].price;
   datetime tm2=ExtAnchorPoints[2].time;
   double   pr2=ExtAnchorPoints[2].price;
   datetime tm3=ExtAnchorPoints[3].time;
   double   pr3=ExtAnchorPoints[3].price;
   datetime tm4=ExtAnchorPoints[4].time;
   double   pr4=ExtAnchorPoints[4].price;
   
//--- nesne başarıyla oluşturulduysa, kalan parametrelerini ayarla:
   if(ObjectCreate(ExtChartID,OBJ_NAME,InpObjectToCreate,WND,tm0,pr0,tm1,pr1,tm2,pr2,tm3,pr3,tm4,pr4))
     {
      //--- nesneyi seçilebilir hale getir ve seç
      ObjectSetInteger(ExtChartIDOBJ_NAMEOBJPROP_SELECTABLEtrue);
      ObjectSetInteger(ExtChartIDOBJ_NAMEOBJPROP_SELECTEDtrue);
      
      //--- grafik koordinatlarına göre konumlandırılmış nesneler için
      ENUM_OBJECT obj=InpObjectToCreate;
      if(obj==OBJ_LABEL || obj==OBJ_BUTTON || obj==OBJ_CHART || obj==OBJ_BITMAP_LABEL || obj==OBJ_EDIT || obj==OBJ_RECTANGLE_LABEL)
        {
         //--- nesne koordinatlarını ayarla
         ObjectSetInteger(ExtChartID,OBJ_NAME,OBJPROP_XDISTANCE,OBJ_X);
         ObjectSetInteger(ExtChartID,OBJ_NAME,OBJPROP_YDISTANCE,OBJ_Y);
         //--- nesne boyutunu ayarla
         ObjectSetInteger(ExtChartID,OBJ_NAME,OBJPROP_XSIZE,OBJ_WIDTH); 
         ObjectSetInteger(ExtChartID,OBJ_NAME,OBJPROP_YSIZE,OBJ_HEIGHT);
        }
      //--- değişiklikleri göstermek için grafiği güncelle
      ChartRedraw(ExtChartID);
     }
  }
//+------------------------------------------------------------------+
//| Nesne çapa noktaları dizisini doldur                             |
//+------------------------------------------------------------------+
void SetAnchorPointsData(void)
  {
//--- sol çapa noktası çubuğu (indeksi 0)
   int bar_first=(int)ChartGetInteger(ExtChartID,CHART_FIRST_VISIBLE_BAR)-1;
   
//--- ilk çapa noktasının (indeksi 0) fiyatını/zamanını ayarla
   ExtAnchorPoints[0].price=iOpen(_Symbol,_Period,bar_first);
   ExtAnchorPoints[0].time =iTime(_Symbol,_Period,bar_first);
   
//--- 1 - 3 indeksli çapa noktalarının fiyatını/zamanını ayarla
   int distance=(int)round(bar_first/4);  // çapa noktaları arasındaki çubuk cinsinden mesafe
   for(int i=1;i<4;i++)
     {
      ExtAnchorPoints[i].price=iOpen(_Symbol,_Period,bar_first-i*distance);
      ExtAnchorPoints[i].time =iTime(_Symbol,_Period,bar_first-i*distance);
     }
   
//--- son çapa noktasının (indeksi 4) fiyatını/zamanını ayarla
   ExtAnchorPoints[4].price=iOpen(_Symbol,_Period,1);
   ExtAnchorPoints[4].time =iTime(_Symbol,_Period,1);
  }