SYMBOL_FILLING_MODE
Maska bitowa dozwolonych trybów wypełnienia zlecenia. Dwie rzeczy, na których wykłada się większość kodu.
long SymbolInfoInteger(string symbol, SYMBOL_FILLING_MODE);
1 fragment kodu z tej strony przeszedł przez kompilator MetaEditor build 6090, 2026-08-05.
Mówi, które wartości pola type_filling przyjmie serwer dla tego instrumentu. Wartość jest maską bitową, nie pojedynczym trybem.
Dlaczego to nie jest oczywiste
Dwie rzeczy, na których wykłada się większość kodu.
Po pierwsze, to jest maska, więc sprawdza się ją iloczynem bitowym, a nie porównaniem. Zapis if(dozwolone == SYMBOL_FILLING_FOK) działa przypadkiem wtedy, gdy dozwolony jest wyłącznie ten jeden tryb, i zawodzi u każdego brokera, który dopuszcza oba.
Po drugie, ORDER_FILLING_RETURN nie występuje w tej masce. Jest zawsze dostępny dla zleceń oczekujących oraz dla rachunków z wykonaniem rynkowym i giełdowym. Kod, który z pustej maski wnioskuje, że nie ma żadnego dozwolonego trybu, wyciąga błędny wniosek.
Kod
ENUM_ORDER_TYPE_FILLING DobierzWypelnienie(const string symbol)
{
long dozwolone = SymbolInfoInteger(symbol, SYMBOL_FILLING_MODE);
//--- iloczyn bitowy, nie porownanie
if((dozwolone & SYMBOL_FILLING_FOK) == SYMBOL_FILLING_FOK)
return ORDER_FILLING_FOK;
if((dozwolone & SYMBOL_FILLING_IOC) == SYMBOL_FILLING_IOC)
return ORDER_FILLING_IOC;
//--- pusta maska nie znaczy "brak trybow"
return ORDER_FILLING_RETURN;
}