OBJ_ARROW

Ok nesnesi.

ObjArrow

Not

Nesneye göre tutturma noktası konumu ENUM_ARROW_ANCHOR sayımından seçilebilir.

MetaEditor'de bir kod yazarken büyük oklar (5'ten büyük), sadece uygun OBJPROP_WIDTH özellik değerini ayarlayarak oluşturulabilir.

Gerekli ok tipi Wingdings yazı tipinin sembol kodlarından birinin ayarlanmasıyla seçilebilir.

Örnek

Aşağıdaki script, Ok nesnesini oluşturur ve onu çizelge üzerinde taşır. Grafiksel nesne özelliklerini oluşturmak ve değiştirmek için özel fonksiyonlar geliştirilmiştir. Bu fonksiyonları kendi uygulamalarınızda da "aynı şekilde" kullanabilirsiniz.

 

//--- açıklama
#property description "Script, çizelge üzerinde bir rassal ok nesnesi oluşturur."
#property description "tutturma noktası koordinatları, çizelge penceresi"
#property description "boyutunun yüzdesi şeklinde ayarlanır."
//--- betiğin çalıştırılması sırasında giriş parametreleri penceresini göster
#property script_show_inputs
//--- betiğin giriş parametreleri
input string            InpName="Arrow";        // Ok ismi
input int               InpDate=50;             // % şeklinde tutturma (çapa) noktası tarihi
input int               InpPrice=50;            // % şeklinde tutturma noktası fiyatı
input ENUM_ARROW_ANCHOR InpAnchor=ANCHOR_TOP;   // Çapa tipi
input color             InpColor=clrDodgerBlue// Ok rengi
input ENUM_LINE_STYLE   InpStyle=STYLE_SOLID;   // Kenar çizgisi stili
input int               InpWidth=10;            // Ok boyutu
input bool              InpBack=false;          // Ok arka-planda
input bool              InpSelection=false;     // Taşıma için vurgula
input bool              InpHidden=true;         // Nesne listesinde gizle
input long              InpZOrder=0;            // Fare tıklaması önceliği
//+------------------------------------------------------------------+
//| Oku oluştur                                                      |
//+------------------------------------------------------------------+
bool ArrowCreate(const long              chart_ID=0,           // çizelge kimliği
                 const string            name="Arrow",         // ok ismi
                 const int               sub_window=0,         // alt-pencere indisi
                 datetime                time=0,               // tutturma (çapa) noktası zamanı
                 double                  price=0,              // tutturma noktası fiyatı
                 const uchar             arrow_code=252,       // ok kodu
                 const ENUM_ARROW_ANCHOR anchor=ANCHOR_BOTTOM// tutturma noktası konumu
                 const color             clr=clrRed,           // ok rengi
                 const ENUM_LINE_STYLE   style=STYLE_SOLID,    // kenar çizgisi stili
                 const int               width=3,              // ok boyutu
                 const bool              back=false,           // arka-planda
                 const bool              selection=true,       // taşıma için vurgula
                 const bool              hidden=true,          // nesne listesinde gizle
                 const long              z_order=0)            // fare tıklaması için öncelik
  {
//--- ayarlanmamışsa, tutturma noktası koordinatlarını ayarla
   ChangeArrowEmptyPoint(time,price);
//--- hata değerini sıfırla
   ResetLastError();
//--- bir ok oluştur
   if(!ObjectCreate(chart_ID,name,OBJ_ARROW,sub_window,time,price))
     {
      Print(__FUNCTION__,
            ": okun oluşturulması başarısız! Hata kodu = ",GetLastError());
      return(false);
     }
//--- ok kodunu ayarla
   ObjectSetInteger(chart_ID,name,OBJPROP_ARROWCODE,arrow_code);
//--- tutturma noktası tipini ayarla
   ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
//--- ok rengini ayarla
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- kenar çizgi stilini ayarla
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- ok boyutunu ayarla
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- ön-planda (false) veya arkaplanda (true) göster
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- oku fare ile taşıma modunu etkinleştir (true) veya devre dışı bırak (false)
//--- ObjectCreate fonksiyonu ile bir nesne oluşturulurken,
//--- nesne ön tanımlı olarak vurgulanamaz veya taşınamaz. Bu yöntemin içinde, parametre için ön tanımlı olarak 'true' değerinin
//--- seçilmesi, nesnenin vurgulanmasını ve taşınmasını mümkün kılar
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- nesne listesinde grafiksel nesnenin adını sakla (true) veya göster (false)
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- çizelge üzerinde fare tıklaması olayının alınması için özellik ayarla
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- başarılı çalıştırma
   return(true);
  }
//+------------------------------------------------------------------+
//| Tutturma noktasını taşı                                          |
//+------------------------------------------------------------------+
bool ArrowMove(const long   chart_ID=0,   // çizelge kimliği
               const string name="Arrow"// nesne ismi
               datetime     time=0,       // tutturma noktası zaman koordinatı
               double       price=0)      // tutturma noktası fiyat koordinatı
  {
//--- noktanın pozisyonu belirlenmemişse, noktayı Bid (alış) fiyatı olan mevcut çubuğa taşı
   if(!time)
      time=TimeCurrent();
   if(!price)
      price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- hata değerini sıfırla
   ResetLastError();
//--- tutturma noktasını taşı
   if(!ObjectMove(chart_ID,name,0,time,price))
     {
      Print(__FUNCTION__,
            ": tutturma noktasının taşınması başarısız! Hata kodu = ",GetLastError());
      return(false);
     }
//--- başarılı çalıştırma
   return(true);
  }
