Build 1151. Ошибка отображения графика MT4 при использовании индикатора с фиксированной высотой.
Пожалуйста, проверьте это видео, чтобы продемонстрировать ошибку.
Для воспроизведения прикрепите индикатор на графике и просто измените размер окна, как показано на видео.
Build 1151.
Пожалуйста, проверьте это видео, чтобы продемонстрировать ошибку.
Для воспроизведения прикрепите индикатор на графике и просто измените размер окна, как показано на видео.
use CHARTEVENT_CHART_CHANGE instead CHARTEVENT_OBJECT_CLICK
if(id==CHARTEVENT_CHART_CHANGE) { subwHeight=(subwHeight==0 ? 100 : 0); if(ChartSetInteger(0,CHART_HEIGHT_IN_PIXELS,ChartWindowFind(),subwHeight)) Comment("Sub height ",subwHeight); }
use CHARTEVENT_CHART_CHANGE instead CHARTEVENT_OBJECT_CLICK
Как это связано с ошибкой отображения графика MT4?
так же как и OnChartEvent и ObjectCreate - никак)
Форум по торговле, автоматизированным торговым системам и тестированию торговых стратегий
Го Вэй Лонг , 2018.12.16 05:56
почему бы не использовать новую версию пометки "Copyright 2009-2018"
и я не думаю, что новые изменения или откат является правильным
stdlib.mq4: без экспорта функция может получить доступ извне?
Indicator.mqh: очевидно, что старая версия кода содержит ошибку
так что я не уверен, за что меняется версия 1160
Приветствую.
После процедуры добровольно-принудительного обновления при компиляции получил пачку предупреждений "expression not boolean".
Условно их можно разделить на 2 группы.
Группа №1. Семейство MQLInfoInteger()/ AccountInfoInteger() / TerminalInfoInteger(), возвращающие "булеву" единицу.
С одной стороны, вроде ожидаемый фикс, так как предлагаемый в справке код вроде:
if(!TerminalInfoInteger(TERMINAL_TRADE_ALLOWED)) |
с точки зрения любого адекватного программиста есть дурнопахнущая ересь, но я делал скидку на то, что всё-таки это DSL, а не полноценный промышленный язык программирования, где за подобные формулировки разработчику организовали бы спортивно-развлекательное мероприятия с намоченными тряпками. И раз разработчик везде в справке предлагает подобный код как "best practice", можно предположить, что у него на этот счет были какие-то разумные соображения.
Теперь же, когда компилятор справедливо плюётся "варнингами" на примеры из мануалов разработчика, остаётся спросить разработчика, как на его взгляд теперь должен выглядеть корректный код в подобных случаях:
Так?
if(!(bool) TerminalInfoInteger(TERMINAL_TRADE_ALLOWED)) |
Или так ?
if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED)!=1) |
Или всё-таки собраться с силами и допилить напрашивающиеся тут TerminalInfoBoolean() / MQLlInfoBoolean() ?
В любом случае НУЖНО исправлять все соответствующие примеры из справок, обновлять файл справки MetaEditor и онлайн хелп, так как "раздвоение сознания" между официальным мануалом и требованием компилятора, это уже за гранью добра и зла, даже для DSL.
Вторая группа предупреждений внезапно для меня прилетела на выражения с не сокращенными логическими И вида:
bool Test() |
Сразу прошу не оффтопить комментариями из серии зачем нужен "&" когда есть "&&". Условно в одном случае из 100 бывает нужно сделать именно так, если не понятно зачем, можно завести отдельную ветку с вопросом. Валидным с точки зрения компилятора теперь является:
bool Test() |
Тут конечно хотелось бы услышать внятные комментарии, зачем эти дополнительные телодвижения нужны? Это каноническое поведение для C/C++? Спрашиваю, потому что хоть и знаком с ними более 20 лет, но никогда не занимался на них коммерческой разработкой. Или тут причина, в том разработчики решили "закрутить" гайки для побитовых операций и слегка перестарались? Классический AND то вы зачем испортили?
И подводя итог, всё же хочется услышать от разработчиков, несколько более развернутую информацию о релизе, чем "Исправлены ошибки и повышена стабильность работы платформы."
Косметические исправления вроде новых иконок папок в навигаторе Metaeditor или изменение подсветки синтаксиса в редакторе (это из того что сразу бросилось в глаза) можно опустить. Но вот изменения в работе булевых выражений, ИМХО, требует чётких и внятных объяснений. Каких конкретно мест коснулись данные изменения. Стали более строгими только проверки компиляции или ожидать изменений и в генерируемом компилятором коде. Поскольку если из-за подобных "незначительных" изменений, где-то изменится поведение работы эксперта и в результате кто-то получит стоп-лосс или маржин-колл, наверное не нужно объяснять с какими именно пожеланиями добра и счастья сюда придут люди ;)
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Бета-версия платформы MetaTrader 4 build 1145
fxsaber, 2018.11.19 22:25
На графиках вертикальная шкала цен на некоторых окнах сдвинута вправо так, что не все цифры видны.
На скрине два окна одного и того же символа с идентичными настройками. В левом окне не видны полностью цены - сдвинуты вправо. Как-либо заставить правильно отоброжать вертикальную шкалу не получается.
Так и выходит, что некоторые чарты с багом, а некоторые - нормальные.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Бета-версия платформы MetaTrader 4 build 1145
fxsaber, 2018.12.11 13:41
Большая просьба починить
Через какое-то время все чарты в MT4 начинают жить с этим багом.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Бета-версия платформы MetaTrader 4 build 1145
fxsaber, 2018.12.11 15:35
Символы любые. Важно, чтобы MT4 (хотя бы несколько дней (не перезагружал несколько недель)) был долго открыт с одними и теми же чартами. На вновь открываемых чартах все в порядке какое-то время.
Если индикатор/эксперт/скрипт (далее - программа) отображает графику не в своем окне, то возникает подвисание функций при обращении к этому графику, если пользователь закроет его.
Воспроизведение:
- Взять ID любого другого (не того, на котором работает программа) графика.
- Закрыть окно графика из первого пункта вручную.
- Обратиться к графику при помощи функции ChartGetInteger. Выполнение этой функции займет около 3 сек.
Когда окно графика закрывается (Ctrm, прикрепленный индикатор получает причину единицы 9 (ЗАКРЫТИЕ КЛЕММА), должно быть 4 (ЗАКРЫТИЕ КАРТЫ).
void OnDeinit ( const int reason) { printf ( "reason " ,reason); }
Если индикатор/эксперт/скрипт (далее - программа) отображает графику не в своем окне, то возникает подвисание функций при обращении к этому графику, если пользователь закроет его.
Воспроизведение:
- Взять ID любого другого (не того, на котором работает программа) графика.
- Закрыть окно графика из первого пункта вручную.
- Обратиться к графику при помощи функции ChartGetInteger. Выполнение этой функции займет около 3 сек.
Написал проверочного эксперта
//+------------------------------------------------------------------+ //| TestChartProperties.mq4 | //| Copyright 2018, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2018, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict long ExtChartId=0; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { ExtChartId=ChartNext(ChartID()); Print("Next chart ",ExtChartId," ",ChartSymbol(ExtChartId),",",EnumToString(ChartPeriod(ExtChartId))); //--- EventSetTimer(10); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- EventKillTimer(); } //+------------------------------------------------------------------+ //| Timer function | //+------------------------------------------------------------------+ void OnTimer() { uint start=GetTickCount(); int scale=(int)ChartGetInteger(ExtChartId,CHART_SCALE); uint delta=GetTickCount()-start; Print("chart scale=",scale," in ",delta," msc"); Print("Next chart ",ChartSymbol(ExtChartId),",",EnumToString(ChartPeriod(ExtChartId))); } //+------------------------------------------------------------------+
Вот его лог
2018.12.18 12:22:03.734 Expert Test\TestChartProperties GBPUSD,H1: loaded successfully 2018.12.18 12:22:05.690 TestChartProperties GBPUSD,H1: Next chart 131896014017907143 USDJPY,PERIOD_H1 2018.12.18 12:22:05.695 TestChartProperties GBPUSD,H1: initialized 2018.12.18 12:22:15.706 TestChartProperties GBPUSD,H1: chart scale=1 in 0 msc 2018.12.18 12:22:15.706 TestChartProperties GBPUSD,H1: Next chart USDJPY,PERIOD_H1 2018.12.18 12:22:25.700 TestChartProperties GBPUSD,H1: chart scale=1 in 0 msc 2018.12.18 12:22:25.700 TestChartProperties GBPUSD,H1: Next chart USDJPY,PERIOD_H1 2018.12.18 12:22:35.700 TestChartProperties GBPUSD,H1: chart scale=2 in 0 msc 2018.12.18 12:22:35.700 TestChartProperties GBPUSD,H1: Next chart USDJPY,PERIOD_H1 2018.12.18 12:22:45.701 TestChartProperties GBPUSD,H1: chart scale=4 in 0 msc 2018.12.18 12:22:45.701 TestChartProperties GBPUSD,H1: Next chart USDJPY,PERIOD_H1 2018.12.18 12:22:55.706 TestChartProperties GBPUSD,H1: chart scale=4 in 0 msc 2018.12.18 12:22:55.706 TestChartProperties GBPUSD,H1: Next chart USDJPY,PERIOD_H1 2018.12.18 12:23:05.700 TestChartProperties GBPUSD,H1: chart scale=4 in 0 msc 2018.12.18 12:23:05.700 TestChartProperties GBPUSD,H1: Next chart USDJPY,PERIOD_H1 2018.12.18 12:23:15.702 TestChartProperties GBPUSD,H1: chart scale=4 in 0 msc 2018.12.18 12:23:15.702 TestChartProperties GBPUSD,H1: Next chart USDJPY,PERIOD_H1 2018.12.18 12:23:25.695 TestChartProperties GBPUSD,H1: chart scale=0 in 0 msc 2018.12.18 12:23:25.695 TestChartProperties GBPUSD,H1: Next chart ,PERIOD_CURRENT 2018.12.18 12:23:35.695 TestChartProperties GBPUSD,H1: chart scale=0 in 0 msc 2018.12.18 12:23:35.695 TestChartProperties GBPUSD,H1: Next chart ,PERIOD_CURRENT 2018.12.18 12:23:45.700 TestChartProperties GBPUSD,H1: chart scale=0 in 0 msc 2018.12.18 12:23:45.700 TestChartProperties GBPUSD,H1: Next chart ,PERIOD_CURRENT 2018.12.18 12:23:53.990 TestChartProperties GBPUSD,H1: uninit reason 1 2018.12.18 12:23:53.995 Expert TestChartProperties GBPUSD,H1: removed
В логе видно, когда был закрыт график USDJPY,H1
Либо я сильно упрощаю, либо Вы даёте не все подробности
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Новая версия платформы MetaTrader 4 build 1160
14 декабря 2018 года будет выпущена обновленная версия платформы MetaTrader 4. Обновление содержит следующие изменения:
Для поддержки групповых проектов был изменен протокол работы с онлайн хранилищем MQL5 Storage. К сожалению, после обновления на новую версию платформы вам потребуется заново извлечь все данные из хранилища. Сами данные, которые в нем хранятся, не будут затронуты и не потеряются. Перед обновлением рекомендуем отправить все локальные изменения в хранилище (выполнить Commit).
Обновление будет доступно через систему Live Update.