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

MQL5 / Transakcja

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

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

Powiązane