CopyHigh

Bu fonksiyon, seçilen sembol-periyot çifti için, geçmiş en yüksek fiyat verilerini high_array dizisinin içine belirtilen miktarda kopyalar. Elemanların sıralanma şeklinin şimdiden geçmişe doğru olduğu not edilmelidir, yani 0 başlangıç konumu mevcut çubuk anlamına gelecektir.

CopyHigh

Bilinmeyen miktardaki bir veriyi kopyalarken, hedef dizi olarak bir dinamik dizinin kullanılması önerilir. Çünkü istenen veri miktarı hedef dizinin büyüklüğünden azsa (veya fazlaysa), fonksiyon, verinin tam olarak uyması için yeni bellek tahsisi yapacaktır.

Eğer kopyalayacağınız verinin tam miktarını biliyorsanız, aşırı bellek tahsisini önlemek amacıyla statik olarak tahsis edilmiş bir tampon kullanmanız daha iyi olacaktır.

Hedef dizisinin erişim özelliğinin ne olduğu önem taşımaz - as_series=true veya as_series=false. Veri, en eski elemanın tahsis edilen fiziksel belleğin başlangıcında konumlanacağı şekilde yerleştirilir. Bu fonksiyonun 3 çağrı şekli bulunmaktadır.

İlk pozisyon ve istenen eleman sayısı ile çağrı

int  CopyHigh(
   string           symbol_name,      // sembol ismi
   ENUM_TIMEFRAMES  timeframe,        // periyot
   int              start_pos,        // başlangıç konumu
   int              count,            // kopyalanacak veri miktarı
   double           high_array[]      // hedef dizi
   );

Başlangıç tarihi ve istenen eleman sayısı ile çağrı

int  CopyHigh(
   string           symbol_name,      // sembol ismi
   ENUM_TIMEFRAMES  timeframe,        // periyot
   datetime         start_time,       // başlangıç tarihi ve zamanı
   int              count,            // kopyalanacak veri miktarı
   double           high_array[]      // hedef dizi
   );

İstene aralığın başlangıç ve bitiş tarihi ile çağrı

int  CopyHigh(
   string           symbol_name,      // sembol ismi
   ENUM_TIMEFRAMES  timeframe,        // periyot
   datetime         start_time,       // başlangıç tarihi ve zamanı
   datetime         stop_time,        // bitiş tarihi ve zamanı
   double           high_array[]      // hedef dizi
   );

Parametreler

symbol_name

[in]  Sembol ismi.

timeframe

[in]  Periyot.

start_pos

[in]  Kopyalanacak ilk eleman için başlangıç konumu.

count

[in]  Kopyalanacak veri miktarı.

start_time

[in]  Kopyalanacak ilk eleman için başlangıç zamanı.

stop_time

[in]  Kopyalanacak son elemana karşılık gelen çubuğun zamanı.

high_array[]

[out] double tipli dizi.

Dönüş değeri

Kopyalanan veri sayısına veya hata durumunda -1 değerine dönüş yapar.

Not

İstenen veri aralığı sunucuda bulunan mevcut veri aralığının dışındaysa, fonksiyon -1 dönüşü yapar. Eğer istenen veri miktarı TERMINAL_MAXBARS değerinin üstündeyse (çizelgedeki maksimum çubuk sayısı), fonksiyon yine -1 dönüşü yapacaktır.

Bir göstergeden veri istenirken, istenen zaman-serisi henüz kurulmamışsa veya sunucudan yüklenmemişse, fonksiyon hemen -1 dönüşü yapacaktır ve yükleme/kurma işlemi başlatılacaktır.

Bir Uzman Danışmandan veya bir scriptten veri istenirken, istenen veri terminalde yerel olarak bulunmuyorsa sunucudan yükleme işlemi başlatılacaktır, eğer veri kurulu durumdaysa ama hazır değilse, o zaman serinin kurulumuna başlanacaktır. Varsayılan zaman-aşımı süresi geçildiğinde, fonksiyon hazır olan verinin miktarına dönüş yapacaktır ama geçmiş yüklemesi devam edecektir ve bir sonraki benzer istekte, fonksiyon daha fazla veri dönüşü yapacaktır.

Başlangıç tarihi ve istenen veri miktarını kullanarak bir istek gerçekleştirildiğinde, sadece belirtilen tarihe eşit veya ondan daha önceki verilerin dönüşü yapılacaktır. Yani, değerine dönüş yapılacak herhangi bir çubuğun açılış zamanı (hacim, makas, gösterge tamponuna dair bir değer, OHLC fiyatları ve Time açılış zamanı), her zaman belirtilenden az veya belirtilene eşit olacaktır.

Belirtilen tarih aralığındaki bir veri istendiğinde, sadece bu aralıktaki verilere dönüş yapılır. Zaman aralığı ayarlanır ve saniyeye kadar sayılır. Yani, değerine dönüş yapılacak herhangi bir çubuğun açılış zamanı (hacim, makas, gösterge tamponuna dair bir değer, OHLC fiyatları ve Time açılış zamanı), her zaman istenilen aralık içindedir.

Bu şekilde, start_time=Last_Tuesday ve stop_time=Last_Friday aralığındaki bir haftalık verinin kopyalanması isteniyorsa ve mevcut gün cumartesi ise, fonksiyon 0 dönüşü yapacaktır. Çünkü bir haftalık zaman aralığında açılış günü her zaman Pazar günüdür ve bir haftalık çubuk belirtilen aralığa düşmez.

Eğer tamamlanmamış mevcut çubuğun verisine dönüş yaptırmak istiyorsanız, start_pos=0 ve count=1 değerlerini ilk çağrı versiyonunda kullanabilirsiniz.

Örnek:

#property copyright "2009, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
 
#property description "High[i] ve Low[i] çıktılarının alınmasına dair bir örnek"
#property description "seçilen rassal çubuklar için alınmasına dair bir örnek"
 
double High[],Low[];
//+------------------------------------------------------------------+
//| Belirtilen çubuk indisi için Low fiyatını al                     |
//+------------------------------------------------------------------+
double iLow(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   double low=0;
   ArraySetAsSeries(Low,true);
   int copied=CopyLow(symbol,timeframe,0,Bars(symbol,timeframe),Low);
   if(copied>0 && index<copied) low=Low[index];
   return(low);
  }
//+------------------------------------------------------------------+
//| Belirtilen çubuk indisi için High fiyatını al                    |
//+------------------------------------------------------------------+
double iHigh(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   double high=0;
   ArraySetAsSeries(High,true);
   int copied=CopyHigh(symbol,timeframe,0,Bars(symbol,timeframe),High);
   if(copied>0 && index<copied) high=High[index];
   return(high);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- Her tikle birlikte çubuk indisine göre High ve Low değerlerini çıktılarız,
//--- bu, tikin ulaştığı saniyeye eşittir
   datetime t=TimeCurrent();
   int sec=t%60;
   printf("High[%d] = %G  Low[%d] = %G",
          sec,iHigh(Symbol(),0,sec),
          sec,iLow(Symbol(),0,sec));
  }

Tarihsel veri istemiyle ilgili detaylı bir örnek için Nesne Bağlama Yöntemleri bölümüne bakınız. Söz konusu örnekte iFractals göstergesinden son 1000 alınması ve son 10 yukarı/aşağı fraktalin çizelge üzerine çizilmesi gösterilmektedir. Benzer bir teknik, eksik veriye sahip olan ve genellikle aşağıda belirtilen stillerle çizilen tüm göstergelerde kullanılabilir: