CopySpread

Seçilen sembol-periyot çifti için, geçmiş makas verilerini spread_array dizisine 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.

CopySpread

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  CopySpread(
   string           symbol_name,      // sembol ismi
   ENUM_TIMEFRAMES  timeframe,        // periyot
   int              start_pos,        // başlangıç konumu
   int              count,            // kopyalanacak veri miktarı
   int              spread_array[]    // makas değerleri için hedef dizi
   );

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

int  CopySpread(
   string           symbol_name,      // sembol ismi
   ENUM_TIMEFRAMES  timeframe,        // periyot
   datetime         start_time,       // başlangıç tarihi ve zamanı
   int              count,            // kopyalanacak veri miktarı
   int              spread_array[]    // makas değerleri için hedef dizi
   );

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

int  CopySpread(
   string           symbol_name,      // sembol ismi
   ENUM_TIMEFRAMES  timeframe,        // periyot
   datetime         start_time,       // başlangıç tarihi ve zamanı
   datetime         stop_time,        // bitiş tarihi ve zamanı
   int              spread_array[]    // makas değerleri için 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ı.

spread_array[]

[out] int 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 indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//---- plot Spread
#property indicator_label1  "Spread"
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- giriş parametreleri
input int      bars=3000;
//--- gösterge tamponları
double         SpreadBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- gösterge tamponlarının eşlenmesi
   SetIndexBuffer(0,SpreadBuffer,INDICATOR_DATA);
   IndicatorSetInteger(INDICATOR_DIGITS,0);
//---
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
//---
   if(prev_calculated==0)
     {
      int spread_int[];
      ArraySetAsSeries(spread_int,true);
      int spreads=CopySpread(Symbol(),0,0,bars,spread_int);
      Print("Şu kadar Makas verisi aldık: ",spreads);
      for (int i=0;i<spreads;i++) 
      {
      SpreadBuffer[rates_total-1-i]=spread_int[i];
      if(i<=30) Print("spread["+i+"] = ",spread_int[i]);
      }
     }
   else
     {
      double Ask,Bid;
      Ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
      Bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
      Comment("Ask = ",Ask,"  Bid = ",Bid);
      SpreadBuffer[rates_total-1]=(Ask-Bid)/Point();
     }
//--- bir sonraki çağrı için prev_calculated değerine dönüş yap
   return(rates_total);
  }

Tarihsel verinin istenmesine dair 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: