CopyRates

Belirtilen sembol, zaman dilimi ve veri miktarı için MqlRates yapısından matrise veya vektöre geçmiş seriler alır. Elemanlar şimdiki zamandan geçmişe doğru sayılır, yani 0'a eşit başlangıç konumu mevcut çubuk anlamına gelir.

Veriler, en eski eleman matrisin/vektörün başına gelecek şekilde kopyalanır. Fonksiyonun üç seçeneği vardır.

Başlangıç konumuna ve gerekli eleman sayısına göre erişim

bool  CopyRates(
   string           symbol,       // sembol adı
   ENUM_TIMEFRAMES  period,       // zaman dilimi
   ulong            rates_mask,   // istenen serileri belirtmek için bayrak kombinasyonu
   ulong            start,        // kopyalamanın başlayacağı başlangıç çubuğunun indeksi
   ulong            count         // kopyalanacak veri miktarı
   );

Başlangıç tarihine ve gerekli eleman sayısına göre erişim

bool  CopyRates(
   string           symbol,       // sembol adı
   ENUM_TIMEFRAMES  period,       // zaman dilimi
   ulong            rates_mask,   // istenen serileri belirtmek için bayrak kombinasyonu
   datetime         from,         // başlangıç tarihi
   ulong            count         // kopyalanacak veri miktarı
   );

Gerekli tarih aralığının başlangıç ve bitiş tarihlerine göre erişim

bool  CopyRates(
   string           symbol,       // sembol adı
   ENUM_TIMEFRAMES  period,       // zaman dilimi
   ulong            rates_mask,   // istenen serileri belirtmek için bayrak kombinasyonu
   datetime         from,         // başlangıç tarihi
   datetime         to            // bitiş tarihi
   );

Parametreler

symbol

[in]  Sembol.

period

[in]  Zaman dilimi.

rates_mask

[in]  ENUM_COPY_RATES numaralandırmasından, istenen serilerin türünü belirten bayrak kombinasyonu. Verileri vektöre kopyalarken, ENUM_COPY_RATES numaralandırmasından yalnızca bir değer belirtilebilir, aksi takdirde hata meydana gelecektir.

start

[in]  Kopyalanacak ilk elemanın indeksi.

count

[in]  Kopyalanacak eleman sayısı.

from

[in]  İlk elemana karşılık gelen çubuk zamanı.

to

[in]  Son elemana karşılık gelen çubuk zamanı.

Geri dönüş değeri

Başarılı olursa true, hata olması durumunda false geri döndürür.

Not

Talep edilen veri aralığı sunucuda bulunan verileri aşıyorsa, fonksiyon false geri döndürür. Talep edilen veri aralığı TERMINAL_MAXBARS'ı (grafikteki maksimum çubuk sayısı) aşıyorsa, fonksiyon yine false geri döndürür.

Uzman Danışmandan veya komut dosyasından veri talep edilirken, terminalde yerel olarak ilgili veriler yoksa, sunucudan indirme işlemi başlatılır ve bu süreçte yerel geçmişten oluşturulabiliyorsa gerekli seriler oluşturulur. Fonksiyon, zaman aşımı süresi dolduğunda hazır olan veri miktarını geri döndürür, ancak geçmişin indirilme işlemi halen devam eder, böylece bir sonraki benzer talepte daha fazla veri geri döndürülür.

Başlangıç tarihine ve gerekli eleman sayısına göre veri talep edilirken, yalnızca belirtilen tarihe eşit veya bu tarihten önceki veriler geri döndürülür. Veri aralığı saniye hassasiyetiyle ayarlanır. Başka bir deyişle, değerin (hacim, makas, Açılış, Yüksek, Düşük, Kapanış veya Zaman) geri döndürüldüğü herhangi bir çubuğun açılış tarihi her zaman belirtilen tarihe eşit veya bu tarihten öncedir.

Belirli tarih aralığındaki veriler talep edilirken, yalnızca istenen aralıktaki veriler geri döndürülür. Veri aralığı saniye hassasiyetiyle ayarlanır. Başka bir deyişle, değerin (hacim, makas, Açılış, Yüksek, Düşük, Kapanış veya Zaman) geri döndürüldüğü herhangi bir çubuğun açılış tarihi her zaman istenen aralıkta bulunur.

Örneğin, haftanın mevcut günü Cumartesi ise, start_time=last_tuesday ve stop_time=last_friday ayarıyla haftalık zaman diliminde veri kopyalamaya çalışırken fonksiyon 0 geri döndürecektir, çünkü haftalık zaman diliminin açılış zamanı her zaman pazar gününe denk gelir ve dolayısıyla istenen aralığa hiçbir haftalık çubuk girmemektedir.

Mevcut tamamlanmamış çubuktan bir değer almanız gerekiyorsa, start_pos=0 ve count=1 ile ilk çağrı formunu kullanabilirsiniz.

ENUM_COPY_RATES

ENUM_COPY_RATES numaralandırması, matrise veya diziye aktarılacak verilerin türünü belirtmek için bayraklar içerir. Bayrak kombinasyonu, geçmişten birkaç serinin tek bir talepte alınmasına olanak tanır. Matristeki satırların sırası, ENUM_COPY_RATES numaralandırmasındaki değerlerin sırasına karşılık gelecektir. Diğer bir deyişle, Yüksek verileri içeren satır matriste her zaman Düşük verileri içeren satırdan daha yukarıda olacaktır.

Kimlik

Değer

Açıklama

COPY_RATES_OPEN

1

Açılış fiyatı serisi

COPY_RATES_HIGH

