Funkcje tablicowe:   ArrayCopyRates()

Funkcja int ArrayCopyRates() kopiuje do tablicy wartości świec dla odpowiedniego instrumentu finansowego i przedziału czasowego. Zwraca ilość skopiowanych świec. Więcej informacji można znaleźć w specyfikacji MQL4.


Przykład 1

Przykład skryptu, gdzie ArrayCopyRates() kopiuje dane świec do tablicy ratesArray[] typu MqlRates dla bieżącego instrumentu finansowego _Symbol i bieżącego przedziału czasowego PERIOD_CURRENT . W takim układzie ma miejsce kopiowanie wirtualne, co znaczy że jeśli pojawi się nowa świeca to ponowne kopiowanie nie jest potrzebne, ponieważ tablica ratesArray[] zawsze będzie wskazywała na aktualne dane.

#property strict
void OnStart()
  {
//---
   MqlRates        ratesArray[];    /* jednowymiarowa tablica dynamiczna,
                                       do której zostaną skopiowane dane */

   string          symbolName = _Symbol;        // bieżący instrument finansowy
   ENUM_TIMEFRAMES timeFrame  = PERIOD_CURRENT; // bieżący przedział czasowy

//--- sprawdzic czy skrypt uruchomiono na M1
   if(Period() != PERIOD_M1)
     {
      Print("Proszę uruchomić skrypt na M1.");
      return;
     }

//--- skopiować dane
   ArrayCopyRates(ratesArray, symbolName, timeFrame);

//--- wyświetlić wynik
   Print("1) Świeca z indeksem 1:");
   Print("1) time = ",       ratesArray[1].time,
         ", open = ",        ratesArray[1].open,
         ", high = ",        ratesArray[1].high,
         ", low = ",         ratesArray[1].low,
         ", close = ",       ratesArray[1].close,
         ", ticks volume = ",ratesArray[1].tick_volume);

//--- uśpić skrypt na 120 sekund, aby pojawiła się nowa świeca M1
   Sleep(120000);
//--- odświeżyć notowania
   RefreshRates();

//--- wyświetlić wynik bez ponownego kopiowania ArrayCopyRates()
   Print("2) Świeca z indeksem 1 bez ponownego kopiowania ArrayCopyRates():");
   Print("2) time = ",       ratesArray[1].time,
         ", open = ",        ratesArray[1].open,
         ", high = ",        ratesArray[1].high,
         ", low = ",         ratesArray[1].low,
         ", close = ",       ratesArray[1].close,
         ", ticks volume = ",ratesArray[1].tick_volume);
  }

Rys. 1. Przykład stosowania funkcji ArrayCopyRates().


Przykład 2

Przykład skryptu, gdzie ArrayCopyRates() kopiuje dane świec do dwuwymiarowej tablicy ratesArray[][6]. W takim układzie ma miejsce kopiowanie rzeczywiste, co znaczy że jeśli pojawi się nowa świeca to bez ponownego kopiowania tablica będzie wskazywała już na przestarzałe dane.

Pierwszy wymiar tablicy będzie zawierał indeksy tablicy. Drugi wymiar ma 6 elementów z następującymi wartościami:

  • 0 - czas otwarcia świecy (time),
  • 1 - cena otwarcia (open),
  • 2 - najniższa cena (low),
  • 3 - najwyższa cena (high),
  • 4 - cena zamknięcia (close),
  • 5 - wolumen tick-owy (volume).
#property strict
void OnStart()
  {
//---
   double          dstArray[][6]; /* dwuwymiarowa tablica,
                                     do której zostaną skopiowane dane,
                                     pierwszy wymiar dynamiczny
                                     drugi ma wymiar = 6 */

   string          symbolName = _Symbol;        // bieżący instrument finansowy
   ENUM_TIMEFRAMES timeFrame  = PERIOD_CURRENT; // bieżący przedział czasowy

//--- sprawdzić czy skrypt uruchomiono na M1
   if(Period() != PERIOD_M1)
     {
      Print("Proszę uruchomić skrypt na M1.");
      return;
     }

//--- skopiować dane
   ArrayCopyRates(dstArray, symbolName, timeFrame);

//--- wyświetlić wynik
   Print("1) Świeca z indeksem 1:");
   Print("1) time = ",  (datetime)dstArray[1][0],
         ", open = ",             dstArray[1][1],
         ", high = ",             dstArray[1][3],
         ", low = ",              dstArray[1][2],
         ", close = ",            dstArray[1][4],
         ", ticks volume = ",(int)dstArray[1][5]);

//--- uśpić skrypt na 120 sekund, aby pojawiła się nowa świeca M1
   Sleep(120000);
//--- odświeżyć notowania
   RefreshRates();

//--- wyświetlić wynik bez ponownego kopiowania ArrayCopyRates()
   Print("2) Świeca z indeksem 1 bez ponownego kopiowania ArrayCopyRates():");
   Print("2) time = ",  (datetime)dstArray[1][0],
         ", open = ",             dstArray[1][1],
         ", high = ",             dstArray[1][3],
         ", low = ",              dstArray[1][2],
         ", close = ",            dstArray[1][4],
         ", ticks volume = ",(int)dstArray[1][5]);
  }

Rys. 2. Przykład stosowania funkcji ArrayCopyRates().