Ошибки, баги, вопросы - страница 3545
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вы отладчиком пользоваться умеете?
Что предлагаете? В отладчике ответ найдётся? Код кажется довольно простым, для отладчика. Если я не прав, поправьте пожалуйста.
Это не так важно. Перенос объявления переменных, в глобальное пространство всё равно не поможет, я уже попробовал.
Как раз это очень важно. Если вы присваиваете значение переменной handle в OnInit(), а потом его надо использовать в другой функции - OnTimer(), то эта переменная должна быть глобальной и она не должна заново объявляться в OnTimer(). Алексей вам правильно выделил красным строку
int handle = INVALID_HANDLE;
которую надо перенести из OnTimer() в глобальную область. То есть в OnTimer() её быть не должно.
Что предлагаете? В отладчике ответ найдётся? Код кажется довольно простым, для отладчика. Если я не прав, поправьте пожалуйста.
Именно в отладчике и находятся такие простые ошибки. Виталий достаточно опытный программист, но вот пропустил… В отладчике, в функции OnInit() handle будет равен 10, а в OnTick() после выделенной строки будет -1. И это значение будет поставлено в функцию CopyBuffer().
Как раз это очень важно. Если вы присваиваете значение переменной handle в OnInit(), а потом его надо использовать в другой функции - OnTimer(), то эта переменная должна быть глобальной и она не должна заново объявляться в OnTimer(). Алексей вам правильно выделил красным строку
которую надо перенести из OnTimer() в глобальную область. То есть в OnTimer() её быть не должно.
1 хэндл можно получить перед использованием.
2 хэндл лучше получать в oninit. конечно объявив переменные в глобальном пространстве.
Оба способа не дают результат.
Именно в отладчике и находятся такие простые ошибки. Виталий достаточно опытный программист, но вот пропустил… В отладчике, в функции OnInit() handle будет равен 10, а в OnTick() после выделенной строки будет -1. И это значение будет поставлено в функцию CopyBuffer().
Извините я без кода, могу неверно Вас понять. Вы имеете ввиду что отладчик показывает, утерю хэндла, это код который написал Виталий?
Если да, так это и без отладчика понятно.
Опустим вопрос хэндла, он реализован правильно, даже 2 варианта пробовал (в сообщении выше).
В отладчике и с вторым вариантом хэндла, вместо 0, отрицательное значение.
Похоже, есть проблема с вызовом функции обработчика таймера. Если индикатор подключен как ресурс, то вызывая в его функции OnInit() функцию EventSetTimer(1), далее будет пытаться запуститься обработчик OnTimer() из советника, а не из индикатора. Если такого обработчика в советнике нет, то обработчик из индикатора просто игнорируется. Если такой обработчик в советник добавить, то при инициализации таймера из индикатора (а не из советника) обработчик из советника срабатывает, а обработчик из индикатора по-прежнему игнорируется.
Если таймер вызвать в Oninit(как предложил Виталий) и проконтролировать размер массива. ТО будет так)
индикатор
советник
РЕЗУЛЬТАТ))
И не важно, ресурс не ресурс, где там хэндл.
НО, если перегрузить терминал, то печать меняется.
PS/ Интересно было бы почитать мысли от разработчиков.
Разобрался я в этой проблеме. Никакая это не поломка, а обычная особенность. Такая-же особенность как недоступность свойств графического объекта сразу после создания.
В ресурсном индикаторе есть такие строки
В рабочем
И вот что в распечатке
Это доказывает, что можно получить данные с ресурсного индикатора на первом тике нового бара.
зы: И вот я переключил ТФ на Н1 оставив время для ресурсного индикатора М5
У меня не получилось повторить с теми кусками кода, которые вы выложили. Вышлите, пожалуйста, в личку полный код.
У меня не получилось повторить с теми кусками кода, которые вы выложили. Вышлите, пожалуйста, в личку полный код.
Вы когда нибудь пользовательское событие CHARTEVENT_CUSTOM делали?