Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1561

 
Artyom Trishkin #:
Какой магик установлен в торговом объекте. Я б ответил, но не у компа пока. 

Что-то мне кажется из объекта не доступно. Магик в области protected:

 

Такой вопрос у меня.

Я использую код в советнике буквально из справки

//| Trade function                                                   | 
//+------------------------------------------------------------------+ 
void OnTrade() 
  { 
//--- получим тикет последней сделки из истории торговли за неделю 
   ulong last_deal=GetLastDealTicket(); 
   if(HistoryDealSelect(last_deal)) 
     { 
      //--- время совершения сделки в миллисекундах от 01.01.1970 
      long deal_time_msc=HistoryDealGetInteger(last_deal,DEAL_TIME_MSC); 
      PrintFormat("Deal #%d DEAL_TIME_MSC=%i64 => %s", 
                  last_deal,deal_time_msc,TimeToString(deal_time_msc/1000)); 
     } 
   else 
      PrintFormat("HistoryDealSelect() failed for #%d. Eror code=%d", 
                  last_deal,GetLastError()); 
//--- 
  } 
//+------------------------------------------------------------------+ 
//| Возвращает тикет последней сделки в истории или -1               | 
//+------------------------------------------------------------------+ 
ulong GetLastDealTicket() 
  { 
//--- запросим историю за последние 7 дней 
   if(!GetTradeHistory(7)) 
     { 
      //--- сообщим о неудачном вызове и вернем -1 
      Print(__FUNCTION__," HistorySelect() вернул false"); 
      return -1; 
     } 
//---  
   ulong first_deal,last_deal,deals=HistoryOrdersTotal(); 
//--- если ордера есть, начинаем работать с ними 
   if(deals>0) 
     { 
      Print("Deals = ",deals); 
      first_deal=HistoryDealGetTicket(0); 
      PrintFormat("first_deal = %d",first_deal); 
      if(deals>1) 
        { 
         last_deal=HistoryDealGetTicket((int)deals-1); 
         PrintFormat("last_deal = %d",last_deal); 
         return last_deal; 
        } 
      return first_deal; 
     } 
//--- не нашли ни одной сделки, вернем -1 
   return -1; 
  } 
//+------------------------------------------------------------------+ 
//| Запрашивает историю за последние дни и вернет false при неудаче  | 
//+------------------------------------------------------------------+ 
bool GetTradeHistory(int days) 
  { 
//--- зададим недельный период времени для запроса торговой истории 
   datetime to=TimeCurrent(); 
   datetime from=to-days*PeriodSeconds(PERIOD_D1); 
   ResetLastError(); 
//--- сделаем запрос и проверим результат 
   if(!HistorySelect(from,to)) 
     { 
      Print(__FUNCTION__," HistorySelect=false. Error code=",GetLastError()); 
      return false; 
     } 
//--- история получена успешно 
   return true; 
  }

В начале корректно работает в тестере, а потом получаю в логе ошибку. Почему?

2024.10.02 17:58:29.257 2008.01.16 07:15:00   Deals = 8
2024.10.02 17:58:29.257 2008.01.16 07:15:00   first_deal = 6
2024.10.02 17:58:29.257 2008.01.16 07:15:00   last_deal = 0
2024.10.02 17:58:29.257 2008.01.16 07:15:00   HistoryDealSelect() failed for #0. Eror code=4755

Вот пример, что он работает чуть раньше

2024.10.02 17:58:29.057 2008.01.15 23:15:00   Deals = 2
2024.10.02 17:58:29.057 2008.01.15 23:15:00   first_deal = 6
2024.10.02 17:58:29.057 2008.01.15 23:15:00   last_deal = 7
2024.10.02 17:58:29.057 2008.01.15 23:15:00   Deal #7 DEAL_TIME_MSC=213520441664 => 2008.01.15 21:04
 
Aleksey Vyazmikin #:

Такой вопрос у меня.

Я использую код в советнике буквально из справки

В начале корректно работает в тестере, а потом получаю в логе ошибку. Почему?

Вот пример, что он работает чуть раньше

Потому что 

last_deal = 0
 
Vladimir Deryagin #:

Потому что 

Так в том то и вопрос, почему ноль?

 
Aleksey Vyazmikin #:

Так в том то и вопрос, почему ноль?

   ulong first_deal,last_deal,deals=HistoryOrdersTotal(); 
//--- если ордера есть, начинаем работать с ними 
   if(deals>0) 
     { 
      Print("Deals = ",deals); 
      first_deal=HistoryDealGetTicket(0); 
      PrintFormat("first_deal = %d",first_deal); 
      if(deals>1) 
        { 
         last_deal=HistoryDealGetTicket((int)deals-1); 
         PrintFormat("last_deal = %d",last_deal); 
         return last_deal; 
        } 
      return first_deal; 
     } 
//--- не нашли ни одной сделки, вернем -1 
   return -1; 
HistoryDealGetTicket

Не следует путать между собой ордера, сделки и позиции. Каждая сделка является результатом исполнения некоего ордера, каждая позиция является итоговым результатом одной или нескольких сделок.

 
Vladimir Deryagin #:
HistoryDealGetTicket

Не следует путать между собой ордера, сделки и позиции. Каждая сделка является результатом исполнения некоего ордера, каждая позиция является итоговым результатом одной или нескольких сделок.

Вы копируйте приведённый мной код с какой целью, что это объясняет?

[Удален]  

Может в этом?

deals=HistoryOrdersTotal(); 
last_deal=HistoryDealGetTicket((int)deals-1);
 
Aleksei Stepanenko #:

Может в этом?

Да, верно, я уже понял, что это очередная ошибка в описании функции от MQ.

 
Aleksey Vyazmikin #:

Да, верно, я уже понял, что это очередная ошибка в описании функции от MQ.

Где это в справке? 
 
Artyom Trishkin #:
Где это в справке? 
Справочник MQL5 / Торговые функции / HistoryDealGetInteger