OrderSelect(1,SELECT_BY_POS,MODE_HISTORY) - не возвращает первый приказ в истории

 

Здравствуйте, я использую "MT4, Build 482", сегодня обнаружил, что функция OrderSelect(1,SELECT_BY_POS,MODE_HISTORY) не возвращает первый приказ в истории, а возвращает приказ из середины списка.

   OrderSelect(1,SELECT_BY_POS,MODE_HISTORY);
   Print("First Order #= ",OrderTicket());

Результат:
2013.04.26 15:51:06 test USDCHF,M30: First Order #= 178555092
 

A должен быть:  178532001

 

 Большая просьба подскажите я не прав или это ошибка Терминала ?

 

Closed Transactions:
TicketOpen TimeTypeSizeItem PriceS / LT / PClose Time PriceCommissionTaxesSwapProfit
1785306572013.04.26 13:11balanceDeposit3 000.00
1785320012013.04.26 13:17buy0.01usdchf0.943850.000000.943672013.04.26 17:230.943670.000.000.00-0.19
1785320242013.04.26 15:03buy0.01usdchf0.944400.000000.943672013.04.26 17:230.943670.000.000.00-0.77
1785320262013.04.26 13:17buy stop0.01usdchf0.945180.000000.946672013.04.26 15:420.94089cancelled
1785454052013.04.26 14:20sell0.03usdchf0.943420.000000.940652013.04.26 15:420.940650.000.000.008.83
1785454662013.04.26 15:27sell0.03usdchf0.943080.000000.940652013.04.26 15:420.940650.000.000.007.75
1785454692013.04.26 15:29sell0.03usdchf0.942930.000000.940652013.04.26 15:420.940650.000.000.007.27
1785454722013.04.26 15:30sell0.03usdchf0.942770.000000.940652013.04.26 15:420.940650.000.000.006.76
1785454752013.04.26 15:30sell0.03usdchf0.942570.000000.940652013.04.26 15:420.940650.000.000.006.12
1785454772013.04.26 15:30sell0.03usdchf0.942320.000000.940652013.04.26 15:420.940650.000.000.005.33
1785454802013.04.26 15:30sell0.03usdchf0.942010.000000.940652013.04.26 15:420.940650.000.000.004.34
1785454832013.04.26 15:30sell0.03usdchf0.941570.000000.940652013.04.26 15:420.940650.000.000.002.93
1785549502013.04.26 15:03buy stop0.03usdchf0.944520.000000.946882013.04.26 15:360.94167cancelled
1785549542013.04.26 15:03buy stop0.03usdchf0.944640.000000.946882013.04.26 15:360.94167cancelled
1785549592013.04.26 15:03buy stop0.03usdchf0.944770.000000.946882013.04.26 15:360.94167cancelled
1785549612013.04.26 15:04buy stop0.03usdchf0.944930.000000.946882013.04.26 15:360.94167cancelled
1785549752013.04.26 15:04buy stop0.03usdchf0.945110.000000.946882013.04.26 15:360.94167cancelled
1785550652013.04.26 15:04buy stop0.03usdchf0.945340.000000.946882013.04.26 15:360.94166cancelled
1785550812013.04.26 15:04buy stop0.03usdchf0.945630.000000.946882013.04.26 15:360.94167cancelled
1785550922013.04.26 15:04buy stop0.03usdchf0.946040.000000.946882013.04.26 15:360.94167cancelled
1785621422013.04.26 15:27sell0.03usdchf0.943090.000000.940572013.04.26 15:420.940570.000.000.008.04
1785622682013.04.26 15:29sell0.03usdchf0.942900.000000.940572013.04.26 15:420.940570.000.000.007.43
1785622712013.04.26 15:30sell0.03usdchf0.942780.000000.940572013.04.26 15:420.940570.000.000.007.05
1785622752013.04.26 15:30sell0.03usdchf0.942650.000000.940572013.04.26 15:420.940570.000.000.006.63
1785622792013.04.26 15:30sell0.03usdchf0.942490.000000.940572013.04.26 15:420.940570.000.000.006.12
1785622852013.04.26 15:30sell0.03usdchf0.942310.000000.940572013.04.26 15:420.940570.000.000.005.55
1785622902013.04.26 15:30sell0.03usdchf0.942090.000000.940572013.04.26 15:420.940570.000.000.004.85
1785622932013.04.26 15:30sell0.03usdchf0.941810.000000.940572013.04.26 15:420.940570.000.000.003.96
1785622962013.04.26 15:30sell0.03usdchf0.941400.000000.940572013.04.26 15:420.940570.000.000.002.65
1785718342013.04.26 15:48buy0.01usdchf0.941220.000000.943672013.04.26 17:230.943670.000.000.002.60
1785718382013.04.26 15:59buy0.01usdchf0.941700.000000.943672013.04.26 17:230.943670.000.000.002.09
1785718392013.04.26 16:03buy0.01usdchf0.942360.000000.943672013.04.26 17:230.943670.000.000.001.39
1785720082013.04.26 15:42sell0.03usdchf0.940260.000000.939302013.04.26 17:120.943430.000.000.00-10.08
1785721162013.04.26 15:43sell0.03usdchf0.940230.000000.939302013.04.26 17:120.943410.000.000.00-10.11
1785721272013.04.26 15:43sell0.03usdchf0.940200.000000.939302013.04.26 17:120.943440.000.000.00-10.30
1785721292013.04.26 15:42sell stop0.03usdchf0.940160.000000.939302013.04.26 16:030.94234cancelled
1785721312013.04.26 15:42sell stop0.03usdchf0.940120.000000.939302013.04.26 16:030.94230cancelled
1785721332013.04.26 15:42sell stop0.03usdchf0.940070.000000.939302013.04.26 16:030.94223cancelled
1785721432013.04.26 15:42sell stop0.03usdchf0.940010.000000.939302013.04.26 16:030.94215cancelled
1785721482013.04.26 15:42sell stop0.03usdchf0.939940.000000.939302013.04.26 16:030.94216cancelled
1785721572013.04.26 15:42sell stop0.03usdchf0.939850.000000.939302013.04.26 16:010.94209cancelled
1785721592013.04.26 15:42sell stop0.03usdchf0.939720.000000.939302013.04.26 16:010.94190cancelled
1785741952013.04.26 15:47sell0.03usdchf0.940830.000000.938672013.04.26 17:120.943430.000.000.00-8.27
1785753162013.04.26 15:50sell0.01usdchf0.941220.000000.939232013.04.26 17:230.943950.000.000.00-2.89
1785753192013.04.26 15:50sell0.03usdchf0.941120.000000.939232013.04.26 17:120.943430.000.000.00-7.35
  0.00 0.00 0.00 57.73
Closed P/L: 57.73
 

Я вывел хомера 3-х приказов, от этого не стало понятнее ...

 

   OrderSelect(1,SELECT_BY_POS,MODE_HISTORY);
   Print("First Order #= ",OrderTicket());
   OrderSelect(2,SELECT_BY_POS,MODE_HISTORY);
   Print("Second Order #= ",OrderTicket());
   OrderSelect(3,SELECT_BY_POS,MODE_HISTORY);
   Print("Third Order #= ",OrderTicket());

2013.04.26 15:59:16 test USDCHF,M30: Third Order #= 178555065
2013.04.26 15:59:16 test USDCHF,M30: Second Order #= 178555081
2013.04.26 15:59:16 test USDCHF,M30: First Order #= 178555092

 

  позиция 0 - это сам депозит, меня интересует первый приказ

OrderSelect(0,SELECT_BY_POS,MODE_HISTORY); // get first order in the history
   Print("0 Order #= ",OrderTicket()); 

 

2013.04.26 16:32:29 test USDCHF,M30: 0 Order #= 178530657

 
winters:

Я вывел хомера 3-х приказов, от этого не стало понятнее ...

 

   OrderSelect(1,SELECT_BY_POS,MODE_HISTORY);
   Print("First Order #= ",OrderTicket());
   OrderSelect(2,SELECT_BY_POS,MODE_HISTORY);
   Print("Second Order #= ",OrderTicket());
   OrderSelect(3,SELECT_BY_POS,MODE_HISTORY);
   Print("Third Order #= ",OrderTicket());

2013.04.26 15:59:16 test USDCHF,M30: Third Order #= 178555065
2013.04.26 15:59:16 test USDCHF,M30: Second Order #= 178555081
2013.04.26 15:59:16 test USDCHF,M30: First Order #= 178555092

 

 

Могу только предположить, что массив истории ордеров сортирован по времени закрытия ордеров, т.к. именно при закрытии ордер попадает в историю.

Вам надо делать полный перебор с поиском ордера с наименьшим временем открытия, а из ордеров с одинаковым временем открытия выбирать с наименьшим тикетом.

 

Как-то так.

 

Спасибо !!! Не заметил такой закономерности

 

У меня вроде ве нормально:

      

Проверил с помощью простейшей прогаммки:

int init()
  {
   int ord=OrdersHistoryTotal();
   for(int i=0; i<ord; i++)
    {
     if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) Print("OrderPos=",i," OrderTicket=",OrderTicket());
     else Print("Error Select pos=",i);
    }
   return(0);
  }
int deinit()
  {
   return(0);
  }
int start()
  {
   return(0);
  }

 тот же build 482

 

В MQL4 OrderSelect работает со списком ордеров, которым пользователь может сам управлять. По этой причине даже трехлетняя история счета может быть недоступна программе, если пользователь настроил показ истории только за "сегодня". Этот подход изменен в МТ5, а в МТ4 следует с таким нюансом считаться.

 P. S. В экспертах, в принципе, лучше не делать ставку на историю счета (в смысле торговать на основании этих данных), т. к. брокеры, частенько архивируют историю счета, что приводит к появлению одной записи вместо нескольких сотен или тысяч. 

Причина обращения: