Новая версия платформы MetaTrader 5 build 3550: улучшения и исправления - страница 28

 
Maxim Kuznetsov #:

какие там могут быть математические операции с ценой ?? чего курим...

Без комментариев!

 
Roman #:

Без комментариев!

напрягись, попробуй всё таки прокомментировать..какие операции с ценой могут быть на стороне сервера ?

 
fxsaber #:

Как практикуете наименования тогда?

Может правильно использовать практики из С++ при написании программ. На мой взгляд криво прямо но язык MQL никуда не уйдет от общепринятой дороги а эдитор без AI просто забросят так как бюджеты Visual studio на порядок больше. 

 
Maxim Kuznetsov #:

напрягись, попробуй всё таки прокомментировать..какие операции с ценой могут быть на стороне сервера ?

Причём тут сторона сервера? Речь была о стороне клиента.
Фид отправляет значение, а терминал принимает его в тип double или float.
Что тут не понятного?

А математические операции с типом double/float (на стороне клиента) были приведены как пример, на вопрос как может цена получаться не нормализованной.
Привел же простой пример с позицией на неттинге, набранной в несколько сделок.
Позиция будет усреднена максимально точно.
 

@Ilyas, долго искал причину тормозов (бэктест) в большом коде и вот какую ужасную (в плане производительности) особенность MQL5 (b3580) обнаружил.

struct STRUCT1
{
  uchar Array[4];
};

struct STRUCT2
{
  uchar Array0, Array1, Array2, Array3;
};

template <typename T>
T f()
{
  static const T Tmp;
  
  return(MathRand() ? Tmp : Tmp); // Борьба с оптимизатором.
}
  
void OnStart()
{
  int Res = 0;

  const ulong StartTime = GetMicrosecondCount();
  
  for (int i = 0; i < 1e8; i++)
    Res += f<STRUCT1>().Array[0]; // 2178652 mcs.
//    Res += f<STRUCT2>().Array0; // 243562 mcs.

  Print(GetMicrosecondCount() - StartTime);   
  Print(Res);    
}

Копирование простой структуры, в которой задан массив, происходит на порядок медленнее, чем если массив заменить на аналогичные поля!


Профилировщик сразу показал причину.

ArrayCopy для простой структуры?! Только представьте размер экологического следа такого решения!

Прошу исправить, как можно скорее, работу с простыми структурами.

Строка для поиска: Uluchshenie 059.
 
fxsaber #:

@Ilyas, долго искал причину тормозов (бэктест) в большом коде и вот какую ужасную (в плане производительности) особенность MQL5 (b3580) обнаружил.

Копирование простой структуры, в которой задан массив, происходит на порядок медленнее, чем если массив заменить на аналогичные поля!


Профилировщик сразу показал причину.

ArrayCopy для простой структуры?! Только представьте размер экологического следа такого решения!

Прошу исправить, как можно скорее, работу с простыми структурами.

Строка для поиска: Uluchshenie 059.

Спасибо за сообщение.

Действительно при автогенерации оператора копирования для полей-массивов используется вызов ArrayCopy.

Исправлю, для массивов фиксированного размера буду использовать прямое копирование памяти там, где это возможно.



UPD: сделано
 
Ilyas #:

UPD: сделано

Спасибо, с нетерпением ждем нового билда, чтобы все проверить по горячим следам.


Уточняющий вопрос по профилировщику.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

О профилировщике кода MT5

Ilyas, 2021.07.28 19:26

SelfCPU - нагрузка на код функции, без учёта вызванных функций.

TotalCPU показывает нагрузку ветки выполнения, по всем вызовам в этой ветке программы.

SelfCPU функции равен TotalCPU этой функции минус TotalCPU всех внутри вызванных функций?

В каких случаях предполагается польза от счетчика SelfCPU?
 

Не отображается история торговли  GIF для просмотра нужно кликнуть


 
fxsaber #:

Спасибо, с нетерпением ждем нового билда, чтобы все проверить по горячим следам.


Уточняющий вопрос по профилировщику.

SelfCPU функции равен TotalCPU этой функции минус TotalCPU всех внутри вызванных функций?

В каких случаях предполагается польза от счетчика SelfCPU?

SelfCPU указывает на время работы кода функции

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

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

 
Ilyas #:

Отсортируйте функции по данному счётчику и узнаете, какая из функций сатистически выполняется чаще остальных.

С большой долей вероятности, "узкие" места именно в таких функциях.

Спасибо!

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

Среди этих MQL функций, что не инлайнятся, ToltaCPU == SelfCPU?