Ошибки, баги, вопросы - страница 659

 
antt:
Какая точка доступа?
 Cyprus.
 

Ситуация такая. Например, есть открытые позиции в пятницу. Выставлены Stop Loss и Take Profit. Не дожидаясь окончания торговой сессии оставляем эти позиции, отключаем связь и укладываем комп в спячку (Спящий режим). Включаемся на следующий день. Включаем интернет. Связь с сервером есть. Суббота. Рынок закрыт. Видим, что позиции были закрыты, какие-то по Stop Loss, какие-то по Take Profit. Эти сделки видно на закладке История в торговом терминале:

 

Запрашиваем историю трёх последних сделок:

   datetime Start=0;
//---
   if(!HistorySelect(Start,TimeCurrent())) // Загрузим историю сделок
     {
      Print("Ошибка при загрузке истории!"); return;
     }
   else
     {
      ulong ticket=0;
      datetime time=0;
      string symbol="",comment="";
      //---
      int total_deals=HistoryDealsTotal();
      //---
      for(int d=total_deals-1; d>=total_deals-3; d--)
        {
         if((ticket=HistoryDealGetTicket(d))>0) // Если сделка выбрана
           {
            symbol=HistoryDealGetString(ticket,DEAL_SYMBOL);
            comment=HistoryDealGetString(ticket,DEAL_COMMENT);
            time=(datetime)HistoryDealGetInteger(ticket,DEAL_TIME);
            //---
            Print("<-- symbol: ",symbol,"; comment: ",comment,"; time: ",time," -->");
           }
        }
     }

 

И видим, что история не соответствует. То есть, в терминале видим, а программно получить не можем. 

//---

Это баг или так задумано и эти сделки получить программно теперь можно только, когда рынок откроется? 

P.S. Так тоже пробовал, не помогает:

#define Milliseconds_Ahead 200
//---
datetime TimeCurrentAhead()
  {
   return(TimeCurrent()+Milliseconds_Ahead);
  }
 

tol64:

... 

P.S. Так тоже пробовал, не помогает:

Нашёл выход. В окне Обзор рынка при этом видно время выхода. То есть, последнее время, когда была связь с сервером и поступил тик (последнее время тика):

 

То есть, в моём случае 18:43:30.

Получается, что всё таки с помощью этой функции...:

#define Milliseconds_Ahead 10000
//---
datetime TimeCurrentAhead()
  {
   return(TimeCurrent()+Milliseconds_Ahead);
  }

...можно решить ситуацию, но нужно делать запрос с существенным запасом. Либо вообще без этого костыля и забыть о нём навсегда, но использовать всегда при запросе истории функцию   TimeLocal(), если в реал-тайме. А в тестере TimeCurrent() или TimeCurrentAhead(). Что то вроде этого:

datetime ChoiceTimeFunction()
  {
   if(NotTest())
     { return(TimeLocal()); }
   else
     { return(TimeCurrent()+Milliseconds_Ahead); }
//---
   return(TimeLocal());
  }

Тогда этот момент должен быть освещён в справке что ли...

 

В терминале есть возможность восстанавливать удалённые графики:

Открыть удаленный

Открыть подменю удаленных графиков для восстановления. Сохранение удаленных графиков происходит, если в настройках терминала выставлен флажок "Сохранять удаленные окна для повторного открытия". В каталоге /Profiles/Deleted сохраняются все шаблоны удаленных графиков. При выполнении данной команды происходит обращение к этим шаблонам и открывается соответствующий график. Любой из шаблонов удаленных графиков может быть удален с помощью соответствующей команды в данном меню.

