Народ, спасибо огромное за помощь! Отдельное - Дмитрию Федосееву (чем могу отблагодарить?) .
Ошибка была в следующем: При прогоне пользовательской ф-ии SMA происходил выход за пределы массива, так как функция прогоняла на SMAperiod больше элементов чем изначально заложено в i. То есть при старте индюка на самых старых барах эта функция залезала на не существующие индексы массива. В общем все заработало!
Борис, в for там все ровно. Если у нас будет например из истории i=356, а период сглаживания sma_period=6, то перебора не будет происходить вообще, так как 356>6. Но тем не менее спасибо за отклик.
Dmitry Fedoseev: Борис, а вы случайно не хирург по профессии?
Нет, но хотел чем-то помочь, хотя бы этой "ампутацией"! Очень уж показалась лишней! Иногда метод тыка помогает. Потому заранее извинился. Так что извините, если ещё интуиция не созрела! Но стараюсь её развивать. :)
Alexander Bereznyak: Тогда при наличии стрикт вы должны были получить сообщение об ошибке, но вы заявили что ошибок нет.
Но ошибок в самом деле нет. Тот код что я скидывал можно в том виде как есть компилировать и ошибок/предупреждений компилятор у меня не выдает. Билд МТ4 новый вроде, на этой неделе обновлял с MetaQuote. Ошибки только в журнале терминала увидел (когда носом ткнули).
Народ, спасибо огромное за помощь! Отдельное - Дмитрию Федосееву (чем могу отблагодарить?) .
Ошибка была в следующем: При прогоне пользовательской ф-ии SMA происходил выход за пределы массива, так как функция прогоняла на SMAperiod больше элементов чем изначально заложено в i. То есть при старте индюка на самых старых барах эта функция залезала на не существующие индексы массива. В общем все заработало!
Борис, в for там все ровно. Если у нас будет например из истории i=356, а период сглаживания sma_period=6, то перебора не будет происходить вообще, так как 356>6. Но тем не менее спасибо за отклик.
Не за что! Так показалось, но теперь Вы объяснили, и стало понятно, что это так задумано и верно.
Alexander Bereznyak: Понятно, при компиляции нет, а о журнале забыли. По сути, эту ветку могли и не заводить.
Забыл, каюсь((( Я новичок в MQL4, всего то пару месяцев тыкаюсь. Без отладчика - как без рук, по привычке лезу искать проблему в коде, а про логи терминала забываю. Но думаю ветку все равно стоило завести, поиск когда нибудь ее проиндексирует и кто нибудь найдет ответ на аналогичную проблему. Не я первый - не я последний)
Простейший код ниже не рисует линию индикатора, из-за превышения индекса элементов массива. (часть с глобальными объявлениями и свойствами не публикую, она стандартная) Не выдает ошибок и предупреждений в компиляторе. Не выдает ошибок в журнале терминала (как было в случае с предыдущим кодом). #property strict используется. Короче - никаких следов для поиска и устранения ошибки.
int start(){ // старт
Counted_bars=IndicatorCounted(); // количество просчитанных баров
i=Bars-Counted_bars-1; // индекс первого непросчитанного while(i>=0){ // цикл по непосчитанным барамint m=iHighest(NULL,0,MODE_HIGH,5,i); // индекс наивысшего значения цены из 5 баров начиная с индекса i до i+5
Buf_0[i]=High[m]; // заносим значение High с полученным индексом m в буфер индикатора
Buf_0[i]=sma(Buf_0,5,i); // пересчитываем текущее значение в буфере при помощи функции сглаживания с периодом 5 начиная с текущего индекса
i--;} // расчёт индекса следующего бараreturn(0);} // завершение старт//===========================================================================================================================================================// Функция сглаживания SMA //// ------------------------------- //double sma(double &sma_array[], int sma_period, int sma_start){ // объявляем функцию сглаживания (сглаживаемый массив, период, индекс рассчитываемого элемента)
ts=0; // обнуляем вспомогательную переменнуюfor(int j=sma_start;j<sma_start+sma_period;j++){ // перебор J от значения индекса рассчитываемого эл-та, до индекса увеличенного на период//if (Bars<=sma_start+sma_period)break;// (раскомментировав эту строку - исключим выход за пределы массива, график рисуется)
ts+=sma_array[j];} // суммируем значения массива во вспомогательную переменную
ts/=sma_period; // получаем среднее арифметическое значение элементовreturn(ts);} //возвращаем полученное значение
Вопрос: Почему критическая ошибка не оставляет никаких следов своего существования (кроме пустоты в индикаторе)? Есть какие либо способы поиска/выявления подобных невидимых ошибок?
Простейший код ниже не рисует линию индикатора, из-за превышения индекса элементов массива. (часть с глобальными объявлениями и свойствами не публикую, она стандартная) Не выдает ошибок и предупреждений в компиляторе. Не выдает ошибок в журнале терминала (как было в случае с предыдущим кодом). #property strict используется. Короче - никаких следов для поиска и устранения ошибки.
Вопрос: Почему критическая ошибка не оставляет никаких следов своего существования (кроме пустоты в индикаторе)? Есть какие либо способы поиска/выявления подобных невидимых ошибок?
Народ, спасибо огромное за помощь!
Отдельное - Дмитрию Федосееву (чем могу отблагодарить?) .
Ошибка была в следующем:
При прогоне пользовательской ф-ии SMA происходил выход за пределы массива, так как функция прогоняла на SMAperiod больше элементов чем изначально заложено в i.
То есть при старте индюка на самых старых барах эта функция залезала на не существующие индексы массива.
В общем все заработало!
Борис, в for там все ровно. Если у нас будет например из истории i=356, а период сглаживания sma_period=6, то перебора не будет происходить вообще, так как 356>6.
Но тем не менее спасибо за отклик.
Борис, а вы случайно не хирург по профессии?
Борис, а вы случайно не хирург по профессии?
Тогда при наличии стрикт вы должны были получить сообщение об ошибке, но вы заявили что ошибок нет.
Народ, спасибо огромное за помощь!
Отдельное - Дмитрию Федосееву (чем могу отблагодарить?) .
Ошибка была в следующем:
При прогоне пользовательской ф-ии SMA происходил выход за пределы массива, так как функция прогоняла на SMAperiod больше элементов чем изначально заложено в i.
То есть при старте индюка на самых старых барах эта функция залезала на не существующие индексы массива.
В общем все заработало!
Борис, в for там все ровно. Если у нас будет например из истории i=356, а период сглаживания sma_period=6, то перебора не будет происходить вообще, так как 356>6.
Но тем не менее спасибо за отклик.
Понятно, при компиляции нет, а о журнале забыли. По сути, эту ветку могли и не заводить.
Забыл, каюсь((( Я новичок в MQL4, всего то пару месяцев тыкаюсь. Без отладчика - как без рук, по привычке лезу искать проблему в коде, а про логи терминала забываю.
Но думаю ветку все равно стоило завести, поиск когда нибудь ее проиндексирует и кто нибудь найдет ответ на аналогичную проблему. Не я первый - не я последний)
А вообще, печально, что до сих пор нет отладчика.
В продолжение темы.
Простейший код ниже не рисует линию индикатора, из-за превышения индекса элементов массива. (часть с глобальными объявлениями и свойствами не публикую, она стандартная)
Не выдает ошибок и предупреждений в компиляторе.
Не выдает ошибок в журнале терминала (как было в случае с предыдущим кодом).
#property strict используется.
Короче - никаких следов для поиска и устранения ошибки.
Вопрос:
Почему критическая ошибка не оставляет никаких следов своего существования (кроме пустоты в индикаторе)?
Есть какие либо способы поиска/выявления подобных невидимых ошибок?
В продолжение темы.
Простейший код ниже не рисует линию индикатора, из-за превышения индекса элементов массива. (часть с глобальными объявлениями и свойствами не публикую, она стандартная)
Не выдает ошибок и предупреждений в компиляторе.
Не выдает ошибок в журнале терминала (как было в случае с предыдущим кодом).
#property strict используется.
Короче - никаких следов для поиска и устранения ошибки.
Вопрос:
Почему критическая ошибка не оставляет никаких следов своего существования (кроме пустоты в индикаторе)?
Есть какие либо способы поиска/выявления подобных невидимых ошибок?