Новая версия платформы MetaTrader 4 build 1350 - страница 17

 
Mikhail Dovbakh #:

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

у вас неформализован вопрос, какие усилия, бог мой..

про свежую голову - это нормальный совет. Попробуйте отдохнуть и с той-же проблемой обратится в понедельник. Держу пари - её просто не будет

 
Вот не трогайте МТ4 не трогайте и всё. Все к нему привыкли как есть, всё работает, не нужно доставать чудеса.
 

Зачем в поставке МТ4 старый Canvas.mqh? Какие-то коды под него заточены?


 
Andrey Khatimlianskii #:

Зачем в поставке МТ4 старый Canvas.mqh? Какие-то коды под него заточены?

После обновления MT4 всегда копирую все файлы (с заменой) из MQL5\Include в MQL4\Include.

 
Mikhail Dovbakh #:

Не уверен, что такое поведение  можно считать нормальным.

Есть две ulong переменные, в которых хранится  текущее значение миллисекундного таймлера и когда следует инициировать некоторое действие.

Понятно, что с некоторой периодичностью они сравниваются и иногда срабатывает условие и действие инциируется.)

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

Вот фрагмент кода:

     ulong temp=GetMicrosecondCount();

     long Next=(long)CheckMasterTask.CheckPoint;

     Panel21.SetText(12,"CheckPoint:"+string(Next)+" Current:"+string(temp),clrWhite,2000000,true);

     long z=(long)(Next-temp);

     Panel21.SetText(13,"Delta:"+string(z),clrYellow,2000000,true);

     Panel21.SetText(14,"current (&long):"+string(temp)+" delta: "+(string)((long)(Next-temp)),clrWhite,2000000,true);

     Panel21.SetText(15,"current:"+string(temp)+" delta: "+(string)(Next-temp),clrWhite,2000000,true);

     Panel21.SetText(16,"current:"+string(temp)+" delta: "+(string)(z),clrWhite,2000000,true);    

Кто-то может мне объяснить - почему получаем неверный результат при (string)(long-ulong)? Т.е требуется писать   (string)((long)(log-ulong))?  Что-то не то, имхо.

PS. Ответ оказался прост: ИЕРАРХИЯ ТИПОВ рулит

bool,char,short-int-unsigned int-long-unsigned long-float-double-long double

Так и есть. И по мне правильно явное приведение типов к одному в выражении. Код длиннее, но ошибок меньше.
 
Valeriy Yastremskiy #:
Так и есть. И по мне правильно явное приведение типов к одному в выражении. Код длиннее, но ошибок меньше.

Очевидная истина)

Особенно, если учесть, что многие функции возвращают беззнаковое значение, чей приритет выше... 

И к "классической" ошибке 1/3=0 добавляется (если как в моем примере явно не указывать приведение типов) получение MAX_INT или MAX_LONG-(ожидаемое значение).) 

Ниже воспроизводимый код, где умиление вызывает  факт, что правильный результат получен в результате перевода в стринг)

#property strict
//+------------------------------------------------------------------+
void OnStart()
  {
  uint iCurrent =722;
  int  iinterval=1000;         
  int  iNext=(int)(iCurrent-iinterval/2); // 722-500=222
  Print ("Current :",iCurrent);
  Print ("iNext   :",iNext);
  long  temp=(long)(iNext-iCurrent); //предупреждений нет ожидаем Лонг -500
  Print ( " temp (long):",temp);//int - uint ->uint Result: uint -- oшибка!

  Print ( " delta(&int)"+string((int)(iNext-iCurrent)));    // неожиданный успех  
  Print ( " delta(&long)"+string((long)(iNext-iCurrent)));  // опять штанга
  //-----------------------------------
 }

2021.11.23 12:45:50.402 ulong EURUSDc,M1:  delta(&long)4294966796

2021.11.23 12:45:50.402 ulong EURUSDc,M1:  delta(&int)-500

2021.11.23 12:45:50.402 ulong EURUSDc,M1:  temp (long):4294966796

2021.11.23 12:45:50.402 ulong EURUSDc,M1: iNext   :222

2021.11.23 12:45:50.402 ulong EURUSDc,M1: Current :722


 
fxsaber #:

После обновления MT4 всегда копирую все файлы (с заменой) из MQL5\Include в MQL4\Include.

в дорогом винраре, можно задать схемы, а именно дату в разном форматке, и потом удобно копировать, сохранять

 
Mikhail Dovbakh #:

Очевидная истина)

Особенно, если учесть, что многие функции возвращают беззнаковое значение, чей приритет выше... 

И к "классической" ошибке 1/3=0 добавляется (если как в моем примере явно не указывать приведение типов) получение MAX_INT или MAX_LONG-(ожидаемое значение).) 

Ниже воспроизводимый код, где умиление вызывает  факт, что правильный результат получен в результате перевода в стринг)


После пары часов (дней) упражнений инт лонг и их положительные собратья в стринг и обратно оставил только инт в стринг и обратно. С остальными типами нужно следить за значениями переменных. С целыми проще. Экономия памяти как бы для меня больше искусственная задача. Может конечно мои запросы пока малы.

 

С удивлением обнаружил, что WebRequest отработал в тестере стратегий.

Странно, что справку не подправили...

 
Mikhail Dovbakh #:

С удивлением обнаружил, что WebRequest отработал в тестере стратегий.

Странно, что справку не подправили...

Никому об этом не рассказывай, а то тестер мт4 совсем закроют…
Причина обращения: