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

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

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

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

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

 

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

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

 

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

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

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

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

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

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

 

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

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

 

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

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

Два вопроса

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

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

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

Igor Konyashin
2760
Igor Konyashin  

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


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

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

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

fxsaber
16737
fxsaber  

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

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

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

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

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

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

fxsaber
16737
fxsaber  
Andrey Dik:

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

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

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

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

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

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

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