Время совершения сделки?

 

При тестировании советника переменная opentime всё время выдаёт 0. Уже всю голову сломал. Помогите! Часть кода из OnTick:

         HistorySelect(0,TimeCurrent());
         int total = HistoryDealsTotal();
         ulong ticket = HistoryDealGetTicket(total-1);
         HistoryDealSelect(ticket);
         long opentime = HistoryDealGetInteger(ticket,DEAL_TIME);
         long type = HistoryDealGetInteger(ticket,DEAL_TYPE);
         string comment = HistoryDealGetString(ticket,DEAL_COMMENT);
         Print(TimeCurrent(),"   ",opentime);
 
lordlev:

При тестировании советника переменная opentime всё время выдаёт 0. Уже всю голову сломал. Помогите! Часть кода из OnTick:

Вот так попробуйте:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   int i=0;
   ulong hd_ticket=0;
   datetime hd_time=0;
   
   if(HistorySelect(0,TimeCurrent())) // получим историю ордеров. Если история выбрана, то...
     {
      i=HistoryDealsTotal()-1; // получим порядковый номер последней сделки
      //---
      if((hd_ticket=HistoryDealGetTicket((int)i))>0) // получим тикет ордера по его позиции в списке
        {
         hd_time=(datetime)HistoryDealGetInteger(hd_ticket,DEAL_TIME);
         //---
         Print("hd_time: ",hd_time);
        }
     }
  }
 
tol64:

Вот так попробуйте:

Спасибо, всё пашет. Но всё равно я не могу понять в чём ошибка была.
 
lordlev:
Спасибо, всё пашет. Но всё равно я не могу понять в чём ошибка была.
Вы два раза пытались выбрать сделку, сначала по номеру, а потом ещё по тикету. Но это ладно, не в этом ошибка. Переменная opentime у Вас long, а нужно datetime.
Документация по MQL5: Торговые функции / HistoryDealSelect
Документация по MQL5: Торговые функции / HistoryDealSelect
  • www.mql5.com
Торговые функции / HistoryDealSelect - Документация по MQL5
 
lordlev:
Спасибо, всё пашет. Но всё равно я не могу понять в чём ошибка была.
tol64:
Вы два раза пытались выбрать сделку, сначала по номеру, а потом ещё по тикету. Но это ладно, не в этом ошибка. Переменная opentime у Вас long, а нужно datetime.
Хотя я ошибся, поспешил с ответом (проверил). :) Тип переменной можно и в long указывать, тогда Вы будете получать значение времени в секундах от 1970 года. А чтобы лучше понять, что за ошибка, то всегда нужно проверять на ошибки. То есть, если история сделок выбрана, то идём дальше, если нет, то вывести последнюю ошибку.
Причина обращения: