Ошибки, баги, вопросы - страница 2930
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Перевод индикатора с мт4 на мт5
Проблема в размерах толщины DRAW_HISTOGRAM
При установке "1" или "2" размер меняется, а вот "3" или "4" = размер всё-равно остаётся "2"
Почему в мт4 всё работает, а вот в мт5 такая проблема?
Результат в мт4
Результат в мт5, отображает толщину всего "2", хотя в настройках стоит "3"
Также не помогает установка свойства в OnInit()
PlotIndexSetInteger(0, PLOT_LINE_WIDTH, 3);
Критическая ошибка при отладке:
Результат:
Последняя бета-версия на текущий моментКто-нибудь придумал способ получить по хэндлу индикатора свойство отображения в главном окне или подокне? Речь про произвольные сторонние индикаторы, которые создаются с помощью IndicatorCreate и потом по запросу пользователя могли бы добавляться на чарт с помощью ChartIndicatorAdd.
Наверное, можно индикатор запихать в OBJ_CHART и посмотреть, где он там расположился.
Кто-нибудь придумал способ получить по хэндлу индикатора свойство отображения в главном окне или подокне? Речь про произвольные сторонние индикаторы, которые создаются с помощью IndicatorCreate и потом по запросу пользователя могли бы добавляться на чарт с помощью ChartIndicatorAdd.
что-то делал подобное.
Судя по коду ищет во всех открытых чартах индикатор по хэндлу. Возвращает символ, таймфрейм, id чарта, подокно и имя индикатора.Вот у себя нашел. Не помню, работает или нет. Проверьте пожалуйста.
Наверное, можно индикатор запихать в OBJ_CHART и посмотреть, где он там расположился.
Попробую, пока пришлось сделать опцию указания пользователем.
что-то делал подобное.
Судя по коду ищет во всех открытых чартах индикатор по хэндлу. Возвращает символ, таймфрейм, id чарта, подокно и имя индикатора.Вот у себя нашел. Не помню, работает или нет. Проверьте пожалуйста.
Это не подходит к описанному вопросу: индикаторы, созданные IndicatorCreate не размещены ни в каком окне - они "сидят" внутри, и задача как раз такой индикатор по его хэндлу разместить в окно. Сейчас MQL5 позволяет с помощью функции ChartIndicatorAdd добавить произвольный хэндл как в главное окно, так и в подокно, невзирая на "проперти" самого индикатора (без всяких ошибок!), и результат выглядит очень странно, когда добавление делается не по назначению.
Есть еще бОльшая засада с индикаторами.
Некоторые из них реализуют обработчик OnCalculate по упрощенному варианту с одним входным массивом, и для них можно выбрать тип цены для расчета. Как из сторонней MQL5-программы узнать, что индюк ожидает этот тип цены, который нужно передавать после всех параметров при создании индикатора? Похоже, что никак. А если этого не делать, то индикатор строится по #property indicator_applied_price, доступ к которой извне также отсутствует. Вот простой эксперт, который добавляет Examples/AMA на график программным способом:
Если после этого переключить таймфрейм графика, получим уже 2 индикатора AMA: один по цене close (создан программно), а второй по цене open (генерируется из-за смены таймфрейма и #property indicator_applied_price PRICE_OPEN; тут также не понятно, почему это свойство не подхватилось в iCustom).
В продолжение темы индикаторов прикладываю эксперт, на котором удалось выяснить и обойти проблему с параметрами MqlParam.
Задача эксперта - добавить на график индикатор "Examples/Price_Channel", если его там еще нет с теми же параметрами.
Для этого создается экземпляр с помощью iCustom/IndicatorCreate, получается массив его параметров через IndicatorParameters, и далее производится в цикле опрос IndicatorParameters для уже существующих на чарте индикаторов: если совпадения массивов параметров нет, индикатор добавляется на чарт, если совпадение есть, новый хэндл просто уничтожается.
Проблема в том, что равенство параметров не всегда отрабатывает ожидаемо. В частности, есть такой фейл-тест-кейс. Размещаем эксперт на любом пустом чарте, делаем клик мышью - это создает первый экземпляр индикатора. Затем переключаем таймфрейм графика на любой другой (прежний индикатор остается) и снова делаем клик мышью. Как ни странно, создается второй экземпляр индикатора.
Из анализа выполнения и лога видно, что происходит это из-за ошибочного неравенства строк с именем индикатора в параметрах. Строки там длиной 260 символов, но терминальный 0 расположен гораздо раньше. После него - или какая-то служебная информация или мусор. Так вот сравнение строк "==" или StringCompare учитывает этот "мусор" и получается неравенство строк.
Если преобразовывать строки в массив char - полное совпадение массивов. Если преобразовывать в массив short - виден мусор. В целом, какое-то неконсистентное поведение, не описанное в документации.
Не уверен, в чем именно заключается баг - то ли в принципе обработки строк в MQL, то ли еще в чем.
Если кто в курсе нюансов, плиз дайте наводку.
Если кто в курсе нюансов, плиз дайте наводку.
Это такой род особенностей, что даже если знал, приходится заново поднимать весь пласт у себя в голове.
Здесь делал определение наличия себя же. Вроде, работало при переключении ТФ.