Ошибки, баги, вопросы - страница 2930
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Есть еще бОльшая засада с индикаторами.
Некоторые из них реализуют обработчик 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, то ли еще в чем.
Если кто в курсе нюансов, плиз дайте наводку.
Если кто в курсе нюансов, плиз дайте наводку.
Это такой род особенностей, что даже если знал, приходится заново поднимать весь пласт у себя в голове.
Здесь делал определение наличия себя же. Вроде, работало при переключении ТФ.
В 10-ке потребление памяти Терминалом показывается большим. А на Windows Server - много меньше.
Видимо, вычисление потребляемой памяти зависит от ОС.
Это такой род особенностей, что даже если знал, приходится заново поднимать весь пласт у себя в голове.
Здесь делал определение наличия себя же. Вроде, работало при переключении ТФ.
Я особо не вникал, но судя по этим строкам:
имя индикатора (в 0-м параметре) в создании сигнатуры не используется, что довольно странно.
В 10-ке потребление памяти Терминалом показывается большим. А на Windows Server - много меньше.
Видимо, вычисление потребляемой памяти зависит от ОС.
Я особо не вникал, но судя по этим строкам:
имя индикатора (в 0-м параметре) в создании сигнатуры не используется, что довольно странно.
Да, сталкивался. Validate запускает первый проход, следующие - нет. Кнопка Старт не запускается.
Дебажил - запускается. Делал распринтовку в релизе, все якобы хорошо, а не работает.
Сейчас специально запускаю дебаг-версию. Она нажимает на кнопку Старт без помех.
Причину бага так и не смог выяснить.
Хех недавно увидел эот ответ.
Как я понял это у меня локальные агенты не стартуют, почему не понял. В последних версиях терминала стало лучше вроде стартовать.
В 10-ке потребление памяти Терминалом показывается большим. А на Windows Server - много меньше.
Видимо, вычисление потребляемой памяти зависит от ОС.
Ощущение что на виндовс сервер как то не совсем правильно определяет.
Или точнее постоянно сбрасываются настройки графиков, а это зависит от нехватки оперативной памяти. При этом по диспетчеру вроде как всё норм. Или впс ограничивается или мт5 прожорливее.
даёт результат 16388. Как проделать обратную процедуру: подставить значение 16388 и в результате получить строку с названием периода PERIOD_H4? Есть ли встроенная функция или надо писать свой конвертер? Если нет встроенной, как примерно могла бы выглядеть кастомная функция? Возможно, придётся писать что-то типа соответствия "ключ — значение"?