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

 
stringo:
Код принципиально другой

Ничего себе... я в шоке...

А какой-нибудь простой участок кода x32 и x64 для сравнения можно выложить? Ну что бы любопытство своё унять так сказать...

 
KffAlex:


Уважаемые! В 3-ий раз обращаюсь с этой проблемой. Создание внешней библиотеки под Windows7 x64 приводит к определенным чудесам:


Прошу прощения за задержку. Ответил Вам в личке.

Приложите, пожалуйста исходники. Если возможно - оформите все через обращение в сервисдеск. Это сведет к минимуму вероятность подобных задержек.

Общайтесь с разработчиками через Сервисдеск!
Общайтесь с разработчиками через Сервисдеск!
  • www.mql5.com
Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы.
 
AlexSTAL:

Ничего себе... я в шоке...

А какой-нибудь простой участок кода x32 и x64 для сравнения можно выложить? Ну что бы любопытство своё унять так сказать...

 

Код навскидку дать не могу - под рукой нет характерного.

различия следующего характера.

  • Регистры 64 - 32 бита. Соответственно 64-битная арифментика укладывается в одну команду (в 32-битах деление двух 64-битных целых чисел делается за 40 ассемблерных команд)
  • 64-битных регистров больше. Соответственно адресация к регистрам - другая.
  • Соглашения о связях (calling convention) разные. Например, в 64 битах первые 4 параметра функции передаются в регистрах 
 
Надо бы добавит время оптимизации в МТ5. В МТ4 было и здесь это будет правильным фиксом)
 
Renat:

Локальные агенты после остановки теста еще 5 минут висят в памяти с поднятыми кешами в ожидании новых задач. Если за 5 минут их никто не нагрузит, они автоматически выгружаются с освобождением всех ресурсов.

Этот механизм ожидания позволил увеличить скорость реагирования агентов на повторных задачах за счет готовой/поднятой инфрраструктуры.

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

Использую 404-й билд. Я говорю о проблемах на удаленных агентах. Даже через 10 часов простоя память не освобождается. 

Еще несколько проблем:

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

Причем если остановить и запустить заново то эти нули не пересчитываются. Я запускаю на большом кол-ве процессоров и мешает то что 40-50 результатов нули и нет возможности пересчитать эти данные.

2. Иногда бывает что один из процессоров переходит на failed и при этом начинает возвращать нулевой результат по несколько за секунду. Но если остановить , то эти данные пересчитаются заново(оранжевое поле в таблице).

3.  При запуске удаленных агентов на 16 процессорах , интернет 1 мега аплоад не позволяет настолько быстро загрузить историю и очевидно из за таймаута все процессора уходят на failed. Если же включать по одному процессору то обычно это работает. Можно ли на системе с 16-ю процессорами загружать историю на первый процессор и потом уже копировать с него на остальные ? Ну или просто при загрузке истории увеличить таймаут. 

 
a483483:

Использую 404-й билд. Я говорю о проблемах на удаленных агентах. Даже через 10 часов простоя память не освобождается. 

Еще несколько проблем:

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

Причем если остановить и запустить заново то эти нули не пересчитываются. Я запускаю на большом кол-ве процессоров и мешает то что 40-50 результатов нули и нет возможности пересчитать эти данные.

2. Иногда бывает что один из процессоров переходит на failed и при этом начинает возвращать нулевой результат по несколько за секунду. Но если остановить , то эти данные пересчитаются заново(оранжевое поле в таблице).

3.  При запуске удаленных агентов на 16 процессорах , интернет 1 мега аплоад не позволяет настолько быстро загрузить историю и очевидно из за таймаута все процессора уходят на failed. Если же включать по одному процессору то обычно это работает. Можно ли на системе с 16-ю процессорами загружать историю на первый процессор и потом уже копировать с него на остальные ? Ну или просто при загрузке истории увеличить таймаут. 

 


Нужны логи агентов, настройки, символ, сервер.

Можно ЕХ5 эксперта, но лучше, конечно, исходник.

Желательно в сервисдеск.

 
KffAlex:
Данная проблема отсутствует, если функции перенести в тело программы, а на Windows XP такой проблемы просто нет!!! 
Похоже дело именно в битности (64/32), в Windows XP Вы работаете под 32 бита, поэтому ошибка не воспроизводится.
Пожалуйста создайте заявку в сервисдеск с приложенным проблемным EX5 файлом(файлами). (ваша ссылка в сервисдеск)
 

подскажите, ни как не дойдет как сравнить два числа, уже 2 дня

(дата сегодня) > (дата вчера)

          datetime bark[1];
          CopyTime(Symbol1,NULL,0,1,bark);
          if(bark[0]<=order)

 order - (дата вчера)

Или такое вобще невозможно? 

 

Написал вот что:

       for (uint k=0; k<66; k++)
         {
          datetime order=(datetime)HistoryDealGetInteger(ticket,DEAL_TIME);
          datetime bark[1];
          CopyTime(Symbol1,NULL,k,1,bark);
          if(bark[0]<=order)
            {

что-то тестер зацикливается и все тут

 
alexluek:

Написал вот что:

что-то тестер зацикливается и все тут

Время в будущем больше чем в прошлом, Ваш кусок кода не показателен, не понятно что Вы делаете в блоке if, и чего от него хотите...

Вот, на мой взгляд, исчерпывающая информация о сравнении времени :)

//+------------------------------------------------------------------+
//|                                                         test.mq5 |
//|                                                           mrProF |
//|                                                          http:// |
//+------------------------------------------------------------------+
#property copyright "mrProF"
#property link      "http://"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   datetime past=D'2010.12.1'; //Прошлое
   datetime future=D'2010.12.02'; //Будущее

   if(past<future)
     {
      Print(past," раньше чем: ",future);
     }

   datetime buffTime[1]; //Буфер для времени последнего бара
   CopyTime(_Symbol,_Period,0,1,buffTime); //Копируем время последнего бара

   if(buffTime[0]>past)
     {
      Print(past," раньше чем: ",buffTime[0]);
     }

  }
//+------------------------------------------------------------------+
Причина обращения: