Close[], High[], Time[] — z MQL4 na MQL5
Tablice Close, Open, High, Low i Time zniknęły. Zastąpiły je funkcje iClose oraz kopiowanie do własnej tablicy przez CopyRates.
3 fragmenty kodu z tej strony przeszły przez kompilator MetaEditor build 6090, 2026-08-05.
Stara postać
double zamkniecie = Close[1];
double maksimum = High[0];
datetime kiedy = Time[1];Tablice były zawsze dostępne, bez deklarowania czegokolwiek. W MQL5 ich nie ma i to jest jeden z pierwszych błędów kompilacji przy przepisywaniu kodu: 'Close' - undeclared identifier.
Nowa postać: pojedyncza wartość
Najprostszy odpowiednik to funkcje z rodziny iClose:
double zamkniecie = iClose(_Symbol, _Period, 1);
double maksimum = iHigh(_Symbol, _Period, 0);
datetime kiedy = iTime(_Symbol, _Period, 1);Sygnatura jest zawsze taka sama: symbol, okres, numer świecy. Zero to świeca w budowie, jedynka ostatnia domknięta.
| MQL4 | MQL5 |
|---|---|
Close[i] | iClose(_Symbol, _Period, i) |
Open[i] | iOpen(_Symbol, _Period, i) |
High[i] | iHigh(_Symbol, _Period, i) |
Low[i] | iLow(_Symbol, _Period, i) |
Time[i] | iTime(_Symbol, _Period, i) |
Volume[i] | iVolume(_Symbol, _Period, i) |
Bars | Bars(_Symbol, _Period) |
Nowa postać: wiele wartości naraz
Wywoływanie iClose w pętli po stu świecach jest wolne — każde wywołanie odpytuje terminal osobno. Gdy potrzebujesz wielu wartości, kopiuj je hurtem:
MqlRates swiece[];
ArraySetAsSeries(swiece, true);
int skopiowane = CopyRates(_Symbol, _Period, 0, 100, swiece);
if(skopiowane < 100)
{
PrintFormat("Skopiowano tylko %d świec, błąd %d", skopiowane, GetLastError());
return;
}
double zamkniecie = swiece[1].close;
double maksimum = swiece[1].high;
datetime kiedy = swiece[1].time;Struktura MqlRates zawiera komplet: time, open, high, low, close, tick_volume, spread, real_volume. Jedno wywołanie zamiast sześciu tablic.
We wskaźnikach jest inaczej
Wskaźnik dostaje dane jako argumenty OnCalculate i tam żadne kopiowanie nie jest potrzebne:
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[])
{
//--- tablice są gotowe, ale domyślnie nie są szeregami
ArraySetAsSeries(close, true);
return(rates_total);
}Te tablice są najbliższym odpowiednikiem starych Close[] i High[] — z zastrzeżeniem, że kierunek indeksowania trzeba ustawić samemu.