Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1294

 
ANDREY:

Всем доброго времени суток!

Пытаюсь перейти с mql4 на mql5. 

ВОПРОС. Почему вместо разницы между текущей ценой  и значением переменной Hay, которая должна быть числом <1( как это было в mql4) , mql5 вычисляет и отображает непонятные мне выражения , например, 2.99999999 -(минус)05 . 

Как сделать так что бы  mql5 правильно считал разницу между данными значениями? Я нормализовывал все значения при помощи NormalizeDouble(), но вышеуказанные значения 

отображались без изменений. Это странно для меня , ведь оба значения типа doble 

Всем спасибо за помощь.


2.99999999 -(минус)05  = 2.99999999 / 100000 = 0.0000299999999. Так в математике принято.

-(минус)05 это делить на 10 в пятой степени.

 
IndependentMK:

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

Не открывает потому что не выполняется одно из условий.

Это

while(MA_Smoth_B > MA_Smoth_S)

или это

if(MA_Simpl_B_Op < MA_Simpl_S_Op && MA_Simpl_B_Cl > MA_Simpl_S_Cl)

Закомментируйте двумя флешами // и поймете какое именно из них. Так и найдете ошибку.

 
Александр:

2.99999999 -(минус)05  = 2.99999999 / 100000 = 0.0000299999999. Так в математике принято.

-(минус)05 это делить на 10 в пятой степени.

Спасибо за ответ.  Но почему  вместо выражения  программа не вычисляет разницу между значением цены 1.33671  и значением Hay 1.33664, которая должна равняться 0.00007, а вместо этого выводит выражение?

В тоже время , когда вместо переменной  Hay со значением 1.33664 я подставляю константу  1.33664 ( SymbolInfoDouble(Symbol(),SYMBOL_BID) - 1.33664 ) то программа вычисляет реальная разница между этими значениями , то есть 0.00007. Ведь в коде переменная  Hay получает значение цены открытия ордера на предыдущем тике, значение типа double  1.33664 

Заранее благодарен за подсказку

 
ANDREY:

Спасибо за ответ.  Но почему  вместо выражения  программа не вычисляет разницу между значением цены 1.33671  и значением Hay 1.33664, которая должна равняться 0.00007, а вместо этого выводит выражение?

Заранее благодарен за подсказку

DoubleToString(). И дело не в MQL5, а в неправильном выводе вами вещественных значений в журнал. Это и к MQL4 относится в абсолютно равной степени.

Документация по MQL5: Преобразование данных / DoubleToString
Документация по MQL5: Преобразование данных / DoubleToString
  • www.mql5.com
[in]  Формат точности. Если значение digits лежит в диапазоне от 0 до 16, то будет получено строковое представление числа с указанным количество знаков после запятой. Если значение digits лежит в диапазоне от -1 до -16, то...
 
Artyom Trishkin:

DoubleToString(). И дело не в MQL5, а в неправильном выводе вами вещественных значений в журнал. Это и к MQL4 относится в абсолютно равной степени.

Понял. Спасибо. Никогда раньше с таким не сталкивался. Теперь буду знать. 

Пока не совсем точно понимаю что такое формат точности применительно к моему коду. Как мне кажется это количество знаков после запятой.
Но в МТ4 в точно таком же коде( кроме OrderSend), если мне не изменяет память, функция Print всегда выводила реальное значение разницы между двумя значениями цен, а именно число меньше 1 (0.00000) с 5 знаками после 0.

 
ANDREY:

Понял. Спасибо. Никогда раньше с таким не сталкивался. Теперь буду знать. 

Пока не совсем точно понимаю что такое формат точности применительно к моему коду. Как мне кажется это количество знаков после запятой.
Но в МТ4 в точно таком же коде( кроме OrderSend), если мне не изменяет память, функция Print всегда выводила реальное значение разницы между двумя значениями цен, а именно число меньше 1 (0.00000) с 5 знаками после 0.

Везде выводятся реальные значения данных. Просто разный формат представления вещественных чисел. Если терминалу не указан формат вывода, то он сам решает какой формат будет удобнее. Естественно, что при этом подразумевается знание вами всех форматов представления чисел.

Всё есть в справке.

 
Artyom Trishkin:

Везде выводятся реальные значения данных. Просто разный формат представления вещественных чисел. Если терминалу не указан формат вывода, то он сам решает какой формат будет удобнее. Естественно, что при этом подразумевается знание вами всех форматов представления чисел.

Всё есть в справке.

То есть , у МТ4 и у МТ5 разные форматы представления вещественных чисел?
А в Справке mql5 что конкретно нужно читать что разобраться с этим вопросом?

Спасибо за помощь

 
Michail_David:
Здравстуйте, товарищи знатоки. Нужна ваша помощь в корректировке индикатора. Суть индикатора такова. Рассчитать величину повышения цены относительно предыдущего бара. За ноль берётся бар звезда. То есть цена открытия равно цене закрытия. При компиляции ошибок нет, но при тестировании выдаёт ошибку на строке 80 20 символа. Так же криво отрисовывает сигнальную линию. Но думаю это причина именно в неправильном расчёте основного буфера. Помогите исправить.

Ладно. Похоже здесь помогают только избранным

 
Michail_David:

Ладно. Похоже здесь помогают только избранным

Пробуйте так

//--- typical price and its moving average
   for(i=0; i<rates_total-1; i++)
     {
      ExtTempBuffer[i] = NormalizeDouble((close[i]-open[i])/Point(),2);
 
Vitaly Muzichenko:

Пробуйте так

Спасибо, Виталий. Но всё равно при тестировании выдаёт ошибку в строке  ExtTempBuffer[i] = NormalizeDouble((close[i]-open[i])/Point(),2); на элементе [i}.

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