Ситуация такая. На графике висит эксперт и отображаются его информационные панели. В функции OnDeinit() указываю, чтобы, если происходит закрытие графика, то информационные панели должны быть удалены, с целью сохранения шаблона для восстановления без объектов. Я закрываю график. С помощью опции Открыть удалённый восстанавливаю его, но восстановление происходит с объектами, причём некорректно (какие-то есть, каких-то нет). Эксперт затем всё восстанавливает после инициализации. Остаётся неприятный осадок и ощущение халтурно сделанной работы. Оцениваю с точки зрения пользователей экспертов, а не терминала. При любых других событиях деинициализации всё работает корректно. Я так понимаю, что сохранение шаблона происходит до деинициализации, так как при деинициализации объекты всё таки удаляются, но успевают сохраниться в шаблоне.

 

 Вот какая незадача выходит...

 Насколько мне известно, терминал умеет "замечать" дополнительную историю на сервере и вроде как "провалы" в локальной истории и начинает бешено докачивать её автоматом, заполняя эти пробелы. Это всё здорово, конечно, но...

 Есть такое явление, как нестандартные таймфреймы, история которых вроде как ниоткуда не скачивается, а они автоматически достраиваются "в уме" самим терминалом. И вот что я сейчас заметил. Если с замечанием "провалов" в истории и автодокачкой всё в порядке, то вот в отношении восстановления отстроенной и впоследствии повреждённой (то ли на диске, то ли в памяти) истории нестандартных таймфреймов дела обстоят из рук вон никак. Ну скачал мой терминал всю историю, потом я попрыгал по всем таймфреймам и обнаружил, что на H2 и H3 кто-то выкусил целый недавний сегмент истории, который и не думал ни докачиваться, ни повторно отстраиваться локально самим терминалом. Помогла выгрузка терминала и ручное удаление файлов соответствующих таймфреймов из C:\Program Files\MetaTrader 5\Bases\MetaQuotes-Demo\history\NZDUSD\cache с последующим запуском терминала, переходом на H2 и H3  и ожиданием, пока он заново отстроит на них свои истории, с нуля, корректно.

 Очевидно, хотелось бы более умный терминал, который бы "чувствовал" эти выкушенные сегменты на любых, в том числе и нестандартных таймфреймах, и тут же пытался их восполнить.

--------------- 

Дополнение: хотя, если честно, ничегошеньки терминал не видит вообще. Сидел я с год с кривой историей минуток, которая на самом деле начинается у MetaQuotes с 1999 года, а у меня граница проходила почему-то в районе 2009 года - и что? Где эти автоматические докачки? благо, было куда качать, места хватало, а докачек как не было, так и не было до сего дня, пока я всё не снёс и не переустановил заново (ранее делал то же самое, но эффект оказался никакой). Конечно, тут речь не о докачке даже, а о полном скачивании терминалом всей истории с нуля. Ну хоть так-то - и то хлеб.

 И в связи с этим хочу дать всем MQL-программистам, которые отлаживают свои программы и рассчитывают на потребление их программных продуктов другими пользователями, важное предостережение: будьте бдительны в отношении наличия той истории, для которой рассчитывался ваш продукт: во время тестирования при неполной или замещённой более высоких таймфреймов историей скорость отработки вас будет радовать, но может случиться так, что вы или пользователи ваших программных продуктов возрыдают от 100% загрузки процессора на современных машинах и "бесконечного" ожидания результатов, потому что в этом случае история будет полная - на порядок объёмнее!

 

'f0_34' - comparison expression expected

Подскажите, что означает  данное предупреждение?

 

Снова всплыла ошибка подобного рода:

 

Проблемное место выявлено. Подробное описание в Сервисдеске. 

//---

P.S. Дополнил уже существующую заявку, с когда-то решённой подобной проблемой. Через какое-то время увидел уведомление около профиля. Захожу в Сервисдеск, а заявка вообще исчезла. Заново теперь что-ли писать? )))

 
tol64:

Снова всплыла ошибка подобного рода:

 

Проблемное место выявлено. Подробное описание в Сервисдеске. 

//---

P.S. Дополнил уже существующую заявку, с когда-то решённой подобной проблемой. Через какое-то время увидел уведомление около профиля. Захожу в Сервисдеск, а заявка вообще исчезла. Заново теперь что-ли писать? )))

Заявка вместе с комментариями на месте, но почему-то не видна в профайле.

Обязательно разберемся.

 
MetaQuotes:

Заявка вместе с комментариями на месте, но почему-то не видна в профайле.

Обязательно разберемся.

разберитесь пожалуйста, так как некоторые мои заявки тоже ушли вообще. ни в открытых ни в закрытых нет.
 
MetaQuotes:

Заявка вместе с комментариями на месте, но почему-то не видна в профайле.

Обязательно разберемся.

Спасибо. Жду с нетерпением, так как есть уточнения. Проблема начала проявляться не только там, где я указал. Область проявления теперь - повсеместно.