![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Предполагается, по уму, что передача должна быть выполнена немедленно, без выполнения остального кода. Так?
А на деле TesterStop() Вовсе не останавливает тест!
Предполагается, по уму, если надо остановить дальнейшее выполнение кода просто написать return и продолжения не будет. А TesterStop() равно как и ExpertRemove()
И второй замеченный косяк в том, что
tester_stop = false;
совсем не на месте.
Предполагается, по уму, если надо остановить дальнейшее выполнение кода просто написать return и продолжения не будет. А TesterStop() равно как и ExpertRemove()
И второй замеченный косяк в том, что
совсем не на месте.
Следующее событие - это OnTick() ?
Куда из OnTick() можно сделать выход?
Это почему не на месте? Ожидалось, что если сработает TesterStop(), то до этой строки выполнение не дойдёт.
Следующее событие - это OnTick() ?
Куда из OnTick() можно сделать выход?
Это почему не на месте? Ожидалось, что если сработает TesterStop(), то до этой строки выполнение не дойдёт.
Куда выходить и что продолжать это дело разработчика.
В этом коде флаг tester_stop будет принимать значение false независимо от того будет-ли выполнен TesterStop()
Куда выходить и что продолжать это дело разработчика.
В этом коде флаг tester_stop будет принимать значение false независимо от того будет-ли выполнен TesterStop()
Так это то я уже понял )))
Вопрос в другом - чё делать? Как остановить тест? Конкретно. Разработчики чуть ли не матерятся, если использовать INIT_PARAMETERS_INCORRECT в OnInit(), да и генетику это ложит на лопатки.
Нашёл выход, до последнего времени проблем не было. А теперь ... ужасть просто )))
И всё же, куда можно выйти из OnTick()?
Так это то я уже понял )))
Вопрос в другом - чё делать? Как остановить тест? Конкретно. Разработчики чуть ли не матерятся, если использовать INIT_PARAMETERS_INCORRECT в OnInit(), да и генетику это ложит на лопатки.
Нашёл выход, но последнего времени проблем не было. А теперь ... ужасть просто )))
Ну если понял в чём проблема осталась?
Весь код после выполнения TesterStop выполняться не будет. То-есть получится немедленное прекращение работы. Дальше уже можно ориентируясь на флаг tester_stop регулировать...
И ещё вопрос: Что это за число такое придумал? Минус много девяток это что? попытка получить дополнительный гемор? Вот тут точно ужасть просто...
Ну если понял в чём проблема осталась?
Весь код после выполнения TesterStop выполняться не будет. То-есть получится немедленное прекращение работы. Дальше уже можно ориентируясь на флаг tester_stop регулировать...
И ещё вопрос: Что это за число такое придумал? Минус много девяток это что? попытка получить дополнительный гемор? Вот тут точно ужасть просто...
Минус много девяток - это для определения того, что выход был именно по TesterStop(). Он у меня используется исключительно как замена INIT_PARAMETERS_INCORRECT. Поэтому всё остальное после него не нужно. А сейчас получается так, что весь код выполняется и выскакивает ошибка деления на ноль. Естественно, если массив имеет размерность 1, то значение последнего минус значение первого всегда будет ноль! И от этого косяка, ой, извините, недоразумения я не страховался.
Попробовал вставить return... Только немного не туда ))) :
В итоге получил:
Просто офигеть )))
Огромаднейшее СПАСИБО!!!
Минус много девяток - это для определения того, что выход был именно по TesterStop(). Он у меня используется исключительно как замена INIT_PARAMETERS_INCORRECT. Поэтому всё остальное после него не нужно. А сейчас получается так, что весь код выполняется и выскакивает ошибка деления на ноль. Естественно, если массив имеет размерность 1, то значение последнего минус значение первого всегда будет ноль! И от этого косяка, ой, извините, недоразумения я не страховался.
Попробовал вставить return... Только немного не туда ))) :
В итоге получил:
Просто офигеть )))
Огромаднейшее СПАСИБО!!!
Спасибо, я это уже понял. Но это не решает проблему. Решить её можно либо константой MQL_TESTER_STOP, либо изменением возврата с void на bool.
Неожиданное решение подсказал Alexey Viktorov. Если после TesterStop() использовать return, то вроде всё нормализуется. Как и почему это происходит лично я догнать не могу... Тем не менее...
Отсюда, либо добавить этот момент в документацию, либо изменить void на bool.
П.С. С это проблемой я столкнулся на билде 2085. До этого проблем не было. На мой взгляд, это о чём-то да говорит? )))
Сергей, в этом нет ничего неожиданного. Наоборот всё закономерно и последовательно. Бывают разные случаи. Иногда надо перед завершением работы советника завершить обработку события до конца, иногда как в вашем случае срочно завершить. Вот и встаёт вопрос перед разработчиками, как правильней поступить, прервать однозначно, получив недовольство от тех кому надо завершить выполнение, или остановить после завершения обработки события. При этом у любого программиста есть в арсенале оператор return, а при принудительном завершении ничего нет.
И с какой целью вам понадобилось менять тип void на bool, ведь опять-же в арсенале программиста есть статические переменные которые можно до или после TesterStop() изменить и в принципе всё будет так как вы желаете. А вы зачем-то из моего примера это выкинули.
Сергей, в этом нет ничего неожиданного. Наоборот всё закономерно и последовательно. Бывают разные случаи. Иногда надо перед завершением работы советника завершить обработку события до конца, иногда как в вашем случае срочно завершить. Вот и встаёт вопрос перед разработчиками, как правильней поступить, прервать однозначно, получив недовольство от тех кому надо завершить выполнение, или остановить после завершения обработки события. При этом у любого программиста есть в арсенале оператор return, а при принудительном завершении ничего нет.
И с какой целью вам понадобилось менять тип void на bool, ведь опять-же в арсенале программиста есть статические переменные которые можно до или после TesterStop() изменить и в принципе всё будет так как вы желаете. А вы зачем-то из моего примера это выкинули.
Алексей, огромное Вам спасибо за помощь.
Вопрос стоящий перед разработчиками я понимаю, именно поэтому предлагаю такое решение. Чтобы была возможность правильно отреагировать на ситуацию.
Что касается статических переменных и Вашего примера, который я "выкинул"... Извините, но я не совсем понимаю о чём речь. Разъясните, если не затруднит.
И прошу о некотором снисхождении и терпении. У меня сейчас сложилась очень плохая жизненная ситуация, из-за которой я бываю очень раздражителен (я это понимаю, но пока ничего с этим поделать не могу) и не внимателен.
А тут вообще непонятки проскальзывают. Голова кругом...
Пример:
Из моего кода видно, что если последнее значение массива минус первое значение массива рано нулю, то результат должен быть -99999999999.88.
А при оптимизации получаю такой результат:
9587 - 10000 ну никак не равно нулю, а результат -99999999999.88. Как?!?!? Меня уже клинит...
Алексей, огромное Вам спасибо за помощь.
Вопрос стоящий перед разработчиками я понимаю, именно поэтому предлагаю такое решение. Чтобы была возможность правильно отреагировать на ситуацию.
Что касается статических переменных и Вашего примера, который я "выкинул"... Извините, но я не совсем понимаю о чём речь. Разъясните, если не затруднит.
И прошу о некотором снисхождении и терпении. У меня сейчас сложилась очень плохая жизненная ситуация, из-за которой я бываю очень раздражителен (я это понимаю, но пока ничего с этим поделать не могу) и не внимателен.
А тут вообще непонятки проскальзывают. Голова кругом...
Пример:
Из моего кода видно, что если последнее значение массива минус первое значение массива рано нулю, то результат должен быть -99999999999.88.
А при оптимизации получаю такой результат:
9587 - 10000 ну никак не равно нулю, а результат -99999999999.88. Как?!?!? Меня уже клинит...
Не знаю хорошо это или плохо, но я никогда не вникаю в весь код, потому и говорил о статической переменной. А судя по тому, что флаг tester_stop используется в разных частях программы, то этот флаг должен быть объявлен на уровне глобальных переменных.
Отсюда подтверждение того что вы необдуманно "выкинули" изменение значения флага из моего примера.
Вот ведь это использование
if(tester_stop) return(-99999999999.99);
А видимо этот флаг или вообще не меняется, или не меняется по причине того, что изменение предусмотрено не там где должно быть.
Иногда надо перед завершением работы советника завершить обработку события до конца.
При этом у любого программиста есть в арсенале оператор return, а при принудительном завершении ничего нет.
В данном контексте разве мы не можем делать проверку?