Funkcje MQL4-Funkcje operujące na tablicach-Array Copy Series w Forex-Słownik poleceń MQL4 - bossa.pl
2017.10.18, godz. 09:27

ArrayCopySeries

Funkcja kopiuje jedną z serii danych z typu OHLC w drugą tablicę serii danych. Zwracana wartość to ilość skopiowanych elementów lub -1 jeśli błąd kopiowania.

W rzeczywistość dane tablicowe nie są kopiowane w dwa różne obszary pamięci (nie jest alokowane nowe miejsce w pamięci) tylko są reprezentowane jako pojedynczy wskaźnik na początek pamięci przechowującej dane tablicowe.
Jeśli podany zakres czasowy nie odpowiada ilości danych dostępnych na aktualnym wykresie to nastąpi próba pobrania brakujących danych z serwera i jednocześnie wygenerowany zostanie błąd typu ERR_HISTORY_WILL_UPDATED (4066 – brak wymaganych danych w historii wykresu) oraz ustawiona zmienna last_error. Po wystąpieniu takiego błędu należy ponownie wywołać funkcję ArrayCopySeries().

Uwaga! Jeśli series_index jest MODE_TIME tablica, która ma zostać przekazana do funkcji, musi być typu datetime.


Składnia

int ArrayCopySeries( double & array[], int series_index, string
symbol=NULL, int timeframe=0)
Parametry:
array[] – adres tablicy do skopiowania
series_index – indeks, identyfikator serii danych do skopiowania
symbol – symbol rynku którego dane będą kopiowane
timeframe – zakres czasowy kopiowanych danych
Wartość zwracana:
Ilość skopiowanych elementów tablicy, serii

Przykład:

datetime daytimes[];
int shift=10,dayshift,error;
//---- the Time[] array was sroted in the descending order
ArrayCopySeries(daytimes,MODE_TIME,Symbol(),PERIOD_D1);
error=GetLastError();
if(error==4066)
{
//---- make two more attempts to read
for(int i=0;i<2; i++)
{
Sleep(5000);
ArrayCopySeries(daytimes,MODE_TIME,Symbol(),PERIOD_D1);
//---- check the current daily bar time
datetime last_day=daytimes[0];
if(Year()==TimeYear(last_day) && Month()==TimeMonth(last_day) &&
Day()==TimeDay(last_day)) break;
}
}
if(Time[shift]>=daytimes[0]) dayshift=0;
else
{
dayshift=ArrayBsearch(daytimes,Time[shift],WHOLE_ARRAY,0,MODE_DESCEND);
if(Period()<PERIOD_D1) dayshift++;
}
Print(TimeToStr(Time[shift])," corresponds to ",dayshift," day bar opened
at ", TimeToStr(daytimes[dayshift]));
bos bank logo
Grupa kapitałowa
Nagroda specjalna i tytuł BROKERA ROKU 2015
Nagroda specjalna i tytuł BROKERA
ROKU 2015, przyznane przez GPW.

logo_FMR2017aktualny.jpg Finansowa Marka Roku: wyrazista marka promująca edukację, umocnienie pozycji lidera rynku kontraktów terminowych.

nagroda najlepszy dom maklerski 2015
Najwyższa ocena dla DM BOŚ w ankiecie czytelników Gazety Giełdy Parkiet 2015r.