//+------------------------------------------------------------------+
//| Ok kodunu değiştir                                               |
//+------------------------------------------------------------------+
bool ArrowCodeChange(const long   chart_ID=0,   // çizelge kimliği
                     const string name="Arrow"// nesne ismi
                     const uchar  code=252)     // ok kodu
  {
//--- hata değerini sıfırla
   ResetLastError();
//--- ok kodunu değiştir
   if(!ObjectSetInteger(chart_ID,name,OBJPROP_ARROWCODE,code))
     {
      Print(__FUNCTION__,
            ": ok kodunun değiştirilmesi başarısız! Hata kodu = ",GetLastError());
      return(false);
     }
//--- başarılı çalıştırma
   return(true);
  }
//+------------------------------------------------------------------+
//| Çapa tipini değiştir                                             |
//+------------------------------------------------------------------+
bool ArrowAnchorChange(const long              chart_ID=0,        // çizelge kimliği
                       const string            name="Arrow",      // nesne ismi
                       const ENUM_ARROW_ANCHOR anchor=ANCHOR_TOP// çapa tipi
  {
//--- hata değerini sıfırla
   ResetLastError();
//--- tutturma noktası tipini değiştir
   if(!ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor))
     {
      Print(__FUNCTION__,
            ": tutturma noktası tipinin değiştirilmesi başarısız oldu! Hata kodu = ",GetLastError());
      return(false);
     }
//--- başarılı çalıştırma
   return(true);
  }
//+------------------------------------------------------------------+
//| Oku sil                                                          |
//+------------------------------------------------------------------+
bool ArrowDelete(const long   chart_ID=0,   // çizelge kimliği
                 const string name="Arrow"// ok ismi
  {
//--- hata değerini sıfırla
   ResetLastError();
//--- oku sil
   if(!ObjectDelete(chart_ID,name))
     {
      Print(__FUNCTION__,
            ": okun silinmesi başarısız! Hata kodu = ",GetLastError());
      return(false);
     }
//--- başarılı çalıştırma
   return(true);
  }
//+------------------------------------------------------------------+
//| Tutturma noktası değerlerini kontrol et ve                       |
//| boş olanlar için varsayılan değerleri ayarla                     |
//+------------------------------------------------------------------+
void ChangeArrowEmptyPoint(datetime &time,double &price)
  {
//--- noktanın zamanı ayarlanmamışsa, mevcut çubuk üzerinde olacak
   if(!time)
      time=TimeCurrent();
//--- noktanın fiyatı ayarlanmamışsa, Bid değerini alacak
   if(!price)
      price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- giriş parametrelerinin doğruluğunu kontrol et
   if(InpDate<0 || InpDate>100 || InpPrice<0 || InpPrice>100)
     {
      Print("Hata! Hatalı giriş parametresi değerleri!");
      return;
     }
//--- çizelge penceresindeki görünür çubukların sayısı
   int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- fiyat dizisi büyüklüğü
   int accuracy=1000;
//--- nesnenin tutturma noktası konumunu değiştirmek için kullanılacak
//--- tarih ve fiyat değerlerinin saklanacağı diziler
   datetime date[];
   double   price[];
//--- bellek tahsisi
   ArrayResize(date,bars);
   ArrayResize(price,accuracy);
//--- tarih dizisini doldur
   ResetLastError();
   if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
     {
      Print("Zaman değerlerinin kopyalanması başarısız oldu! Hata kodu = ",GetLastError());
      return;
     }
//--- fiyat dizisini değerlerle doldur
//--- çizelgedeki en yüksek ve en düşük değerleri bul
   double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
   double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- fiyatlar için bir değişim birimini tanımla ve diziyi doldur
   double step=(max_price-min_price)/accuracy;
   for(int i=0;i<accuracy;i++)
      price[i]=min_price+i*step;
//--- okun çizileceği noktaları tanımla
   int d=InpDate*(bars-1)/100;
   int p=InpPrice*(accuracy-1)/100;
//--- çizelge üzerinde bir ok oluştur
   if(!ArrowCreate(0,InpName,0,date[d],price[p],32,InpAnchor,InpColor,
      InpStyle,InpWidth,InpBack,InpSelection,InpHidden,InpZOrder))
     {
      return;
     }
//--- çizelgeyi yeniden çiz
   ChartRedraw();
//--- döngü içinde tüm ok oluşturma durumlarını göz önüne al
   for(int i=33;i<256;i++)
     {
      if(!ArrowCodeChange(0,InpName,(uchar)i))
         return;
      //--- script işlemi devre dışı bırakıldı mı kontrol et
      if(IsStopped())
         return;
      //--- çizelgeyi yenile
      ChartRedraw();
      // yarım saniyelik gecikme
      Sleep(500);
     }
//--- 1 saniyelik gecikme
   Sleep(1000);
//--- oku çizelgeden sil
   ArrowDelete(0,InpName);
   ChartRedraw();
//--- 1 saniyelik gecikme
   Sleep(1000);
//---
  }