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

MQL5 / Pozycja

POSITION_PRICE_CURRENT

Bieżąca cena instrumentu, po której pozycja zostałaby zamknięta. To nie jest „aktualna cena instrumentu", tylko cena właściwa dla kierunku

double PositionGetDouble(POSITION_PRICE_CURRENT);

1 fragment kodu z tej strony przeszedł przez kompilator MetaEditor build 6090, 2026-08-05.

Cena używana do wyliczenia bieżącego wyniku pozycji.

Dlaczego to nie jest oczywiste

To nie jest „aktualna cena instrumentu", tylko cena właściwa dla kierunku pozycji: bid dla długiej, ask dla krótkiej. Pozycja jest zamykana ceną przeciwną do tej, którą została otwarta.

Dzięki temu porównanie POSITION_PRICE_CURRENT z POSITION_PRICE_OPEN daje poprawny wynik bez ręcznego uwzględniania spreadu — a własne liczenie z SymbolInfoTick wymaga pamiętania, którą stronę wziąć. Opisaliśmy, do czego prowadzi pomyłka, przy złej stronie ceny.

Kod

POSITION_PRICE_CURRENT
if(!PositionSelectByTicket(bilet))
   return;

double otwarcie = PositionGetDouble(POSITION_PRICE_OPEN);
double biezaca  = PositionGetDouble(POSITION_PRICE_CURRENT);
long typ = PositionGetInteger(POSITION_TYPE);

double punkt = SymbolInfoDouble(PositionGetString(POSITION_SYMBOL), SYMBOL_POINT);
double znak = (typ == POSITION_TYPE_BUY) ? 1.0 : -1.0;

PrintFormat("ruch na korzysc: %d punktow",
            (int)MathRound(znak * (biezaca - otwarcie) / punkt));

Powiązane