Загадка.

 
У нас есть такой скрипт:
int start()  {
   int TS = 90;
   double op = Open[26716]-(3*Point);
   double cp = Low[26640];
   GlobalVariableSet("op",op);
   GlobalVariableSet("cp",cp);
   //Значения op и cp в котировках следующие:
   //op = 1.2245
   //cp = 1.2155
   //Point = 0.0001 EURUSD
   if ( op - cp > 90*Point)
      GlobalVariableSet("Test",1);
   else GlobalVariableSet("Test",2);
   return(0);
}



Вопрос. Почему в переменной Test у нас единица?. А если в ручную присвоить значения op и cp которые закоментированы в коде, то значение переменной Test будет 2.
Значиние Open[26716] действительно в котировках равно 1.2248 и если отнять 3 пункта то op выходит 1.2245. В значении Low[26640] никакой ошибки нет касательно котировок, и оно равняется 1.2155. Делаю подсказку, глюков с 3*Point тоже нет. И еще одно. Иногда если пошаманить с различными значениями High Open Low Close, а имеено поменять допустим значение 1.2471 (это для примера) с типа дабл в тип инт. А именно умножите это значение на 10000, нормализуете, отрежете дробную часть которой и так нет, и че только е будите делать, но если переведете в значение инт, то у вас выйдет 12472. т.е. на единицу больше. Но в данном случае если вы переводите cp и op в тип инт, то значения не меняются, и в переменной Test будет значение 2.

P.S. Билд 195

 
Наверно в справке по MQL4 надо сделать раздел "ГРАБЛИ", который будет принудительно раскрываться на весь экран при первом запуске редактора.

При сравнении чисел типа double их надо нормализвать - x=NomalizeDouble(x,Digits);
 
Только вот почему в с правке написано что NormalizeDouble у нас void?
 
???
Только вот почему в с правке написано что NormalizeDouble у нас void?


Help (ME):
double NormalizeDouble( double value, int digits)
Округление числа с плавающей запятой до указанной точности.


About Program (ME Version):
Version 4:00 Build 195 (20 Jul 2006)


About Program (MT Version):
Version 4:00 Build 195 (20 Jul 2006)
 
у меня английская версия :(

void NormalizeDouble( double value, int digits)
Rounds the floating point value to the given precision.
The calculated StopLoss and TakeProfit values, as well as open price of pending orders must be normalized with a precision the value of which is stored in the pre-defined variable of Digits.
Parameters:
value - Floating point value.
digits - Precision format, number of digits after decimal point (0-8).

Sample:
double var1=0.123456789;
Print(NormalizeDouble(var1,5));
// output: 0.12346
 
Merab, спасибо за замечание. Исправим.
 
Merab, спасибо за замечание. Исправим.
=======Интересно когда?в каком БУИЛЬДЕ это будет?
Мешает работать и зарабатывать!