Новая версия платформы MetaTrader 4 build 1335: Улучшения для Wine/macOS - страница 3

 

Баг в билде 1335.

При создании линии индикатором (или ЕА), другой индикатор (или ЕА) видит такую линию с цветом clrRed.
Как я понимаю, создающий индикатор не успевает прописать нужный цвет в объекте, но другие индикаторы уже видят этот объект на чарте, с цветом clrRed.

Раньше такого бага не было, объекты успевали создаваться полностью и появлялись на чарте с нужным цветом (и другими параметрами).

Прошу исправить.
Иначе нужно придумывать костыли с паузой-ожиданием создания объектов.

Прилагаю два индикатора, запускать одновременно, и кликать на чарте.

пс. в МТ5 не проверял, возможно и там есть такая "фича".

1

Файлы:
bug_1.mq4  2 kb
bug_2.mq4  3 kb
 
Taras Slobodyanik:

Баг в билде 1335.

При создании линии индикатором (или ЕА), другой индикатор (или ЕА) видит такую линию с цветом clrRed.
Как я понимаю, создающий индикатор не успевает прописать нужный цвет в объекте, но другие индикаторы уже видят этот объект на чарте, с цветом clrRed.

Раньше такого бага не было, объекты успевали создаваться полностью и появлялись на чарте с нужным цветом (и другими параметрами).

Прошу исправить.
Иначе нужно придумывать костыли с паузой-ожиданием создания объектов.

Прилагаю два индикатора, запускать одновременно, и кликать на чарте.

пс. в МТ5 не проверял, возможно и там есть такая "фича".


Вроде бы не баг и не фича. Ведь создание объекта и изменение его свойств происходят, судя по коду, последовательно. То есть сразу после ObjectCreate() возникает событие CHARTEVENT_OBJECT_CREATE. Потом только выполнение переходит к ObjectSetInteger с изменением цвета. Таким образом, по очередности событий все в пределах логики. Для понимания происходящего попробуйте создать объект вручную. Его свойства будут прочитаны абсолютно правильно.

Но сама проблема ясна. Пока не знаю, что предложить, нужно подумать, как такое разрулить.

 
Ihor Herasko:

Вроде бы не баг и не фича. Ведь создание объекта и изменение его свойств происходят, судя по коду, последовательно. То есть сразу после ObjectCreate() возникает событие CHARTEVENT_OBJECT_CREATE. Потом только выполнение переходит к ObjectSetInteger с изменением цвета. Таким образом, по очередности событий все в пределах логики. Для понимания происходящего попробуйте создать объект вручную. Его свойства будут прочитаны абсолютно правильно.

Но сама проблема ясна. Пока не знаю, что предложить, нужно подумать, как такое разрулить.

проверил в МТ5 такого не происходит.
также такого не происходит при создании объекта вручную (с другим цветом).

если предположить что всё правильно, тогда должно приходить событие CHARTEVENT_OBJECT_CHANGE, но его нет

 

Скорее всего   ChartRedraw(); спасёт «Отца русской демократии.»

Объект нарисован, но полное его отображение и новые свойства будут только на следующем тике или после принудительной перерисовке графика.

 
Alexey Viktorov:

Скорее всего   ChartRedraw(); спасёт «Отца русской демократии.»

Объект нарисован, но полное его отображение и новые свойства будут только на следующем тике или после принудительной перерисовке графика.

почитайте для чего нужна функция OnChartEvent.

 
Немного недоглядели в перегрузках.
void OnStart()
{
  ObjectsTotal(0);       // 'ObjectsTotal' - ambiguous call to overloaded function with the same parameters
  ObjectsTotal((long)0); // OK
}
 
fxsaber:
Немного недоглядели в перегрузках.

О, как оказывается...

А то всё приходилось использовать #ifdef __MQL4__

 
fxsaber:
Немного недоглядели в перегрузках.

А где вы видели такую перегрузку? На кой дьявол там 0? Что он означает?

 
Alexey Viktorov:

А где вы видели такую перегрузку? На кой дьявол там 0? Что он означает?

У ObjectsTotal() два варианта: из старого MQL4 и из нового. В старом всего один аргумент - тип объекта, int.  В новом - три аргумента, но два из них по умолчанию, а первый - ID чарта, long. Если указать просто 0, то компилятор не сможет определить, какой вариант использовать - с long или с int. Вот и требуется подсказка в виде приведения типа.

 
fxsaber:
Немного недоглядели в перегрузках.

Прошу прощения, я прочёл OrdersTotal(). От этого и непонимание…

Ihor Herasko:

У ObjectsTotal() два варианта: из старого MQL4 и из нового. В старом всего один аргумент - тип объекта, int.  В новом - три аргумента, но два из них по умолчанию, а первый - ID чарта, long. Если указать просто 0, то компилятор не сможет определить, какой вариант использовать - с long или с int. Вот и требуется подсказка в виде приведения типа.

Я не использую такую перегрузку. Не нравится мне такие параметры 0, NULL и прочее. Для меня приятней завести переменную, в OnInit() назначить ей ChartID() и никаких проблем. Но, для любителей таких вариантов, может быть и неудобно…