код у вас не большой... вставьте его, пожалуйста, в текст через вот эту кнопку...
но когда будете вставлять - разгребите, пожалуйста, открытие и закрытие фигурных скобок... может быть, когда будете искать пару для скобки - сами ошибку найдете... перед одним из циклов - точно нет фигурной скобки...
у вас проблемы с индексированием. Смотрите:
for(n = 1; n < 59; n++) if (Close[n] - Close[n+1] > 0) a[n+1] = 1; else a[n+1] = 0;
присвоение начинается с индекса n+1=2. Дальше
for(i=0,j=-1,k=0; i<59; i++,k++){ if(a[i] == 1){
проверка условий осуществляется с индекса i=0
Еще дальше
for(n = 1; n < 59; n++) if (a[n] == 0 && b[n] != 0) Alert ("Calculation Error!: a[n] != b[n], n=",n,", Time= ", TimeToStr(TimeCurrent(),TIME_SECONDS));
алерты начинаем проверять с индекса n=1
Сильвупле, исправляйте
у вас проблемы с индексированием. Смотрите:
присвоение начинается с индекса n+1=2. Дальше
проверка условий осуществляется с индекса i=0
Еще дальше
алерты начинаем проверять с индекса n=1
Сильвупле, исправляйте
Индексы подправил, но это ничего не изменило так как ошибки возникают не только при расчетах на первых индексах, а также и далее.
Непросчитанные индексы по умолчанию нули и поэтому ошибку они не вносят.
Самое главное что есть различие в вычислении в первый раз и после формирования нового бара - в этом весь вопрос.
Скобки не поставил там где они не обязательны по синтаксису.
Индексы подправил, но это ничего не изменило так как ошибки возникают не только при расчетах на первых индексах, а также и далее.
Непросчитанные индексы по умолчанию нули и поэтому ошибку они не вносят.
Самое главное что есть различие в вычислении в первый раз и после формирования нового бара - в этом весь вопрос.
Скобки не поставил там где они не обязательны по синтаксису.
возможно, проблема в переменной LastBar. Давайте попробуем сделать ее static, проинициализировать в init()
LastBar=0;
ну и - хотя бы для порядка - сделаем ее типа datetime
кстати, не могли бы вы сфотографировать и привести вывод ошибки функцией
Alert ("Calculation Error!: a[n] != b[n], n=",n,", Time= ", TimeToStr(TimeCurrent(),TIME_SECONDS));
чтобы разговор более предметно шел?
LastBar не может быть static на глобальном уровне - сомпилятор выдает ошибку.
Приведен пример вывода фунцией Alarm() и соответствующий текстовый файл в котором видно что нули в массиве b[ ] подпорчены как и указывает проверка в Alarm().
Переменная LastBar вроде бы работает правильно - это видно по расчёту точек графического буфера на сформировавшимся баре.
В функции FileFlush() нет необходимости - она выполняется автоматически при закрытии функцией FileClose().
Предполагаю что есть баг в самом МТ4 из-за некорректного обновления данных в момент формирования нового бара, например из-за того что функция start() начинает выполнятся до того как будут обновлены все входные данные.
Предполагаю что есть баг в самом МТ4 из-за некорректного обновления данных в момент формирования нового бара, например из-за того что функция start() начинает выполнятся до того как будут обновлены все входные данные.
Достаточно сделать обработку ошибки
4066 | Запрошенные исторические данные в состоянии обновления |
Достаточно сделать обработку ошибки
4066 | Запрошенные исторические данные в состоянии обновления |
Извините, но не понял связи с историческими данными.
В чем тут может быть ошибка на запрос исторических данных?
Тут же идет речь об обновлении текущих данных в момент закрытия нового бара - все необходимые бары уже и так есть в наличии, как это видно на графике.
Прошу также заметить что все массивы высчитываются заново при каждом входе.
Извините, но не понял связи с историческими данными.
В чем тут может быть ошибка на запрос исторических данных?
Тут же идет речь об обновлении текущих данных в момент закрытия нового бара - все необходимые бары уже и так есть в наличии, как это видно на графике.
Прошу также заметить что все массивы высчитываются заново при каждом входе.
Тогда я тоже не понял. Ошибка может возникать только при загрузке исторических данных. В остальных случаях - ошибка логики,
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте,
Приложен простой код-пример расчитывающий значения массива b[ ] на уже сформировавшихся барах на базе бинарного массива a[ ].
Массив b[ ] подсчитывает количество нулей между ближайшими единицами для массива a[ ] - проверка заключается в том что нули массива a[ ] должны сохранятся на тех же местах и в массиве b[ ] при правильном расчете программой.
Данные для контроля выдаются в файл и есть аларм когда возникают ошибки в расчете.
Выяснилось что иногда расчет происходит верно, а иногда нет.
Точнее в начале образования бара почему-то возникает ошибка, хотя при начальном запуске расчет происходит верно.
Причину затрудняюсь найти.
Подозреваю что есть какой-то баг либо в этом коде либо в MT4.
Буду благодарен за разъяснение.