Покажите пример
У меня есть советник, он получает данные из другого терминала, сравнивает котировки и делает другие вычисления
Недавно появилась проблема что после перезапуска терминала иногда советник стал прыгать между символами
Запускается много экземпляров (много графиков открыто и к каждому прикреплен советник) и либо работает нормально, либо прыгает между текущим и каким-то другим символом
Причем, если перезапустить советник отдельно через окно свойств (F7 - Ok), то все становится нормально
Это проявляется не всегда
Вывожу через canvas
string smb = ShortArrayToString(t.symbol); int sf1 = StringFind(Symbol(), smb); dat.TextOut(4*W, n*H, smb + " " + Symbol() + " " + IntegerToString(sf1), COLOR2RGB((sf1 != 0) ? clrRoyalBlue : clr), TA_RIGHT|TA_TOP);
структура t содержит данные из другого терминала
Как писал выше, заметил что котировки и имена иногда стали прыгать
Думал косяк в передаче/приеме данных какой-то, долго ловил и в итоге сделал просто вывод Symbol(), а он не соответствует графику и из-за этого данные не те отображаются
Скриншот прикреплю чуть позже
Таблица накладывается, но видно что имя графика отличается
Первый символ - имя из других терминалов
Второй символ - результат функции Symbol()
Третье число - результат StringFind(Symbol(), smb), если данные не те, то должно быть отлично от нуля, а оно всегда 0, что дополнительно подтверждает некорректность работы функции Symbol()
да нормально все)
StringFind(Symbol(), smb)
ищет в строке GBPCHFp подстроку GBPCHF, возвращает индекс первого вхождения
да нормально все)
На скриншоте выше советник привязан к графику EURCHFp, а Symbol() возвращает GBPCHFp, что не корректно
Думаю, я не ошибусь если скажу, что Symbol() должен возвращать EURCHFp и тогда результат работы StringFind будет -1
Это лишь дополнительная проверка
если в OnInit() вставить Print(Symbol()," ",_Symbol); то что печатается?
В OnInit все нормально проходит, потом начинается "пляска"
Поймаю опять - прикреплю скрин со значениями из OnInit и в моменте
У меня есть советник, он получает данные из другого терминала, сравнивает котировки и делает другие вычисления
Недавно появилась проблема что после перезапуска терминала иногда советник стал прыгать между символами
Запускается много экземпляров (много графиков открыто и к каждому прикреплен советник) и либо работает нормально, либо прыгает между текущим и каким-то другим символом
Причем, если перезапустить советник отдельно через окно свойств (F7 - Ok), то все становится нормально
Это проявляется не всегда
Вывожу через canvas
структура t содержит данные из другого терминала
Как писал выше, заметил что котировки и имена иногда стали прыгать
Думал косяк в передаче/приеме данных какой-то, долго ловил и в итоге сделал просто вывод Symbol(), а он не соответствует графику и из-за этого данные не те отображаются
Скриншот прикреплю чуть позже
А функция Sуmbol() тут причем?
А функция Sуmbol() тут причем?
По ней идет фильтрация какие данные использовать
В любом случае, результат должен соответствовать активному графику, так?
И если в каких-то моментах это нарушается, то работа функции должна быть пересмотрена
Благодаря Игорю мне пришла светлая мысль просто зафиксировать значение в переменной и потом использовать ее вместо того чтобы дергать Symbol()
Это решает мою задачу, но не решает проблему в целом
В любом случае, результат должен соответствовать активному графику, так?
Вы понимаете, что если внезапно перестала работать функция Symbol() - то все и у всех просто "рухнуло" ?
тут 2 варианта:
- ищите ошибку в коде у себя, рапринтуйте все что только можно
- Вы переключили счет или брокера, и не прекращали корректно работу своего кода, тогда будут непонятные и не воспроизводимые баги .... тут кстати, если у Вас глобально описаннеы переменные, то они инициализируются при запуске один раз, в случае переключения ТФ или символа или другого счета, нужно это обрабатывать в OnInit() / OnDeinit() иначе глобально описанные переменные не изменят свои значения
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день!
Подскажите, в чем может быть причина того что функция Symbol() возвращает отличное от имени графика значение?
Для меня это тайна покрытая мраком и подозрения на баги терминала (MT4)
Но может быть я что-то не так делаю? Впервые сталкиваюсь с таким поведением функции.