старый баг версии 1045.
В обновленных билдах баг вроде изчез, а теперь опять появился.
Код советника
void init() { long curr = ChartFirst(); while(curr != -1) { if (curr != ChartID()) { Print(curr," - " ,ChartSymbol(curr)); } curr = ChartNext(curr); } }
Результат
Баг тот же: ChartSymbol иногда возвращает пустую строку вместо символа графика.
В обновленных билдах баг вроде изчез, а теперь опять появился.
Код советника
Результат
Баг тот же: ChartSymbol иногда возвращает пустую строку вместо символа графика.
Добрый день. Воспроизвести вашу проблему пока не получается - все символы отпринтовываются корректно при использовании вашего кода.
Попробуйте вывести в журнал ошибку с помощью функции GetLastError()
Установлены какие-либо эксперты/индикаторы на других чартах?
К слову, результат на вашем скриншоте не соответствует приложенному коду - информация по текущему чарту вообще не должна была выводиться.
Добрый день. Воспроизвести вашу проблему пока не получается - все символы отпринтовываются корректно при использовании вашего кода.
Попробуйте вывести в журнал ошибку с помощью функции GetLastError()
Установлены какие-либо эксперты/индикаторы на других чартах?
К слову, результат на вашем скриншоте не соответствует приложенному коду - информация по текущему чарту вообще не должна была выводиться.
Воспроизвести когда хочется у меня тоже не получается. Проявляется нечасто; появившись, воспроизводится раз за разом до перезагрузки терминала; после перезагрузки изчезает.
Проверил - результат на скриншоте получен именно этим кодом. Но вы правы - текущий чарт должен пропускаться. Странно.
Эксперты и индикаторы были.
Когда в следующий раз встречусь, попробую исследовать более тщательно.
Добрый день. Воспроизвести вашу проблему пока не получается - все символы отпринтовываются корректно при использовании вашего кода.
Попробуйте вывести в журнал ошибку с помощью функции GetLastError()
Установлены какие-либо эксперты/индикаторы на других чартах?
К слову, результат на вашем скриншоте не соответствует приложенному коду - информация по текущему чарту вообще не должна была выводиться.
Еще раз поймал проблему.
Код
void init() { long curr = ChartFirst(); while(curr != -1) { if (curr != ChartID()) { Print(curr," - " ,ChartSymbol(curr)," ChartID = ",ChartID()); } curr = ChartNext(curr); } Print("Last error: ",GetLastError()); } void start() { }
Результат
Билд 1090.
Нашел способ сделать проблему воспроизводимой. Для этого достаточно в тестере запустить любой советник, например emptyEA.mq4:
void init() { Print("Hi"); }
Итак, последовательность действий:
1. Перезапускаем терминал
2. Прикрепляем к графику советник:
void init() { long curr = ChartFirst(); while(curr != -1) { if (curr != ChartID()) { Print(curr," - " ,ChartSymbol(curr)," ChartID = ",ChartID()); } curr = ChartNext(curr); } Print("Last error: ",GetLastError()); } void start() { }
Проверяем вывод в журнал - все норм.
3. Запускаем в тестере emptyEA
4. Прикрепляем еще раз к графику советник из пункта 2. Проверяем вывод в журнал - проблема на месте.
Нашел способ сделать проблему воспроизводимой. Для этого достаточно в тестере запустить любой советник, например emptyEA.mq4:
Итак, последовательность действий:
1. Перезапускаем терминал
2. Прикрепляем к графику советник:
Проверяем вывод в журнал - все норм.
3. Запускаем в тестере emptyEA
4. Прикрепляем еще раз к графику советник из пункта 2. Проверяем вывод в журнал - проблема на месте.
А если написать так как должен быть написан советник? Я полагаю никто из модераторов и разработчиков не станет проверять работу кода написанного с нарушением рекомендаций документации по языку.
int OnInit(void) { long curr = ChartFirst(); while(curr != -1) { if (curr != ChartID()) { Print(curr," - " ,ChartSymbol(curr)," ChartID = ",ChartID()); } curr = ChartNext(curr); } Print("Last error: ",GetLastError()); return(INIT_SUCCEEDED); } void OnTick(void) { }
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Натолкнулся на глюк ChartSymbol при вызове из советника. Время от времени ChartSymbol возвращает пустую строку вместо символа графика.
Максимально упрощенный пример кода привожу.
Обращаю внимание, что это советник. В варианте скрипта проблем не обнаружил.
Прикрепляем советник на график и получаем в журнале
Из первого графика символ выводится, из остальных нет.
Прикрепляем советник на другой график - в этом случае все нормально
В целом, полный бардак. Иногда работает нормально, иногда как на первом скрине.
В большинстве случаев, при первом прикреплении советника на график все нормально. Во второй раз (после снятия советника с графика и прикрепления его обратно на тот же график) и во все последующие, не работает.
ПС: ChartSymbol не обязательно ставить в init, в start будет то же самое.