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 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 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:
#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().