Ошибки, баги, вопросы - страница 3560
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Ошибка в \Inclide\Charts\Chart.mqh
метод CChart::VisibleBars(void)
#999 return((int)ChartGetInteger(m_chart_id,CHART_WIDTH_IN_BARS));
Должно быть return((int)ChartGetInteger(m_chart_id,CHART_VISIBLE_BARS));
На заметку разработчикам платформы MT5 и программистам MQL5.
При повышении нагрузки на процессор становится критически важным все циклические операции, такие как for и while (while с большей вероятностью). Если загрузка процессора близка к 100% (например, агентами оптимизатора и другими нагрузками), то такие циклические операции приводят к зависанию программы MQL5 на чарте. Причем профилирование не может выявить проблемных мест в коде. Логического объяснения явлению не обнаружил.
К сожалению, не могу привести воспроизводимый пример, просто кто заинтересован - имейте ввиду. Намучался. Если есть в коде whilе, то держите в уме, что при загрузке процессора другими задачами (не касающиеся данной программы), то такая программа может вызывать нежданные висяки исполнения - программа (эксперт или скрипт, на индикаторах не пробовал) просто зависает и ничего не делает, при этом терминал работает нормально и отзывчиво.
for и while (while с большей вероятностью). Если загрузка процессора близка к 100%
циклы сами по себе могут сделать нагрузку близкую к 100%.. например пустой цикл :-)
просто не надо цикле опрашивать состояние, оно не поменяется. Если в советнике есть "while не_пришёл_следующий_тик {...}" то вы делаете что-то не то и не так
циклы сами по себе могут сделать нагрузку близкую к 100%.. например пустой цикл :-)
просто не надо цикле опрашивать состояние, оно не поменяется. Если в советнике есть "while не_пришёл_следующий_тик {...}" то вы делаете что-то не то и не так
циклы сами по себе могут сделать нагрузку близкую к 100%.. например пустой цикл :-)
просто не надо цикле опрашивать состояние, оно не поменяется. Если в советнике есть "while не_пришёл_следующий_тик {...}" то вы делаете что-то не то и не так
Вот неправильные пчёлы:
А вот правильные:
Вот неправильные пчёлы:
А вот правильные:
когда ваши "правильные пчёлы" будут не в OnStart() а в OnTick() то принесут они отнюдь не мёд ;-)
будет ситуация близкая к описываемой Андреем, всё встанет колом.
не надо в событийно управляемом софте ( в советнике, где всё на обработчиках OnXXX ) делать циклы ожидания событий.
когда ваши "правильные пчёлы" будут не в OnStart() а в OnTick() то принесут они отнюдь не мёд ;-)
будет ситуация близкая к описываемой Андреем, всё встанет колом.
не надо в событийно управляемом софте ( в советнике, где всё на обработчиках OnXXX ) делать циклы ожидания событий.
А зачем делать в OnTick() зацикленные вещи? Что Вы мне прописные истины рассказываете?
не надо в событийно управляемом софте ( в советнике, где всё на обработчиках OnXXX ) делать циклы ожидания событий.
При работе с событиями - да, всё верно и понятно. Но проблема может возникнуть там, где её совсем не ожидаешь, например, в каких нибудь математических расчётах (в том же алглиб активно и повсеместно используются while).
А зачем делать в OnTick() зацикленные вещи? Что Вы мне прописные истины рассказываете?
это ты начал сыпать прописью про пчёл и разгрузку длинных циклов переключением контекста (слипом)..там кстати можно было обойтись https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-switchtothread