Новая версия платформы MetaTrader 5 build 1860: Функции для работы с барами в MQL5 и улучшения в тестере стратегий - страница 10

 

К сожалению под новой компиляцией действительно падает скорость.

Старый
2018.06.23 16:04:06.490 Core 8  Si Splice,M1: 2805248 ticks, 701593 bars generated. Environment synchronized in 0:00:00.110. Test passed in 0:02:33.645 (including ticks preprocessing 0:00:00.577).
2018.06.23 16:04:06.490 Core 8  Si Splice,M1: total time from login to stop testing 0:02:33.755 (including 0:00:00.110 for history data synchronization)

Новый
2018.06.23 21:31:13.812 Core 8  Si Splice,M1: 2805248 ticks, 701593 bars generated. Environment synchronized in 0:00:00.109. Test passed in 0:02:38.029 (including ticks preprocessing 0:00:00.593).
2018.06.23 21:31:13.812 Core 8  Si Splice,M1: total time from login to stop testing 0:02:38.138 (including 0:00:00.109 for history data synchronization)

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

//+------------------------------------------------------------------+ 
//| Получим IOpen для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double iOpen_(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   double open=0;
   int copied=CopyOpen(symbol,timeframe,index,1,OpenI);
   if(copied>0) open=OpenI[0];
   return(open);
  }
//+------------------------------------------------------------------+ 
//| Получим iLow для заданного номера бара                            | 
//+------------------------------------------------------------------+ 
double iLow_(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   double low=0;
   int copied=CopyLow(symbol,timeframe,index,1,LowI);
   if(copied>0) low=LowI[0];
   return(low);
  }
//+------------------------------------------------------------------+ 
//| Получим iHigh для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double iHigh_(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   double high=0;
   int copied=CopyHigh(symbol,timeframe,index,1,HighI);
   if(copied>0) high=HighI[0];
   return(high);
  }
//+------------------------------------------------------------------+ 
//| Получим iClose для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double iClose_(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   double close=0;
   int copied=CopyClose(symbol,timeframe,index,1,CloseI);
   if(copied>0) close=CloseI[0];
   return(close);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+

