Przejdź do treści
MQL5 · MetaTrader 5 · po polsku
kod odczarowany

MQL5 / Pozycja

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

POSITION_TYPE
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;

Powiązane