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

 
Vitaly Muzichenko #:

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

После 30000 сделок тестер просто неадекватен, идёт очень медленно и весь дёргается. Протестировать период за 3 месяца - это нереально.

Что можно сделать, чтобы тестирование не замедлялось, до 10000 всё в резво и в адеквате, объекты сделок удаляются, иначе тестирование невозможно в принципе.

Период в 1 месяц тестируется почти 1 час

Это баг, или фича от MQ, чтобы тестировать стратегии, у которых 10 сделок в год?

--


это древний, с момента рождения МТ5, семантический баг доступа с элементам таблицы объектов. Почему это не исправляют - для меня загадка. 
Удалите историю сделок или объекты на графике и нормальная производительность вернется. 
Еще одной, менее значимой, причиной тормозов является тот факт, что символы стрелок формируются как символы определенного шрифта ttf. Если бы они формировались просто графически (прямоугольник+треугольник+круг), то рендеринг бы этих символов был бы на 1-2 порядка быстрее. 

 
Nikolai Semko #:

это древний с момента рождения МТ5 семантический баг доступа с элементам таблицы объектов. Почему это не исправляют - для меня загадка. 
Удалите историю сделок или объекты на графике и нормаольная производительность вернется. 
Еще одним, менее значимой, причиной тормозов является тот факт, что символы стрелок формируются как символы определенного шрифта ttf. Если бы они формировались просто графически (прямоугольник+треугольник+круг), то рендеринг бы этих символов был бы на 1-2 порядка быстрее. 

Объектов нет, только история сделок, которая удаляется раз в неделю.

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

  static datetime Ptime=iTime(NULL,PERIOD_W1,0);
  if (Ptime != iTime(NULL,PERIOD_W1,0)) {
    ObjectsDeleteAll(0,"",0,-1);
    Ptime = iTime(NULL,PERIOD_W1,0);
  }

Это также должно ускорить тест

 
Vitaly Muzichenko #:

Объектов нет, только история сделок, которая удаляется раз в неделю.

есть. Просто надо нажать на кнопку "Все"

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

Это также должно ускорить тест

//+------------------------------------------------------------------+
// получает время открытия виртуального бара по входному времени и Таймфрейму, вне зависимости от того, существует реальный бар или нет.
// корректно считает только до 28.02.2100 !!!!
// не является заменой iBarShift!!! Не зависит от истории баров.
datetime getStartTimeOfBarFast(ENUM_TIMEFRAMES tf, datetime t) {
   if (tf==0) tf=_Period;

   int ts=0;
   if (tf<PERIOD_MN1) {
      ushort i_tf= ushort(tf);
      uchar _i =uchar(i_tf>>14);
      int n = i_tf & 0x0FFF;
      ts = (_i==0)?n*60:(_i==1)?n*60*60:60*60*24*7;
   }
   if (tf<PERIOD_W1) return t-t%ts;
   if (tf==PERIOD_W1) return t-(t+4*24*60*60)%ts;
   else { // Period MN1
      static const int dm[12] = {0,31,61,92,122,153,184, 214, 245, 275, 306, 337};
      static int last_days = 0;
      static datetime last_result = 0;
      int days = int(t/(24*60*60));
      if (last_days!=days) {
         last_days = days;
         int d1 = (days+306+365)%1461;
         int y = d1/365;
         datetime t1 = t - t%(24*60*60) - d1*24*60*60;
         int m = 0;
         if (d1==1460) {
            m=11;
            y--;
         };
         int d = d1-y*365+1;
         if (d!=31) if (d==276) m = 9;
            else m = int (d/30.68);
         if (m<0 || m>11) return -1;
         last_result = t1+y*365*24*60*60+dm[m]*24*60*60;
      }
      return last_result;
   }
}

https://www.mql5.com/ru/forum/170952/page235#comment_50523898

Особенности языка mql5, тонкости и приёмы работы - Попробуйте сравнить работу функции. Сравнивать нужно на любых TF, кроме MN1.
Особенности языка mql5, тонкости и приёмы работы - Попробуйте сравнить работу функции. Сравнивать нужно на любых TF, кроме MN1.
  • 2023.11.13
  • fxsaber
  • www.mql5.com
Да и доступ к элементам массива очень сильно тормозит алгоритм. Более быстрая реализация стандартной функции Посмотрел формат. А теперь все это еще перегнать в матрицы и ONX ну да. Достаточно сравнить работу функции Сравнивать нужно на любых TF
 
Nikolai Semko #:

есть. Просто надо нажать на кнопку "Все"

Как это использовать в моём случае, что-то недопонимаю?

 
Vitaly Muzichenko #:

Как это использовать в моём случае, что-то недопонимаю?

не понимаю что необходимо. 
Если объектов на видимой части графика слишком много (тысячи), то начинаются тормоза. Есть вариант удалить эти объекты(проще просто отключить показ торговой истории), если они не нужны. Если нужны, тогда уменьшить таймфрейм, чтобы разрядить их.

 
Nikolai Semko #:

не понимаю что необходимо. 
Если объектов на видимой части графика слишком много (тысячи), то начинаются тормоза. Есть вариант удалить эти объекты(проще просто отключить показ торговой истории), если они не нужны. Если нужны, тогда уменьшить таймфрейм, чтобы разрядить их.

не таймфрейм - масштаб ;-)

чем меньше объектов влезает в видимую часть тем быстрее работает тестер. Поэтому максимальное увеличение = максимальная скорость

и старые/ненужные объекты конечно надо удалять..

 
Nikolai Semko #:

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

Сейчас их удалю раз в неделю, но при этом в тестере вызывается период W1

  static datetime Ptime=iTime(NULL,PERIOD_W1,0);
  if (Ptime != iTime(NULL,PERIOD_W1,0)) {
    ObjectsDeleteAll(0,"",0,-1);
    Ptime = iTime(NULL,PERIOD_W1,0);
  }

Хотелось-бы кастомную функцию, которая не открывает график W1

Тест на М1, но открывает также W1, потому что он используется для удаления объектов 


 
Maxim Kuznetsov #:

не таймфрейм - масштаб ;-)

чем меньше объектов влезает в видимую часть тем быстрее работает тестер. Поэтому максимальное увеличение = максимальная скорость

и старые/ненужные объекты конечно надо удалять..

ну тогда уж - таймфрейм и (или) масштаб

 
Vitaly Muzichenko #:

Сейчас их удалю раз в неделю, но при этом в тестере вызывается период W1

Хотелось-бы кастомную функцию, которая не открывает график W1

Тест на М1, но открывает также W1, потому что он используется для удаления объектов 

привел же выше