int iBarShift_(string symbol,int tf,datetime time,bool exact=false)
  {
   if(time<0) return(-1);
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   datetime Arr[],time1;
   CopyTime(symbol,timeframe,0,1,Arr);
   time1=Arr[0];
   if(CopyTime(symbol,timeframe,time,time1,Arr)>0)
     {
      if(ArraySize(Arr)>2) return(ArraySize(Arr)-1);
      if(time<time1) return(1);
      else return(0);
     }
   else return(-1);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
datetime iTime_(string symbol,int tf,int index)
  {
   if(index < 0) return(-1);
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   datetime Arr[];
   if(CopyTime(symbol,timeframe,index,1,Arr)>0)
      return(Arr[0]);
   else return(-1);
  }
 
Aleksey Vyazmikin:

К сожалению под новой компиляцией действительно падает скорость.

Доказательства нужны железобетонные, а не на основе одиночного запуска. У вас разница в 4.5 секунды на 153 секундном промежутке, всего 3% и выглядит как погрешность.

Учтите, что в терминале и агентах огромнейшее влияние имеют кеши, накопленные данные и разные состояния горячести. Даже файловый кеш операционки запросто даст видимую разницу.

Чтобы результаты тестов были достоверными, нужно удовлетворить следующие условия:

  1. Убрать все лишние программы, вплоть до броузеров. Вне зависимости от того, что вы думаете о "да это не влияет, я же вижу что там 0-1% нагрузки".

  2. Перевести режим энергосбережения операционки в "Максимальная производительность" (а лучше выключить C-states в биосе), чтобы не скакала частота CPU и не чередовались режимы бустинга ядер.

    Это одна из самых частых ошибок в замерах производительности, когда люди вообще не обращают внимания, что у них частота процессора в рилтайме плавает от 1.5 до 3 ггц. Разброс это дает в десятки процентов иногда. У вас 3% разницы.

    Да, это надо делать и на десктопе, а не только на ноутбуке. Все процессоры давным давно работают в энергосберегающем режиме и при первой же возможности понижают частоту.

  3. Представить полные тестовые файлы и описания всех условий тестирования для публичного воспроизведения.

    Да, это обязательно.

  4. Провести 1 полное тестирование в обоих случаях, чтобы удостовериться, что все данные подкачаны на агента

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

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

  6. Запустить терминал и провести 3 одиночные теста в каждом режиме, обязательно перезапуская терминал, чтобы был холодный тест

После этого публикация 6 отчетов с указанием, что выполнены 6 условий выше, может приниматься как минимально приемлемое тестирование.
 

А что с вайном? Продублирую вопрос:

"Ренат, только перед отключением х32 наладьте запуск х64 под вайном, пожалуйста. Если не хотите/не будете, то тоже скажите, чтобы было время продумать варианты."

Я сам не пробовал на х64, но помню, что люди жаловались на то, что не запускается, с тех пор и сижу на х32.

 
pavlick_:

А что с вайном? Продублирую вопрос:

"Ренат, только перед отключением х32 наладьте запуск х64 под вайном, пожалуйста. Если не хотите/не будете, то тоже скажите, чтобы было время продумать варианты."

Я сам не пробовал на х64, но помню, что люди жаловались на то, что не запускается, с тех пор и сижу на х32.

С прошлой зимы все давно работает в 64 битном вайне. Или даже раньше.

 
Renat Fatkhullin:

Доказательства нужны железобетонные, а не на основе одиночного запуска. У вас разница в 4.5 секунды на 153 секундном промежутке, всего 3% и выглядит как погрешность.

Учтите, что в терминале и агентах огромнейшее влияние имеют кеши, накопленные данные и разные состояния горячести. Даже файловый кеш операционки запросто даст видимую разницу.

Чтобы результаты тестов были достоверными, нужно удовлетворить следующие условия:

  1. Убрать все лишние программы, вплоть до броузеров. Вне зависимости от того, что вы думаете о "да это не влияет, я же вижу что там 0-1% нагрузки".

  2. Перевести режим энергосбережения операционки в "Максимальная производительность" (а лучше выключить C-states в биосе), чтобы не скакала частота CPU и не чередовались режимы бустинга ядер.

    Это одна из самых частых ошибок в замерах производительности, когда люди вообще не обращают внимания, что у них частота процессора в рилтайме плавает от 1.5 до 3 ггц. Разброс это дает в десятки процентов иногда. У вас 3% разницы.

    Да, это надо делать и на десктопе, а не только на ноутбуке. Все процессоры давным давно работают в энергосберегающем режиме и при первой же возможности понижают частоту.

  3. Представить полные тестовые файлы и описания всех условий тестирования для публичного воспроизведения.

    Да, это обязательно.

  4. Провести 1 полное тестирование в обоих случаях, чтобы удостовериться, что все данные подкачаны на агента

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

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

  6. Запустить терминал и провести 3 одиночные теста в каждом режиме, обязательно перезапуская терминал, чтобы был холодный тест

После этого публикация 6 отчетов с указанием, что выполнены 6 условий выше, может приниматься как минимально приемлемое тестирование.

Да, конечно Вы правы, своими силами мне не выяснить истину в данном вопросе! Уровень мой слишком мал.

Можете экспертное дать заключение, какие функции быстрей, мной ранее использованные или те, что сейчас интегрированы в язык?

Просто я сравнил в своих условиях два варианта, увидел стабильную разницу, но быть может действительно, так получается случайно, что-то то всегда из внешних факторов заставляет компьютер работать медленней, ну к примеру какие либо службы шуршат на SSD с определенной периодичностью - не знаю, не могу создать лабораторный условий для своих утверждений.

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

 

Правильнее делать технические вещи технично.

Тогда будет уважение и почет вместо списка вопросов. И позиции обиженного не будет.

 
Renat Fatkhullin:

Правильнее делать технические вещи технично.

Тогда будет уважение и почет вместо списка вопросов. И позиции обиженного не будет.

Некогда мне обижаться!

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

 
Aleksey Vyazmikin:

Некогда мне обижаться!

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

«Гипотезы» принимаются только после чистого доказательства.

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

 
Renat Fatkhullin:

С прошлой зимы все давно работает в 64 битном вайне. Или даже раньше.

странно, вот совсем недавно

https://www.mql5.com/ru/forum/254081/page2#comment_7718449

Ну можетKonstantin  о чём-то другом говорил.

 
pavlick_:

странно, вот совсем недавно

https://www.mql5.com/ru/forum/254081/page2#comment_7718449

Ну можетKonstantin  о чём-то другом говорил.

Это совершенно другое, поддержка SSL сертификатов как расширенная модель авторизации на торговом сервере в Wine еще не работает.

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