Может быть грузить данные мелкими частями?
На самом деле для МТ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 не работает в индикаторах, поэтому всевозможные ухищрения с загрузкой данных частями не дадут должного эффекта - всё равно будут тормоза.
Я как то делал так - использовал связку, индикатор и советник, советник (не торговый) выполнял сложные расчеты и чтение из файлов, а индикатор только отображал расчитанное... Может быть как то так можно решить проблему с тормозами в индикаторе?
Вообще, проблема в том, что Sleep не работает в индикаторах, поэтому всевозможные ухищрения с загрузкой данных частями не дадут должного эффекта - всё равно будут тормоза.
Спасибо за варианты, но.
Это индикатор из маркета, читает большое количество мелких файлов.
Мне надо чтобы он не тормозил так сказать из коробки, без SSD, рам дисков и чтения другими сущностями.
Тормоза из-за того что IO операции в огромном количестве в GUI потоке, вычислений (почти) нет, оптимизировать чтение не получится, оно и так шустрое.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
На самом деле для МТ5 тоже актуально, но хоть сам терминал не тормозит, только поток графика.
Суть проблемы: есть индикатор, который читает отображаемые данные из файла.
Если запускать его на М1 на большой истории, он нещадно тормозит терминал пока загружается.
Есть ли какой-нибудь способ на время отпустить поток? Т.е. дать терминалу обработать события и продолжить обсчет.
Как кандидаты, вызов Sleep(0) или RefreshRates()
При этом желательно грузить данные для всего графика, т.е. все возможные данные, а не скажем последние 100 баров.
На крайний случай решение есть -- миллисекундный таймер на время долгой загрузки. Но хотелось бы поискать альтернативы.