DEAL_POSITION_ID
Identyfikator pozycji, której dotyczy transakcja. Pozycja nie istnieje w historii jako osobny obiekt. Jest wyłącznie
long HistoryDealGetInteger(ulong bilet, DEAL_POSITION_ID);
1 fragment kodu z tej strony przeszedł przez kompilator MetaEditor build 6090, 2026-08-05.
Wiąże transakcję z pozycją. Wszystkie transakcje jednej pozycji mają ten sam identyfikator, od otwarcia po zamknięcie.
Dlaczego to nie jest oczywiste
Pozycja nie istnieje w historii jako osobny obiekt. Jest wyłącznie zbiorem transakcji o wspólnym identyfikatorze — i to pole jest jedyną rzeczą, która je łączy.
Stąd praktyczny wniosek: raport „ile zarobiła ta pozycja" buduje się przez HistorySelectByPosition, a nie przez szukanie biletu pozycji w historii. Bilet i identyfikator to dwie różne liczby, choć na prostych rachunkach bywają równe.
Transakcje niehandlowe mają tu zero, bo nie należą do żadnej pozycji.
Kod
long identyfikator = HistoryDealGetInteger(bilet, DEAL_POSITION_ID);
if(identyfikator == 0)
return; // wpis niehandlowy, nie nalezy do pozycji
if(HistorySelectByPosition(identyfikator))
{
double wynik = 0.0;
for(int i = 0; i < HistoryDealsTotal(); i++)
{
ulong t = HistoryDealGetTicket(i);
if(t > 0)
wynik += HistoryDealGetDouble(t, DEAL_PROFIT)
+ HistoryDealGetDouble(t, DEAL_COMMISSION)
+ HistoryDealGetDouble(t, DEAL_SWAP);
}
PrintFormat("pozycja %I64d: wynik netto %.2f", identyfikator, wynik);
}