Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вы считаете единственным методом контроля задержек использование устаревшего на 30 лет Sleep из WinAPI? И на основании этого архаичного архитектурного недостатка IBM PC+Windows системы строите вопрос?
У него чудовищный лимит на основе тикового генератора, который по факту работает с частотой дискретизации до 16 мс. И даже метод его ускорения до 1 мс через timeBeginPeriod(1) разгон мультимедийного таймера не очень помогает.
Поэтому в вопросах точного замера микро и миллисекунд секунд нужно использовать спиновый/ожидающий Sleep:
Обычный Sleep плавает в широких диапазонах от 1000 до 16000 микросекунд, а ожидающий отмеряет точно.
Обычный и дешевый по CPU ресурсам Sleep используется для грубой задержки в режиме "подождать, отдать ресурсы на сторону, мне терять нечего" и не применим в low latency учете. Рациональность такого подхода понять можно - экономится CPU.
В тех местах, где точность критична, все массово используют спиновый/крутящийся режим. В нем поток выполнения/контекст не высвобождается, кванты времени не отдаются и 1 ядро CPU часто загружается на 100%.
Более щадящий CPU метод ожидания можно сделать через недокументированные NtSetTimerResolution / NtDelayExecution функции. Но он, как и timeBeginPeriod, может оказывать негативное влияние на общую систему.
Решение точного замера ожидания в любом случае доступно. Но мы можем добавить дополнительную функцию SleepPrecise(int microseconds) с повышенными затратами CPU.
Теперь о VPS:
вообще аренда классического дешевого Windows Server + Desktop GUI VPS - это техническое самоубийство, если речь идет о снижении задержек и достаточности ресурсов. по ссылке выше все разжевано
заинтересовался этой паузой
Нельзя ли уточнить какие nop команды есть в MQL?
Гугл поиск ничего не дал, но встроенный в Гугл ИИ выдал/придумал несуществующие команды и даже историю их жизни ))):
Ни одну из них компилятор не принимает.
Или тут вызов системных DLL имеется в виду? В маркет нe пройдет.
Может сделаете свой SleepMicro() c nop?
Ожидание в режиме спинлока так и делается:
Вот пример:
и результат:
Учтите, что со спинлоком вы гарантированно 1 ядро загоните в 100%. За что могут быть последствия.
Спинлоковые задержки показывают ошибочность подхода в обычных приложениях.
Их используют в исключительных и осознанных случаях, когда четко отдают себе отчет, что делают и сколько ядер выводят из обслуживания. Вместе со спинлоком в рамках realtime/high frequency/low latency задач нужно жестко выставлять affinity mask на одно выбранное ядро, чтобы избежать дисперсии времени реакции.
Сразу отвечу, что на системном уровне железа/процессора/операционки нет экономных методов "подождать X микросекунд". Поэтому - только спинлок и 100% CPU.
Здравствуйте! Арендую сервер на MQL, терминал MT4. Cоветник почему постоянно пропадает с графика, при этом выполняется DeInit, ни ошибок ни багов. Советник просто открывает - закрывает сделки. Управляет всем индикатор, общаются меж собой через глобалки. При этом на половине графиков может быть всё норм, на другой половине вылетает. Может вылететь на одном из всех. Может пару дней проработать и всё норм, бывает по два раза в день. Открыто около 10 графиков. Советники меж собой ни как пересечься не могут, в имени глобалки и ChartID и инструмент. Думал сделать защиту через загрузку шаблона, но при программной загрузке шаблона выставляется запрет на торговлю. При этом аналогичный советник дома с ноута работал без каких либо проблем около месяца. Может кто сталкивался, подскажите что делать?