Ошибки, баги, вопросы - страница 2000
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
А уже в OnCalculate это делать бессмысленно. Какой резон чем-то инициализировать массив и тут-же его заполнять какими-то значениями из формулы? При добавлении бара, соответственно и ячейки массива, какой смысл его заполнять чем-то и сразу-же значением из формулы или пустым значением?
Это если формула применяется на всех барах. А если только на последних? У меня например полно индюков, которые позволяют задать количество просчитываемых баров, т.к. вычисления бывают тяжелые. Инициализация нужна.
В общем, кто не хочет, пусть не делает. Я это больше не обсуждаю. ;-)
Так там речь идет не про ArrayResize, а про ArrayInitialize. ArrayResize гарантирует забивание нулями в MT4.
А если внимательно почитать? Еще раз процитирую.
Инициализация массива выражением ArrayInitialize(array, init_val) не означает инициализацию этим же значением и элементов резерва, выделенного для этого массива. При последующих увеличениях размера массива array функцией ArrayResize() в пределах текущего резерва, в конец массива добавляются элементы, значения которых не определены и, чаще всего, не равны init_val.
А если внимательно почитать? Еще раз процитирую.
Инициализация массива выражением ArrayInitialize(array, init_val) не означает инициализацию этим же значением и элементов резерва, выделенного для этого массива. При последующих увеличениях размера массива array функцией ArrayResize() в пределах текущего резерва, в конец массива добавляются элементы, значения которых не определены и, чаще всего, не равны init_val.
А зачем выдумывать такие нереалистичные сценарии, по сути ошибки MQL программиста? Очевидно, что полная инициализация делается лишь однажды или в случае обнаружения докачки данных. В этом случае, её эффективнее сделало бы ядро.
Где я говорил о двойной инициализации? Как раз о том же, упомянутом выше, заполнении всех элементов в цикле, говорил. Если оно есть, инициализация не нужна и только израсходует ресурсы вхолостую.
Ну, а если вы считаете не все бары, то позаботитесь о заполнении нулями самостоятельно.
Это если формула применяется на всех барах. А если только на последних? У меня например полно индюков, которые позволяют задать количество просчитываемых баров, т.к. вычисления бывают тяжелые. Инициализация нужна.
В общем, кто не хочет, пусть не делает. Я это больше не обсуждаю. ;-)
Вот золотые слова... но лучше сказать "где не надо, там делать не будем". Или наоборот "будем делать только там, где есть в этом необходимость".
Инициализируются только новые элементы массива. А смысл все тот же - идентичность результатов от запуска к запуску, даже если в коде ошибка (часто не своя). Пример с мат. библой привел выше.
Мусор - зло.
Я даже приличных слов не нахожу для комментария этого.
Ну ведь если вам предложат намазаться ... вряд-ли вы на это согласитесь. Ну, допустим что в первый раз вы не распознали что это такое, то второй-то раз???
Ну почему вы требуете разработчиков защитить вас от дерьма? Защититесь сами. Или если есть неопровержимые аргументы в пользу того что это обязательно надо, то уж не скрывайте их от общественности.
Ну был mql3 где можно было таких ошибок понаписать, что волосёнки дыбом встают... а советнику всё до одного места он по-любому работает... а правильно-ли он работает? кого это интересовало???
Почему-то нет споров по поводу выхода за пределы массива. А казалось-бы это меньшее зло чем мусор в массиве или переменной. Ну нет такого индекса в массиве, как раньше было, ну и флаг ему в ... руки, пойдём дальше работать. Всё ведь проходило...
Ну почему вы требуете разработчиков защитить вас от дерьма? Защититесь сами. Или если есть неопровержимые аргументы в пользу того что это обязательно надо, то уж не скрывайте их от общественности.
Требований не было, неопровержимость показана
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
fxsaber, 2017.09.12 16:17
В MT4 будет всегда возврат false, потому как без мусора - все нулями. В MT5 - true.
Поэтому один и тот же код в MT4-тестере будет всегда показывать идентичные результаты от запуска к запуску. В MT5-тестере - нет.
Требований не было, неопровержимость показана
А кто запрещает добавить всего одну строку?
Или вам не известно, что false это 0, всё остальное true независимо от знака? Вы берёте значения из резерва массива и хотите быть уверенным что там 0. Ну в этом случае разумно инициализировать массив нулями, но зачем грузить систему принудительным обнулением в тех случаях когда этого не надо делать?
Извините, но этот пример абсолютная глупость.
А кто запрещает добавить всего одну строку?
Речь не обо мне.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
fxsaber, 2017.09.12 16:52
Наводит ужас мысль, что в какой-нибудь мат. библиотеке (Include\Math - 7 Мb исходников) не произведена инициализация в одном/двух местах! И как эту ошибку откопать, которая в MT5-тестере выдает разные одиночные прогоны, а в MT4 - одинаковые?
Речь не обо мне.
Остаётся только отказаться от всех чужих библиотек. А конкретную, указанную я никогда не смотрел и тем более не пользовался. Проще написать самому всё что надо чем копать такую кучу ради проверки нет-ли там козявок... А воспользоваться всего двумя-тремя функциями...