RefreshRates — z MQL4 na MQL5
Funkcji RefreshRates nie ma, bo nie ma już czego odświeżać. Ceny pobiera się na żądanie przez SymbolInfoTick.
2 fragmenty kodu z tej strony przeszły przez kompilator MetaEditor build 6090, 2026-08-05.
Po co to było
W MQL4 Bid i Ask były zmiennymi wypełnianymi przy wejściu do funkcji start(). Podczas długiej operacji — pętli ponawiającej zlecenie, oczekiwania po rekwotowaniu — ich wartości się starzały. RefreshRates() wypełniało je na nowo.
while(proba < 3)
{
RefreshRates();
int bilet = OrderSend(Symbol(), OP_BUY, 0.1, Ask, 3, 0, 0);
if(bilet > 0)
break;
proba++;
}Dlaczego zniknęło
W MQL5 nie ma zmiennych Bid i Ask. Cena jest pobierana w momencie, w którym o nią pytasz, więc nie ma stanu do odświeżania. Odpowiednikiem RefreshRates() jest po prostu ponowne wywołanie funkcji pobierającej cenę.
for(int proba = 0; proba < 3; proba++)
{
MqlTick tick;
if(!SymbolInfoTick(_Symbol, tick))
break;
zapytanie.price = NormalizeDouble(tick.ask, _Digits);
if(OrderSend(zapytanie, wynik) && wynik.retcode == TRADE_RETCODE_DONE)
break;
}Jak sprawdzić, czy cena nie jest przestarzała
Pole tick.time mówi, kiedy kwotowanie przyszło. Przy pracy na instrumencie innym niż ten na wykresie warto to sprawdzać:
MqlTick tick;
if(!SymbolInfoTick(symbol, tick))
return false;
if(TimeCurrent() - tick.time > 60)
{
Print("Ostatnie kwotowanie starsze niż minuta — nie wysyłam zlecenia.");
return false;
}Ten sam wzorzec przydaje się przy 10021, gdzie serwer odmawia z powodu braku aktualnych kwotowań.