
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Так, почему эта проблема только с советеиками?
С индикаторами, даже более длинными, чем советник, такого не происходит.
Приложите к комментарию полный код некомпилируемого эксперта или вышлите его Славе по адресу stringo AT metaquotes ru (он удалит файл после тестов).
Приложите к комментарию полный код некомпилируемого эксперта или вышлите его Славе по адресу stringo AT metaquotes ru (он удалит файл после тестов).
Эксперт компилируется, только появляется активным в "Навигаторе" не с первой компиляции.
Вот такая ошибка при компиляции:
'stSum_Alert' - internal stack overflow-simplify the program, please E:\Market\Forex\MetaTrader - Alpari 4.00\experts\ZN_AIASM EXPERT 0-81028.mq4 (280, 69)
Возникает при превышении какой-то длины кода.
Сколько строк теперь не знаю, не считал, но точно, что более 30000.
Посчитал.
Компилируемый код без библиотек 8355 строк.
Закомметированы пока ещё около 10000 строк. Их когда-нибудь придёться открыть... :-(
Библиотеки не считал, потому, как их длина не влияет на появлении этой ошибки.
=============
Метаквоты, может можно убрать это ограничение?
Не хватило рабочего (внутреннего) стека для того, чтобы до конца раскрутить выражение, заключённое в фигурные скобки. Упрощение заключается в уменьшении количества вложений. Примерно так:
можно преобразовать в
Посчитал.
Компилируемый код без библиотек 8355 строк.
Закомметированы пока ещё около 10000 строк. Их когда-нибудь придёться открыть... :-(
Библиотеки не считал, потому, как их длина не влияет на появлении этой ошибки.
=============
Метаквоты, может можно убрать это ограничение?
Дело не в количестве строк кода вообще, а в количестве вложенных друг в друга блоков.
Если мы увеличим (и так немаленький) размер внутреннего стека, то с Вашим стилем программирования Вы быстро преодолеете и новое ограничение. Динамический же стек мы делать категорически не будем.
Дело не в количестве строк кода вообще, а в количестве вложенных друг в друга блоков.
Если мы увеличим (и так немаленький) размер внутреннего стека, то с Вашим стилем программирования Вы быстро преодолеете и новое ограничение. Динамический же стек мы делать категорически не будем.
Да, заметил это. Не написал.
Действительно, если закоментировать блоки в init(), то ошибка не исчезает, если в start(), то пропадает.
=========
То, что Вы предлагаете, можно решить, в большинстве случаев, через создание функций вместо "лишних" блоков.
Это ведёт к уменьшению скорости выполнения программы. Стиль такой - зачем создавать функцию, если эта функция вызывается только в одном месте?
У меня много вложенных друг в друга циклов. Заменить их можно только на функции. Вызов функции в цикле... Это тормоз.
А динамический стек это прекрасно! По крайней мере звучит красиво :-)
Опять проблема :-(
Может не такая ужасная...
Почему-то не компилируются с первого раза советники. Вернее компилируются, но они становятся не активными в навигаторе. Только повторное компилирование делает их активными в навигаторе. Раньше в прежних билдах такого не наблюдалось.
Правда, иногда получается и с первого компилирования.
По этой проблеме есть наблюдение.
Если в процессе компиляции в МЭ4 на вкладке "Ошибки" появляется сообщение об отсутствии ошибок до прекращения процесса "MetaLang", то эксперт в навигаторе неактивен.
Если после или в конце процесса "MetaLang", то эксперт в навигаторе становиться активен.
Провёл эксперимент.
В диспетчере задач выделил процесс "MetaLang". В процессе компилирования процесс исчез, а потом появился уже не выделенный.
Получается, что компилятор запускался два раза. Именно в такие моменты эксперт становиться неактивным в навигаторе.