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

MQL5 / Pozycja

POSITION_PROFIT

Bieżący zysk pozycji w walucie rachunku. Ta wartość nie zawiera swapu ani prowizji. To, co widzisz w terminalu

double PositionGetDouble(POSITION_PROFIT);

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

Wynik pozycji przy obecnej cenie rynkowej, przeliczony na walutę rachunku. Aktualizuje się przy każdym ticku.

Dlaczego to nie jest oczywiste

Ta wartość nie zawiera swapu ani prowizji. To, co widzisz w terminalu w kolumnie zysku, jest zwykle sumą trzech pól, a nie tym jednym.

Kod zamykający pozycję po osiągnięciu zadanego zysku, oparty wyłącznie na POSITION_PROFIT, zamknie ją za wcześnie na instrumencie z ujemnym swapem i za późno na takim z dodatnim. Przy pozycji trzymanej tydzień różnica bywa większa niż sam zakładany zysk.

Kod

POSITION_PROFIT
if(!PositionSelectByTicket(bilet))
   return;

double zysk     = PositionGetDouble(POSITION_PROFIT);
double swap     = PositionGetDouble(POSITION_SWAP);

//--- prowizja nie jest wlasciwoscia pozycji: siedzi w transakcjach
double prowizja = 0.0;
if(HistorySelectByPosition(PositionGetInteger(POSITION_IDENTIFIER)))
   for(int i = 0; i < HistoryDealsTotal(); i++)
     {
      ulong transakcja = HistoryDealGetTicket(i);
      if(transakcja > 0)
         prowizja += HistoryDealGetDouble(transakcja, DEAL_COMMISSION);
     }

PrintFormat("wynik netto: %.2f (zysk %.2f, swap %.2f, prowizja %.2f)",
            zysk + swap + prowizja, zysk, swap, prowizja);

Powiązane