Особенности языка mql4, тонкости и приёмы работы - страница 17

 

Извиняюсь, если не в тему (не могу сказать, что слежу за развитием языка), не могли бы пояснить, что именно делает эта строка?

#property strict

Объясню.

Есть вот такой скрипт, который сравнивает две (одинаковых в МТ) цены.

#property strict

void OnStart()
{
   const int Total = OrdersHistoryTotal();
   int Prices1, Prices2;
   
   double open_price, close_price;
   OrderSelect("37027330", SELECT_BY_TICKET, MODE_HISTORY);
   open_price = OrderOpenPrice();
   close_price = OrderClosePrice();

   Print(open_price);
   Print(close_price);
   Print(open_price-close_price);
   
   return;
}

В МТ цены равны, но разница не равна нулю (о чем писали выше).

Если эту строку (#property strict) убрать, то разница равна нулю.

Почему?

 
Dmitry Rannev :

Извиняюсь, если не в тему (не могу сказать, что слежу за развитием языка), не могли бы пояснить, что именно делает эта строка?

Объясню.

Есть вот такой скрипт, который сравнивает две (одинаковых в МТ) цены.

В МТ цены равны, но разница не равна нулю (о чем писали выше).

Если эту строку ( #property strict)  убрать, то разница равна нулю.

Почему?

"#property strict" полезно только с mql4. С mql5 это бесполезно, так как «строгий» режим всегда верен.
 
Alain Verleyen:
"#property strict" полезно только с mql4. С mql5 это бесполезно, так как «строгий» режим всегда верен.

О МТ4 и идет речь. Тут выше обсуждалась проблема с нормализацией. Мы пытаемся понять, почему некоторые цены в МТ4 равны, а при сравнении не равны. Это продолжение.

 
Dmitry Rannev:

О МТ4 и идет речь. Тут выше обсуждалась проблема с нормализацией. Мы пытаемся понять, почему некоторые цены в МТ4 равны, а при сравнении не равны. Это продолжение.

Дмитрий, эта тема измусолина до дыр. Простите если разглашаю тайну, но ведь у Вас работают такие как Кирилл aka Programmer, Сергей... не скажу фамилию, "она слишком известна чтобы её называть" © Они ведь всё это знают...

 
Dmitry Rannev:

Извиняюсь, если не в тему (не могу сказать, что слежу за развитием языка), не могли бы пояснить, что именно делает эта строка?

Объясню.

Есть вот такой скрипт, который сравнивает две (одинаковых в МТ) цены.

В МТ цены равны, но разница не равна нулю (о чем писали выше).

Если эту строку (#property strict) убрать, то разница равна нулю.

Почему?

void OnStart()
{
  double Price1 = DBL_EPSILON;
  double Price2 = 0;

  Print(Price1 - Price2);          // 0 - грубо показывает.
  Print((Price1 - Price2) * 1e15); // не ноль
}


strict не влияет на равенство. Только на Print - либо грубо, либо более точно показывает число.

 
Dmitry Rannev:

В МТ цены равны, но разница не равна нулю (о чем писали выше).

Если эту строку (#property strict) убрать, то разница равна нулю.

Числа типа double нельзя проверять на равенство (в том числе нулю), нужно сравнивать их разницу с минимальной величиной (DBL_EPSILON, FLT_EPSILON, Point)

 
Ilya Malev:

Числа типа double нельзя проверять на равенство (в том числе нулю), нужно сравнивать их разницу с минимальной величиной (DBL_EPSILON, FLT_EPSILON, Point)

Речь о другом.

 
fxsaber:

Речь о другом.

Я попытался представить, чем вызван этот вопрос и пришел к выводу, что могли быть какие-то ошибки в алгоритме, а не просто вопрос о Принт.

 
Ilya Malev:

Я попытался представить, чем вызван этот вопрос и пришел к выводу, что могли быть какие-то ошибки в алгоритме, а не просто вопрос о Принт.

Проблему выше описал fxsaber. Мы пытаемся найти причину.

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