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

 

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

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

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

 

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

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

 

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

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

 
Может быть грузить данные мелкими частями?
 
Использовать RAM Disk для чтения. Пробовал с МТ5 - более 1ГБ/с.
 
Andrey Dik:
Может быть грузить данные мелкими частями?
Да, мелкими частями. Вопрос чем удобнее всего разделять эти мелкие части.
 
Комбинатор:

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

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

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

 

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

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

 

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

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

Два вопроса

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

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

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

 

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


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

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

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

 

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

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

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

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

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

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

 
Andrey Dik:

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

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

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

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

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

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

Причина обращения: