DEAL_ENTRY
Kierunek wpisu: wejście w rynek, wyjście czy odwrócenie pozycji. To jest właściwość, od której zależy poprawność każdego raportu z historii.
long HistoryDealGetInteger(ulong bilet, DEAL_ENTRY);
1 fragment kodu z tej strony przeszedł przez kompilator MetaEditor build 6090, 2026-08-05.
Cztery wartości: DEAL_ENTRY_IN otwarcie lub powiększenie, DEAL_ENTRY_OUT zamknięcie lub zmniejszenie, DEAL_ENTRY_INOUT odwrócenie oraz DEAL_ENTRY_OUT_BY zamknięcie pozycją przeciwstawną.
Dlaczego to nie jest oczywiste
To jest właściwość, od której zależy poprawność każdego raportu z historii. Zysk widnieje wyłącznie przy transakcjach wyjścia. Transakcja wejścia ma w polu DEAL_PROFIT zero, zawsze, niezależnie od tego, jak skończyła się pozycja.
Sumowanie zysku po wszystkich transakcjach daje poprawny wynik przypadkiem, bo wejścia dokładają zera. Ale liczenie „ile miałem transakcji" po tej samej liście daje wynik dwukrotnie zawyżony — jedna pozycja to co najmniej dwa wpisy.
Wartość DEAL_ENTRY_INOUT psuje najwięcej: na rachunku netting sygnał przeciwny do otwartej pozycji zamyka ją i otwiera nową jedną transakcją. Kod liczący osobno wejścia i wyjścia pogubi się dokładnie w tym miejscu.
Kod
if(!HistorySelect(TimeCurrent() - 30 * 86400, TimeCurrent()))
return;
int wejsc = 0, wyjsc = 0;
double wynik = 0.0;
for(int i = 0; i < HistoryDealsTotal(); i++)
{
ulong bilet = HistoryDealGetTicket(i);
if(bilet == 0)
continue;
long kierunek = HistoryDealGetInteger(bilet, DEAL_ENTRY);
if(kierunek == DEAL_ENTRY_IN)
wejsc++;
else if(kierunek == DEAL_ENTRY_OUT || kierunek == DEAL_ENTRY_OUT_BY)
{
wyjsc++;
wynik += HistoryDealGetDouble(bilet, DEAL_PROFIT);
}
else if(kierunek == DEAL_ENTRY_INOUT)
{
//--- odwrocenie: zamyka stara pozycje i otwiera nowa
wejsc++;
wyjsc++;
wynik += HistoryDealGetDouble(bilet, DEAL_PROFIT);
}
}
PrintFormat("wejsc %d, wyjsc %d, wynik %.2f", wejsc, wyjsc, wynik);