SYMBOL_DIGITS
Liczba miejsc dziesiętnych w cenie instrumentu. Funkcja zwraca `long`, nie `int`. Przypisanie wprost daje ostrzeżenie
long SymbolInfoInteger(string symbol, SYMBOL_DIGITS);
1 fragment kodu z tej strony przeszedł przez kompilator MetaEditor build 6090, 2026-08-05.
Mówi, do ilu miejsc zaokrąglać ceny wysyłane w zapytaniu handlowym. Wysłanie ceny z większą dokładnością kończy się kodem 10015.
Dlaczego to nie jest oczywiste
Funkcja zwraca long, nie int. Przypisanie wprost daje ostrzeżenie kompilatora o możliwej utracie danych, które większość ludzi wycisza rzutowaniem — i słusznie, bo tu żadna strata nie grozi. Ale ten sam odruch stosowany do SYMBOL_VOLUME_MAX czy wartości czasu potrafi już uciąć realne dane.
Druga rzecz: liczba miejsc dziesiętnych nie mówi, ile wynosi pips. Reguła „trzy albo pięć cyfr znaczy pięciocyfrowego brokera" działa na walutach i zawodzi na indeksach, metalach i kryptowalutach.
Kod
//--- jawne rzutowanie, bo funkcja zwraca long
int cyfry = (int)SymbolInfoInteger(symbol, SYMBOL_DIGITS);
//--- cena gotowa do wysłania w zapytaniu
double cenaDoWyslania = NormalizeDouble(surowaCena, cyfry);
//--- i formatowanie w dzienniku, które działa na każdym instrumencie
PrintFormat("%s: cena %.*f", symbol, cyfry, cenaDoWyslania);