MetaTrader 4 build 168. MetaTrader Data Center 4 build 166.

 
MetaTrader 4. Build 168.

1. Улучшена подкачка данных;
2. Улучшена работа через Data Center;
3. Исправлено отображение последних данных некоторых индикаторов в окне "Data Window";
4. Улучшена работа системы получения новостей;
5. Улучшена работа внутренней почты;
6. Внесены изменения в Словарь редактора MetaEditor;
7. Исправлены ошибки по крешлогам.

Выпущена обновленная версия MetaTrader Data Center 4 build 166.
 
Исправлена ли проблема с периодическим отключением МТ от Дата Центра?
Я писал о ней несколько раз, но ответа не получил.
 
Исправлена ли проблема с периодическим отключением МТ от Дата Центра?

Возможно, так как мы проверили достаточно много различных совместных конфигураций.
 
Стратегический тестер? :)
 
MetaTrader 4. Build 168.

1. Улучшена подкачка данных;
2. Улучшена работа через Data Center;
3. Исправлено отображение последних данных некоторых индикаторов в окне "Data Window";
4. Улучшена работа системы получения новостей;
5. Улучшена работа внутренней почты;
6. Внесены изменения в Словарь редактора MetaEditor;
7. Исправлены ошибки по крешлогам.

Выпущена обновленная версия MetaTrader Data Center 4 build 166.


8. Исправлена ошибка в порядке выполнения операций

Ранее (билд 167) в выражении shadow12*100/n1*(100+percent), сначала производилось умножение n1*(100+percent), а затем деление shadow12*100/n1*(100+percent) - что не правильно, теперь все на своих местах и указанные вычисления будут выдавать результат 12*100*(100+percent) / n1
 
8. Исправлена ошибка в порядке выполнения операций

Ранее (билд 167) в выражении shadow12*100/n1*(100+percent), сначала производилось умножение n1*(100+percent), а затем деление shadow12*100/n1*(100+percent) - что не правильно, теперь все на своих местах и указанные вычисления будут выдавать результат 12*100*(100+percent) / n1

Странно, но про такую ошибку мы вообще не в курсе. Похоже наведенный глюк был.
Спасибо что указали.
 
Ранее (билд 167) в выражении shadow12*100/n1*(100+percent), сначала производилось умножение n1*(100+percent), а затем деление shadow12*100/n1*(100+percent) - что не правильно, теперь все на своих местах и указанные вычисления будут выдавать результат 12*100*(100+percent) / n1

Странно это.
Такую ошибку заметили бы все.
Синтаксический разбор арифметики один для всех выражений.

Вот такой скрипт
int start()
{
   int n1 = 11;
   int percent = 20;
   double shadow12 = 10.0;
   double r1 = shadow12*100/n1*(100+percent);
   double r2 = shadow12*100*(100+percent)/n1;
   MessageBox("r1 = "+r1+"\nr2 = "+r2);
}


Дает правильный результат.
Дома у меня 165 билд, после праздников могу и на работе на 167 проверить.
Но ИМХО, результат будет тот же.

 
А вот такой скрипт
int start()
{
   int n1 = 11;
   int percent = 20;
   int shadow12 = 10.0;
   double r1 = shadow12*100/n1*(100+percent);
   double r2 = shadow12*100*(100+percent)/n1;
   MessageBox("r1 = "+r1+"\nr2 = "+r2);
}


Дает разный результат.
И это правильно, так и должно быть.

 
Еще 2 теста

Этот дает совпадающие значения
   int shadow12 = 10.0;
   double r1 = shadow12*100./n1*(100+percent);
   double r2 = shadow12*100.*(100+percent)/n1;



А вот этот разные

   int shadow12 = 10.0;
   double r1 = shadow12*100/n1*(100.+percent);
   double r2 = shadow12*100*(100.+percent)/n1;


Насколько это правильно и логично - не знаю.
В общем-то ставя вещественную константу или переменную справа, юзер будет ожидать вычислений этого выражения с правающей точкой. И докопаться до такой своей ошибки потом будет сложно.

 
Еще 2 теста

Этот дает совпадающие значения
   int shadow12 = 10.0;
   double r1 = shadow12*100./n1*(100+percent);
   double r2 = shadow12*100.*(100+percent)/n1;



А вот этот разные

   int shadow12 = 10.0;
   double r1 = shadow12*100/n1*(100.+percent);
   double r2 = shadow12*100*(100.+percent)/n1;


Насколько это правильно и логично - не знаю.
В общем-то ставя вещественную константу или переменную справа, юзер будет ожидать вычислений этого выражения с правающей точкой. И докопаться до такой своей ошибки потом будет сложно.


Все работает правильно. Это все от приведения типов. Хотите получить double - надо бы следить чтобы операнды(хотя бы один из них) были double. Как минимум, надо константы правильно изначально описывать. Проводя операции между INT и INT, не стоит ожидать, что третья-четвертая операция, проведенная уже с вещественным числом, покажет ожидаемый результат.
 
Еще 2 теста

Этот дает совпадающие значения
   int shadow12 = 10.0;
   double r1 = shadow12*100./n1*(100+percent);
   double r2 = shadow12*100.*(100+percent)/n1;



А вот этот разные

   int shadow12 = 10.0;
   double r1 = shadow12*100/n1*(100.+percent);
   double r2 = shadow12*100*(100.+percent)/n1;


Насколько это правильно и логично - не знаю.
В общем-то ставя вещественную константу или переменную справа, юзер будет ожидать вычислений этого выражения с правающей точкой. И докопаться до такой своей ошибки потом будет сложно.


Все работает правильно. Это все от приведения типов. Хотите получить double - надо бы следить чтобы операнды(хотя бы один из них) были double. Как минимум, надо константы правильно изначально описывать. Проводя операции между INT и INT, не стоит ожидать, что третья-четвертая операция, проведенная уже с вещественным числом, покажет ожидаемый результат.


код(частичный) индикатора в 167 билде

...
    double BuySlBuffer[];
...
    int start()
      {
       //объявление переменных с плавающей точкой
       double ampl1,ampl2,shadow11,shadow12,shadow21,shadow22,maxamp1,maxamp2,
              maxsh11,maxsh12,maxsh21,maxsh22;
       //обявление целочисленных переменных
       int i,j,n1,n2;
...
    BuySlBuffer[i]=Close[i+1]-NormalizeDouble(shadow12*100/n1*(100+percent),4);



выводился ожидаемый результат, хотя в написании ошибка, а вот после установки 168 билда, эта ошибка проявилась (линии индикатора разлетелсь), потому что правильно для моего случая было бы
BuySlBuffer[i]=Close[i+1]-NormalizeDouble(shadow12*100/(n1*(100+percent)),4);

2Renat
сам индикатор(StopLossLevel.mq4) я высылал на stringo... еще до выявления ошибки и результаты вывода в лог тоже, правда по другому поводу.

Причина обращения: