![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Ну почему же нечего, когда она ловится? Вообще все подобные ошибки я нахожу этим способом. А "сомнительные формулы" разве чем-то принципиально отличаются от моего тестового кода? Функция GetLastError() должна ее ловить! Плюс проверки у меня практически везде стоят. И эксперту "сто лет в обед", все относительно недавние правки проверены. Ошибка же появляется лишь иногда. Может дело не в моем коде? В чем тогда?
Функция GetLastError(), если ловит, но не устраняет.
А ZeroNo избавляет от нежелательных нулей в знаменателях! При Флэте часто составляющие значения котировок повторяются, а у Вас может быть формула для анализа движения цены.
Поставьте сразу, не ожидая Zero и нет проблем, только не так, как у МММ! ;)
Перед любой операцией деления проверять условие: Знаменатель>Zero; а в глобальной секции:
#define Zero 0.00000001
Перед любой операцией деления проверять условие: Знаменатель>Zero; а в глобальной секции:
#define Zero 0.00000001
Да, код загромождается и хуже читается, а для меня сейчас 2000 строк - перегруз.
Но,- на безрыбии и сам раком станешь:)
Вот кстати, недавно натолкнулся на подобную ошибку. В выходной день. Сделал пошаговую распринтовку присваиваний и вычислений. Оказалось, что по какой то причине (подозреваю просто отсутствие связи с сервером, но это я не проверил тогда) выражение
double LotVal = MarketInfo(0,MODE_TICKVALUE);
возвращает = 0. Соответственно и
lot = NormalizeDouble(AccountFreeMargin()*MaximumRisk/(_Digits*PotPips*LotVal),2); также равен 0.
Советник просто останавливался.
Вот кстати, недавно натолкнулся на подобную ошибку. В выходной день. Сделал пошаговую распринтовку присваиваний и вычислений. Оказалось, что по какой то причине (подозреваю просто отсутствие связи с сервером, но это я не проверил тогда) выражение
double LotVal = MarketInfo(0,MODE_TICKVALUE);
возвращает = 0. Соответственно и
lot = NormalizeDouble(AccountFreeMargin()*MaximumRisk/(_Digits*PotPips*LotVal),2); также равен 0.
Советник просто останавливался.
А может быть, что на этом баре не было тиков?
И советник не должен останавливаться, а просто ждать тика! Проверьте код!
А может быть, что на этом баре не было тиков?
И советник не должен останавливаться, а просто ждать тика! Проверьте код!
При контроле открытия нового бара? Сам факт начала образования нового бара говорит о том что тик есть. Но это даже и не то, ошибка выходила при тестировании на истории. А там неважно есть тик или нет.Я добавил вот это double LotVal = MarketInfo(0,MODE_TICKVALUE);if (LotVal <1)LotVal =10;. Ошибка перестала появляться.
.
При контроле открытия нового бара? Сам факт начала образования нового бара говорит о том что тик есть. Но это даже и не то, ошибка выходила при тестировании на истории. А там неважно есть тик или нет.Я добавил вот это double LotVal = MarketInfo(0,MODE_TICKVALUE);if (LotVal <1)LotVal =10;. Ошибка перестала появляться.