2

Yüksek fiyatı serisi

COPY_RATES_LOW

4

Düşük fiyatı serisi

COPY_RATES_CLOSE

8

Kapanış fiyatı serisi

COPY_RATES_TIME

16

Zaman serisi (çubuk açılış zamanı)

 

Zaman serisinin float türündeki vektörlere ve matrislere (vectorf ve matrixf) alınması, float türünün hassasiyeti ciddi bir şekilde sınırlı olduğundan ve 1<<24'ten büyük int türü değerler float türünde doğru bir şekilde temsil edilemediğinden ~100 saniyelik kayıplara neden olur.

COPY_RATES_VOLUME_TICK

32

Tik hacim serisi

COPY_RATES_VOLUME_REAL

64

Gerçek hacim serisi

COPY_RATES_SPREAD

128

Makas serisi

Kombinasyon

 

 

COPY_RATES_OHLC

15

Açılış, Yüksek, Düşük ve Kapanış serileri

COPY_RATES_OHLCT

31

Açılış, Yüksek, Düşük, Kapanış ve Zaman serileri

Veri düzenlemesi

 

 

COPY_RATES_VERTICAL

32768

Seriler dikey eksen boyunca matrise kopyalanır. Alınan seri değerleri matriste dikey olarak düzenlenecektir, yani en eski veriler ilk satırda yer alırken, en yeni veriler son matris satırında yer alacaktır.

 

Varsayılan kopyalama ile seriler yatay eksen boyunca matrise eklenir.

 

Bayrak yalnızca bir matrise kopyalama yapılırken geçerlidir.

Örnek:

//+------------------------------------------------------------------+
//| Komut dosyası başlatma fonksiyonu                                |
//+------------------------------------------------------------------+
void OnStart()
 {
//--- matrise fiyatlar al
  matrix matrix_rates;
  if(matrix_rates.CopyRates(Symbol(), PERIOD_CURRENTCOPY_RATES_OHLCT110))
    Print("matrix rates: \n"matrix_rates);
  else
    Print("matrix_rates.CopyRates failed. Hata ",GetLastError());
//--- kontrol et
  MqlRates mql_rates[];
  if(CopyRates(Symbol(), PERIOD_CURRENT110mql_rates)>0)
   {
    Print("mql_rates array:");
    ArrayPrint(mql_rates);
   }
  else
    Print("CopyRates(Symbol(), PERIOD_CURRENT,1, 10, mql_rates). Hata ",GetLastError());
//--- vektöre fiyatlar al = geçersiz çağrı
  vector vector_rates;
  if(vector_rates.CopyRates(Symbol(), PERIOD_CURRENTCOPY_RATES_OHLC115))
    Print("vector_rates COPY_RATES_OHLC: \n"vector_rates);
  else
    Print("vector_rates.CopyRates COPY_RATES_OHLC failed. Hata ",GetLastError());
//--- vektöre kapanış fiyatları al
  if(vector_rates.CopyRates(Symbol(), PERIOD_CURRENTCOPY_RATES_CLOSE115))
    Print("vector_rates COPY_RATES_CLOSE: \n"vector_rates);
  else
    Print("vector_rates.CopyRates failed. Hata ",GetLastError());
 };
/*
   matrix rates:
   [[0.99686,0.99638,0.99588,0.99441,0.99464,0.99594,0.99698,0.99758,0.99581,0.9952800000000001]
    [0.99708,0.99643,0.99591,0.9955000000000001,0.99652,0.99795,0.99865,0.99764,0.99604,0.9957]
    [0.9961100000000001,0.99491,0.99426,0.99441,0.99448,0.99494,0.9964499999999999,0.99472,0.9936,0.9922]
    [0.99641,0.99588,0.99441,0.99464,0.99594,0.99697,0.99758,0.99581,0.9952800000000001,0.99259]
    [1662436800,1662440400,1662444000,1662447600,1662451200,1662454800,1662458400,1662462000,1662465600,1662469200]]
   mql_rates array:
                    [time]  [open]  [high]   [low] [close] [tick_volume] [spread] [real_volume]
   [02022.09.06 04:00:00 0.99686 0.99708 0.99611 0.99641          4463        0             0
   [12022.09.06 05:00:00 0.99638 0.99643 0.99491 0.99588          4519        0             0
   [22022.09.06 06:00:00 0.99588 0.99591 0.99426 0.99441          3060        0             0
   [32022.09.06 07:00:00 0.99441 0.99550 0.99441 0.99464          3867        0             0
   [42022.09.06 08:00:00 0.99464 0.99652 0.99448 0.99594          5280        0             0
   [52022.09.06 09:00:00 0.99594 0.99795 0.99494 0.99697          7227        0             0
   [62022.09.06 10:00:00 0.99698 0.99865 0.99645 0.99758         10130        0             0
   [72022.09.06 11:00:00 0.99758 0.99764 0.99472 0.99581          7012        0             0
   [82022.09.06 12:00:00 0.99581 0.99604 0.99360 0.99528          6166        0             0
   [92022.09.06 13:00:00 0.99528 0.99570 0.99220 0.99259          6950        0             0
   vector_rates.CopyRates COPY_RATES_OHLC failedError 4003
   vector_rates COPY_RATES_CLOSE:
   [0.9931,0.99293,0.99417,0.99504,0.9968399999999999,0.99641,0.99588,0.99441,0.99464,0.99594,0.99697,0.99758,0.99581,0.9952800000000001,0.99259]
*/

Ayrıca bakınız

Zaman Serilerine ve Göstergelere Erişim, CopyRates