POSITION_TYPE
Kierunek pozycji: długa albo krótka. Wartości liczbowe `POSITION_TYPE_BUY` i `ORDER_TYPE_BUY` są sobie równe,
long PositionGetInteger(POSITION_TYPE);
1 fragment kodu z tej strony przeszedł przez kompilator MetaEditor build 6090, 2026-08-05.
Dwie wartości: POSITION_TYPE_BUY i POSITION_TYPE_SELL. Decydują o tym, która cena zamyka pozycję i po której stronie muszą leżeć poziomy zabezpieczające.
Dlaczego to nie jest oczywiste
Wartości liczbowe POSITION_TYPE_BUY i ORDER_TYPE_BUY są sobie równe, więc porównanie typu pozycji ze stałą przeznaczoną dla zleceń zadziała — i to jest pułapka, bo działa przypadkiem. Przy typach zleceń oczekujących zgodność się kończy, a kod, który wcześniej mieszał obie rodziny stałych, zaczyna dawać wyniki bez sensu.
Druga rzecz: na rachunku typu netting jeden instrument ma najwyżej jedną pozycję, a sygnał przeciwny ją zamyka albo odwraca. Warunek „jeśli mam pozycję długą, otwórz krótką" na takim rachunku nie tworzy drugiej pozycji, tylko likwiduje pierwszą.
Kod
if(!PositionSelectByTicket(bilet))
return;
long typ = PositionGetInteger(POSITION_TYPE);
//--- stale z rodziny POSITION_, nie ORDER_
if(typ == POSITION_TYPE_BUY)
Print("pozycja dluga, zamykana po bid");
else if(typ == POSITION_TYPE_SELL)
Print("pozycja krotka, zamykana po ask");
//--- zlecenie zamykajace ma kierunek przeciwny
ENUM_ORDER_TYPE zamkniecie = (typ == POSITION_TYPE_BUY)
? ORDER_TYPE_SELL : ORDER_TYPE_BUY;