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

MQL5 / Transakcja

DEAL_TYPE

Rodzaj transakcji, niekoniecznie handlowej. Wpłata na rachunek też jest transakcją. Widnieje w historii jako

long HistoryDealGetInteger(ulong bilet, DEAL_TYPE);

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

Poza DEAL_TYPE_BUY i DEAL_TYPE_SELL istnieje kilkanaście typów niehandlowych: operacje bilansowe, kredyt, prowizje rozliczane osobno, korekty, dywidendy i podatki.

Dlaczego to nie jest oczywiste

Wpłata na rachunek też jest transakcją. Widnieje w historii jako DEAL_TYPE_BALANCE, ma pusty symbol, zerowy wolumen i kwotę w polu DEAL_PROFIT. To jest najczęstsza przyczyna raportów, w których strategia „zarobiła" dokładnie tyle, ile wynosił depozyt początkowy.

Ta sama pułapka dotyczy dywidend na akcjach, korekt brokera i odsetek. Każdy z tych wpisów wpada do pętli po historii i dokłada się do wyniku, jeśli nikt nie sprawdził typu.

Kod

DEAL_TYPE
for(int i = 0; i < HistoryDealsTotal(); i++)
  {
   ulong bilet = HistoryDealGetTicket(i);
   if(bilet == 0)
      continue;

   long typ = HistoryDealGetInteger(bilet, DEAL_TYPE);

   //--- do wyniku strategii licza sie wylacznie transakcje handlowe
   if(typ != DEAL_TYPE_BUY && typ != DEAL_TYPE_SELL)
     {
      PrintFormat("pomijam wpis niehandlowy typu %d, kwota %.2f",
                  (int)typ, HistoryDealGetDouble(bilet, DEAL_PROFIT));
      continue;
     }
  }

Powiązane