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