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