Ошибки, баги, вопросы - страница 2146
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
OnCalculate - запускается не на этом чарте. Вы хэндл создали, там он и живет.
Если не на этом - почему он тогда нормально рисует (буферное рисование) в нужном подокне?
В индикаторе
::ChartWindowFind() возвращает -1 (другими словами не работает)
Пока индикатор не проинициализирован, он не знает номера подокна, в котором работает. Так как прикрепляется к окну только после удачной инициализации
Другими словами, вызывать ChartWindowFind() в OnInit индикатора - бесполезно
Другими словами, вызывать ChartWindowFind() в OnInit индикатора - бесполезно
Вызов ChartWindowFind() в OnInit индикатора (индикатор тот же)
Результат: 1:true:0
2:1:0
Все нормально определилось, напомню код OnInit индикатора
Если не на этом - почему он тогда нормально рисует (буферное рисование) в нужном подокне?
Так расчет индикатора и его рисующая часть - это разные вещи. ChartWindowFind - это обращение к механизму, который отвечает за рисование индикатора. Т.е. это не сам индикатор даже.
Пока индикатор не проинициализирован, он не знает номера подокна, в котором работает. Так как прикрепляется к окну только после удачной инициализации
Вызов ChartWindowFind() после OnInit (из OnCalculate)
Результат: OnInit:end
Другими словами индикатор уже знает номер подокна, в котором работает, но не сообщает егоOnCalculate
3:-1:4113
Другими словами индикатор уже знает номер окна, в котором работает, но не сообщает его
А знает ли он ChartID()?
А знает ли он ChartID()?
Он не требуется - функция ChartWindowFind() без параметров
Просто почти уверен, что он и ChartID() не знает (без параметров).
Просто почти уверен, что он и ChartID() не знает (без параметров).
Это явная недоработка тем более что неработоспособность проявляется не только если
но и если
Т.е. если я вручную добавил окно графика и прикрепил на него индикатор - то все нормально
А если автоматическим способом - то не работает
Это противоречит самой концепции алготрейдинга
Это явная недоработка тем более что неработоспособность проявляется не только если
но и если
Т.е. если я вручную добавил окно графика и прикрепил на него индикатор - то все нормально
А если автоматическим способом - то не работает
Это противоречит самой концепции алготрейдинга
Это очень хорошо, что стала понятна архитектура индикаторов. Странно, что об этом так мало в документации.
Расчетная часть индикатора и рисующая - разные сущности. Хэндл - это расчетная часть. И расчетная ничего не знает про рисующую и не должна.
Представим, что Вы создали хэндл, но поместили его не на один, а на два чарта. Очевидно, что индикатор один, а рисуется на двух чартах с разными ChartID и SubWindow. И хэндл-индикатору на это плевать, т.к. он знать не знает, где его кто-то там отрисовает и отрисовывает ли вообще. За отрисовку отвечает не индикатор.
Когда же Вы помещаете индикатор вручную на чарт или через шаблон, то происходит совсем иное действие. Создается хэндл вместе с рисующей частью. Если точно с такими входными параметрами индикатор запустить вручную на другом чарте с тем же символом и периодом, то будет создан еще один хэндл с рисующей частью.
Через MQL же совсем иначе. Если создали один индикатор и затем второй такой же, то ничего не создается повторно. Расчетная часть остается нетронутой.
Единственный способ запустить через MQL индикатор так же, как руками на, например, новом чарте или OBJ_CHART - это LoadTemplate.