Symbol() не соответствует символу графика - страница 2

 
Шерше ля баг!
 
Andrey Ziablytsev:

Еще один вариант - один и тот же канвас обновляется разными советниками.

Но баг точно у вас в коде, а не в функции Symbol().

 
Igor Makanu:

Вы понимаете, что если внезапно перестала  работать   функция Symbol() - то все и у всех просто "рухнуло" ?

тут 2 варианта:

- ищите ошибку в коде у себя, рапринтуйте все что только можно

- Вы переключили счет или брокера, и не прекращали корректно работу своего кода, тогда будут непонятные и не воспроизводимые баги .... тут кстати, если у Вас глобально описаннеы переменные, то они инициализируются при запуске один раз, в случае переключения ТФ или символа или другого счета, нужно это обрабатывать в OnInit() / OnDeinit() иначе глобально описанные переменные не изменят свои значения

Про глобальные переменные знаю, всегда все переинициализирую в OnInit(), считаю это правилом хорошего тона, даже динамические массивы чищу в OnDeinit() на всякий случай и указатели зануляю после удаления )

Сейчас сделал более подробный вывод, пока в процессе отлова

Баг плавающий и проявляется не всегда

Грубо говоря, в терминале открыто 20 графиков, на каждом по экземпляру советника

Все работает

После перезапуска на некоторых (даже не при каждом перезапуске проявляется) графиках история описанная выше

Счет остается тем же, символ графика не меняется, например, перетаскиванием из MarketWatch, идет обычная штатная работа

Перезапускаю глючащий советник отдельно - все работает

В общем, как поймаю - прикреплю скрин со значениями Symbol(), _Symbol и ChartSymbol() сохраненные в OnInit() и полученные позже в основном цикле

 
Andrey Khatimlianskii:

Еще один вариант - один и тот же канвас обновляется разными советниками.

Но баг точно у вас в коде, а не в функции Symbol().

Канвасы все создаются через CreateBitmapLabel, там используется 0 как идентификатор чарта

Далее вся работа через экземпляр класса

Так же в OnDeinit все графические объекты удаляются, но и на всякий случай все объекты удаляются и в OnInit при помощи ObjectsDeleteAll(0, ID);

Еще на графике отображается еще много разной информации через функцию Comment(), там так же проявляется эта неполадка, что почти исключает возможность влияния других советников

Я ни где не использую ChartSetString, другие советники не используются

 

Я благодарен всем за внимание к моей проблеме и предложенные варианты возможных причин

Про каждую думаю

Как появится новый эпизод - добавлю скрин, будет яснее

Для меня это очень странно, я стараюсь в своем коде видеть причину и чаще всего так и есть, но тут пока загадка, по той информации которую удалось получить выходит что штатная функция шалит, но еще проверю

 

были бы проблемы пол рунета уже взвыло бы - самая популярная платформа как ни крути

код по максимуму кастрировать и тестить - другого не дано

 
Mikhail Zaprudin:

Канвасы все создаются через CreateBitmapLabel, там используется 0 как идентификатор чарта

имена у канвасов разные? или одно и тоже?

имя для каждого ресурса должно быть индивидуальным.

 

Еще можно поискать в коде (особенно - подключенных сторонних библиотек) "#define Symbol".

У меня было такое, что ТаймКаррент показывал ерунду. Пока не нашел передефайненую функцию, думал, с ума сойду )

 

Как и обещал, прикладываю скриншот

Две строки внизу показывают значение полученные на этапе OnInit и из цикла в котором просходила отрисовка

Из этого ясно что действительно проблема не в Symbol(), а где-то совсем в другом месте

Благодарю всех откликнувшихся, с вашей помощью мне удалось обойти проблему, пока не выяснил причину, но где-то в логике кода, а не в стандартных функциях

 
Taras Slobodyanik:

имена у канвасов разные? или одно и тоже?

имя для каждого ресурса должно быть индивидуальным.

Имена у канвасов были одинаковые, и в реализации функции CreateBitmapLabel имя для ресурса генерируется следующим образом чтобы избежать дублирования имени ресурса

m_rcname="::"+name+(string)(GetTickCount()+MathRand());

Из-за большого количества экземпляров где-то происходило наложение по именам

Я вообще в эту сторону не думал, думал ресурс привязывается к графику и забыл что это не так

Добавил к имени ChartID()

Благодарю!

Зря я на Symbol гнал, признаю )

Причина обращения: