MT5 и скорость в боевом исполнении - страница 85

 
Anton:

@Anton, во многих штатных функциях можно вместо символа указывать NULL. Влияет ли это на скорость выполнения?

SymbolInfoTick(NULL, Tick);

SymbolInfoTick(_Symbol, Tick);

Или никакой разницы для Терминала/Тестера?

 
fxsaber:

@Anton, во многих штатных функциях можно вместо символа указывать NULL. Влияет ли это на скорость выполнения?

Или никакой разницы для Терминала/Тестера?

Я с уверенностью сказать не могу, но интуитивно никогда не пишу NULL нигде.

Теоретически, не должно влиять. Думаю при компиляции NULL меняется на нормальное значение, а глазами мне не нравится видеть непонятно что.

 
Alexey Viktorov:

Я с уверенностью сказать не могу, но интуитивно никогда не пишу NULL нигде.

Теоретически, не должно влиять. Думаю при компиляции NULL меняется на нормальное значение, а глазами мне не нравится видеть непонятно что.

Аналогично. Но волнует скорость.

 

Не понимаю, как в секундном таймере на выходных может тормозить SymbolInfoTicks?!

2021.02.28 21:33:02.993 ::SymbolInfoTick(_Symbol,Tick) = 171 mcs.

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

Чему здесь тормозить в выходной день?!


ЗЫ 3374 MB на скрине - это час назад запросил тики за неделю. Экономия ресурсов такая.

 
fxsaber:

Не понимаю, как в секундном таймере на выходных может тормозить SymbolInfoTicks?!

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

Чему здесь тормозить в выходной день?!

У вас:

  1. недостаток информации
  2. пару десятков потоков экспертов, работающих параллельно на 4 ядрах (8 с гипертредингом можно не учитывать)
  3. снова найден одиночный выброс из долгого ожидания?
  4. снова одиночный рандомный системный латенси по воле диспетчера потоков?


 
Renat Fatkhullin:

У вас:

  1. недостаток информации
  2. пару десятков потоков экспертов, работающих параллельно на 4 ядрах (8 с гипертредингом можно не учитывать)
  3. снова найден одиночный выброс из долгого ожидания?
  4. снова одиночный рандомный системный латенси по воле диспетчера потоков?

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

 
fxsaber:

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

Не является.

Вы всегда в любом месте любой программы будете ловить рандомные задержки. Начните следить за всем и ужаснетесь реалиям Windows. Я это уже несколько раз объяснял в деталях.

Мы тоже в свое время удивлялись, когда ловили рандомные выбросы 60-80 мс вместо 0 мс на системных WinAPI функциях.


Сейчас мы массово переводим большую часть своих Windows решений на специально обезжиренные Windows Server 2019 Core версии, а .NET Core веб-проекты на Линукс. Это дает громадную экономию по системным ресурсам и серьезно снижает системные задержки.

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

Уже выяснилось, что мы:

  • чрезмерно долго удерживаем лишние потоки
  • чрезмерно масштабируемся
  • передерживаем кеши
К следующему релизу мы шаг за шагом пофиксим часть ресурсных проблем.
 
Alexey Viktorov:

Теоретически, не должно влиять. Думаю при компиляции NULL меняется на нормальное значение, а глазами мне не нравится видеть непонятно что.

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

SymbolInfoTick(_Symbol, Tick);

_Symbol передается не по значению (как это следует из описания в Справке), а по ссылке

 
Renat Fatkhullin:

Не является.

Вы всегда в любом месте любой программы будете ловить рандомные задержки. Начните следить за всем и ужаснетесь реалиям Windows. Я это уже несколько раз объяснял в деталях.

Спасибо, проверю.


Просьба подумать о такой функции.

int SymbolInfoTicks( const string Symb, MqlTick &Ticks[] ); // Возвращает свежие тики (не более сотни), пришедшие с предыдущего вызова этой функции.


Проблема получения СВЕЖИХ тиков без пропусков сейчас решается только через CopyTicks*. Это очень громоздкий механизм для данной распространенной задачи. Как из пушки по воробьям.

Отсюда тормоза, удержание огромных кешей и т.д.

 
A100:

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

_Symbol передается не по значению (как это следует из описания в Справке), а по ссылке

Внутри функции еще нужно перейти к соответствующему символу тику. Это время на анализ string-переменной. С NULL такого делать ненужно.