Скачать MetaTrader 5

MQL4 -- как растормозить поток?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Публикуй программы в Code Base. Увеличивай свой рейтинг!
Комбинатор
15919
Комбинатор 2016.10.23 16:04 

На самом деле для МТ5 тоже актуально, но хоть сам терминал не тормозит, только поток графика. 

Суть проблемы: есть индикатор, который читает отображаемые данные из файла.

Если запускать его на М1 на большой истории, он нещадно тормозит терминал пока загружается.

 

Есть ли какой-нибудь способ на время отпустить поток? Т.е. дать терминалу обработать события и продолжить обсчет.

Как кандидаты, вызов Sleep(0)  или RefreshRates()

 

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

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

Andrey Dik
11217
Andrey Dik 2016.10.23 16:16  
Может быть грузить данные мелкими частями?
Yuriy Asaulenko
3314
Yuriy Asaulenko 2016.10.23 16:19  
Использовать RAM Disk для чтения. Пробовал с МТ5 - более 1ГБ/с.
Комбинатор
15919
Комбинатор 2016.10.23 16:26  
Andrey Dik:
Может быть грузить данные мелкими частями?
Да, мелкими частями. Вопрос чем удобнее всего разделять эти мелкие части.
new-rena
3372
new-rena 2016.10.23 16:51  
Комбинатор:

На самом деле для МТ5 тоже актуально, но хоть сам терминал не тормозит, только поток графика. 

Суть проблемы: есть индикатор, который читает отображаемые данные из файла.

Если запускать его на М1 на большой истории, он нещадно тормозит терминал пока загружается.

 

Есть ли какой-нибудь способ на время отпустить поток? Т.е. дать терминалу обработать события и продолжить обсчет.

Как кандидаты, вызов Sleep(0)  или RefreshRates()

 

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

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

Два вопроса

1. Каким образом сформирован файл?

2. Может быть запускать заполнение файла или индикатор после запуска терминала?

Вопросы исходя из мысли: проще загрузить терминал в нормальном режиме и нагрузить объемом вычислений постепенно

Igor Konyashin
3108
Igor Konyashin 2016.10.23 17:02  

Дам хардварные, если так можно выразиться, советы:


1. Использовать для чтения из файла SSD-диск или RAM-диск, как было предложено выше.

2. Дать высокий приоритет процессу terminal64.exe. Вручную в Диспетчере задач - временно, или через реестр - постоянно (reg-файлик прикрепляю для 64-битного терминала. Для 32-битного надо отредактировать файл, убрать там "64")

3. Если у проца 4 и более ядер - сделать равномерный разброс приложения на ядра, и отключить парковку виндой оставшихся ядер. Статейка на этот счет. И комментарии там очень важны!. Hyper-threading лучше отключить в БИОСЕ.

fxsaber
4400
fxsaber 2016.10.23 17:06  

Через iCustom запустить считывалку на другом символе. Затем, как данные будут готовы, забрать их через CopyBuffer и считывалку грохнуть.

Для считывалки отдельный EX5 не создавать. Достаточно в своем индикаторе иметь режим запуска и считывалки. Соответственно, в iCustom указывать нужный режим.

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

Andrey Dik
11217
Andrey Dik 2016.10.23 17:37  
Комбинатор:
Да, мелкими частями. Вопрос чем удобнее всего разделять эти мелкие части.

Вообще, проблема в том, что Sleep не работает в индикаторах, поэтому всевозможные ухищрения с загрузкой данных частями не дадут должного эффекта - всё равно будут тормоза.

Я как то делал так - использовал связку, индикатор и советник, советник (не торговый) выполнял сложные расчеты и чтение из файлов, а индикатор только отображал расчитанное... Может быть как то так можно решить проблему с тормозами в индикаторе? 

fxsaber
4400
fxsaber 2016.10.23 17:58  
Andrey Dik:

Вообще, проблема в том, что Sleep не работает в индикаторах, поэтому всевозможные ухищрения с загрузкой данных частями не дадут должного эффекта - всё равно будут тормоза.

Так можно все организовать через GetMicrosecondCount. Считываем из файла, пока не уперлись в заранее выставленный лимит по времени. Запомнили место в файле для следующего раза и вышли.
fxsaber
4400
fxsaber 2016.10.23 18:00  
Есть вариант еще запускать индикатор через советник-считывалку (открыть новый чарт для него). По окончании считывания ExpertRemove с ChartClose. А индикатор продолжит работать.
Комбинатор
15919
Комбинатор 2016.10.23 18:12  

Спасибо за варианты, но.

Это индикатор из маркета, читает большое количество мелких файлов.

Мне надо чтобы он не тормозил так сказать из коробки, без SSD, рам дисков и чтения другими сущностями.

Тормоза из-за того что IO операции в огромном количестве в GUI потоке, вычислений (почти) нет, оптимизировать чтение не получится, оно и так шустрое.

1234
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий