![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Лично я вижу, что при первом же вызове OnTester() мы получаем размер неинициализированного массива balance_arr[], а он может быть любым.
Так делать нельзя. Неудивительно, что в одном билде - все работает, там этот "любой" размер, скажем, равен десяти, а сейчас (он ведь "любой") - может быть равен нулю.
Как не видите?
И далее он дополняется. А в OnTester уже идёт обращение к полностью заполненному массиву...К проблеме отношения не имеет.
К проблеме отношения не имеет.
Нет.
)))
Я лично полагаю, что это излишество. Для оптимизации не имеющее смысла. Но вот источником проблемы, теоретически, вполне может быть. Если при оптимизации отрицательный баланс каким-то чудом вдруг передаётся следующим проходам...
)))
Я лично полагаю, что это излишество. Для оптимизации не имеющее смысла. Но вот источником проблемы, теоретически, вполне может быть. Если при оптимизации отрицательный баланс каким-то чудом вдруг передаётся следующим проходам...
Проверил. Оптимизация начинается с "правильным" балансом.
Как не видите?
И далее он дополняется. А в OnTester уже идёт обращение к полностью заполненному массиву...Я вижу функцию time_Attitude(), и не вижу, чтобы она обязательно вызывалась перед OnTick()
Вижу типичную опасность возникновения неинициализированных переменных, что, видимо, и происходит.
Ты говоришь, что "эта функция вызывается на новом баре" - но ведь первая функция, которая на нем вызывается - это именно OnTick()
Сергей, на мой взгляд, следует убедиться в том, что эта функция обязательно вызывается перед OnTick() - скорее всего, в OnInit(), еще ДО прихода первого бара.
И, давай на "ты", что ты мне "выкаешь"...
Я вижу функцию time_Attitude(), и не вижу, чтобы она обязательно вызывалась перед OnTick()
Вижу типичную опасность возникновения неинициализированных переменных, что, видимо, и происходит.
Ты говоришь, что "эта функция вызывается на новом баре" - но ведь первая функция, которая на нем вызывается - это именно OnTick()
Сергей, на мой взгляд, следует убедиться в том, что эта функция обязательно вызывается перед OnTick() - скорее всего, в OnInit(), еще ДО прихода первого бара.
И, давай на "ты", что ты мне "выкаешь"...
Давай на "ты" )))
Вот так сейчас вызывается эта функция:
Честно говоря я не вижу смысла вызывать эту функцию из OnInit. Но, возможно, ты прав. Сейчас организую.
Добавил вызов функции в OnInit и отредактировал саму функцию:
Как я и предполагал - ничего не изменилось ((
Нашёл я причину этого безобразия.
Дело вот в этом:
Оказывается в новом релизе после TesterStop() запускается ещё и OnTester(), хотя, по уму, запускаться не должен.
Естественно, никакие данные не подготавливаются, вот и получается чёрте что.
Косяк МТ 2085.
Нашёл я причину этого безобразия.
Дело вот в этом:
Оказывается в новом релизе после TesterStop() запускается ещё и OnTester(), хотя, по уму, запускаться не должен.
Естественно, никакие данные не подготавливаются, вот и получается чёрте что.
Косяк МТ 2085.
Извиняюсь. В описании как раз и написано, что после вызывается OnTester(). (((
Приходится ещё и там делать проверки. Попробую заменить на ExpertRemove()...