Новая версия платформы MetaTrader 5 build 2530: Сортировка в Обзоре рынка и удобная работа с результатами оптимизации - страница 6

 
Anton:

Для экспертов и скриптов доступ радикально ускорен к 45 свойствам чарта из 58ми, по остальным существенных изменений нет.

Ваш код (после стайлера):

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

Да, очень жёсткий мой ляп.
Прошу прощения.

Файлы:
 
fxsaber:

На компе нет HDD, только SSD.

ЗЫ Стоит ли попробовать Терминал разместить на RAM-drive?

SSD могут очень тормозить, если там свободного места менее 25-30% (чем меньше, тем медленнее происходят операции удаления и записи). К тому же многие модели со временем начинают тормозить.

RAMd я бы попробовал, просто чтобы отсечь одну из причин.

 
Nikolai Semko:

Да, очень жёсткий мой ляп.
Прошу прощения.

Попробуйте добавить одну строчку в свой код:

   if(id==CHARTEVENT_MOUSE_MOVE)
     {
       int x=ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR, 0);

Т.е. буквально один синхронный запрос ДО всех замеров.

 
Edgar Akhmadeev:

RAMd я бы попробовал, просто чтобы отсечь одну из причин.

С нуля поставил на RAM-drive MT5 b2530. Оставил один символ в Обзоре рынка, отключил новости, один чарт, 5000 баров в окне.

Запустил советник на чарте. Первые пять минут.

2020.07.13 18:59:39.525 Alert: Time[NewTicks.mqh 31: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.07.13 19:00:01.353 Alert: Time[NewTicks.mqh 31: ::SymbolInfoTick(_Symbol,Tick)] = 10 ms.
2020.07.13 19:04:21.573 Alert: Time[NewTicks.mqh 31: ::SymbolInfoTick(_Symbol,Tick)] = 8 ms.
 

Билд 2530 установился (торговля ФОРТС)

Скорость выставления стала в 6-7 раз больше.

Стало:

2020.07.13 19:06:19.537 Trades  'ххххх': modify order #129085777 buy limit 1 RTS-3.22 at 112420 sl: 0 tp: 0 expiration: day -> 112620, sl: 0 tp: 0 expiration: day placed for execution in 28.962 ms
2020.07.13 19:06:19.845 Trades  'ххххх': modify order #129085777 buy limit 1 RTS-3.22 at 112620 sl: 0 tp: 0 expiration: day -> 114400, sl: 0 tp: 0 expiration: day placed for execution in 39.698 ms
2020.07.13 19:06:20.060 Trades  'ххххх': cancel order #129085777 buy limit 1 RTS-3.22 at 114400 placed for execution in 28.664 ms

Было

2020.07.09 23:45:21.569 Trades  'ххххх': modify order #128904343 buy limit 1 CHMF-12.20 at 77148 sl: 0 tp: 0 expiration: day -> 85711, sl: 0 tp: 0 expiration: day placed for execution in 5.476 ms
2020.07.09 23:45:49.315 Trades  'ххххх': sell limit 2 ROSN-3.21 at 38398 placed for execution in 7.068 ms
22020.07.09 23:45:49.340        Trades  'ххххх': modify order #128904404 sell limit 2 ROSN-3.21 at 38398 sl: 0 tp: 0 expiration: day -> 38396, sl: 0 tp: 0 expiration: day placed for execution in 5.561 ms
2020.07.09 23:45:49.355 Trades  'ххххх': modify order #128904404 sell limit 2 ROSN-3.21 at 38396 sl: 0 tp: 0 expiration: day -> 38387, sl: 0 tp: 0 expiration: day placed for execution in 5.647 ms
 

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


 
Anton:

Попробуйте добавить одну строчку в свой код:

Т.е. буквально один синхронный запрос ДО всех замеров.

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

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

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

Повторюсь, я у себя эту проблему уже давно решил с горем пополам, отслеживая событие CHARTEVENT_CHART_CHANGE и систематизируя запросы. (один из примеров реализации в классе
iCanvas). Просто постоянно на форуме возникает этот вопрос и недоумение во временной утечке при выполнении функций ChartGet. Ведь событие CHARTEVENT_CHART_CHANGE довольно редкое, а некоторые умудряются использовать функции ChartGet десятки тысяч раз только в одном кадре, где и микросекунды это непозволительная роскошь.

 
prostotrader:

Билд 2530 установился (торговля ФОРТС)

Скорость выставления стала в 6-7 раз больше.

Старый и новый билды параллельно запустите для сравнения.

 
fxsaber:

С нуля поставил на RAM-drive MT5 b2530. Оставил один символ в Обзоре рынка, отключил новости, один чарт, 5000 баров в окне.

Параллельно были запущены два Терминала: на SSD и RAM-drive. И уловил совпадение тормозов (обратите внимание на время).


RAM-drive.

2020.07.13 21:43:55.835 Alert: Time[NewTicks.mqh 41: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 102 ms.
2020.07.13 23:07:22.131 Alert: Time[NewTicks.mqh 41: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 2015 ms.
2020.07.14 00:14:18.051 Alert: Time[NewTicks.mqh 41: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 1566 ms.


SSD.

2020.07.13 21:43:55.835 Alert: Time[NewTicks.mqh 41: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 100 ms.
2020.07.13 23:07:20.468 Alert: Time[NewTicks.mqh 41: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 599 ms.
2020.07.14 00:14:16.692 Alert: Time[NewTicks.mqh 41: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 807 ms.


О чем это говорит?

 
fxsaber:

Параллельно были запущены два Терминала: на SSD и RAM-drive. И уловил совпадение тормозов (обратите внимание на время).


RAM-drive.


SSD.


О чем это говорит?

Мы сегодня пофиксили несколько мест, которые могли вносить задержки. Дело было не в диске, а в общей экосистеме виндовс сообщений.

Желательно обновляться на Windows 10 и апгрейдить железо.

Проверьте новую бету утром, пожалуйста.

Проблема ясна, будем дальше улучшать.
Причина обращения: