Тестер выдает неправильные величины EMA !

 

Всем привет !

Какие то глюки странные. Вывожу обычный EMA на часовой график GBPUSD. Получаю 1,62409 на момент 2011.05.04 07:35.

Тоже самое пытаюсь получить в тестере через функцию iMA(Symbol(),PERIOD_H1,1500,0,MODE_EMA,0,1); Результат 1.633405877461445.

Как я это заметил ? Очень просто. В MT5 значения в тестере и на графике индикатора совпадают а в MT4 как оказалось нет.

Помогите пожалуйста разобраться.


 
goodearth:

Всем привет !

Какие то глюки странные. Вывожу обычный EMA на часовой график GBPUSD. Получаю 1,62409 на момент 2011.05.04 07:35.

Тоже самое пытаюсь получить в тестере через функцию iMA(Symbol(),PERIOD_H1,1500,0,MODE_EMA,0,1); Результат 1.633405877461445.

Как я это заметил ? Очень просто. В MT5 значения в тестере и на графике индикатора совпадают а в MT4 как оказалось нет.

Помогите пожалуйста разобраться.

У вас период усреднения задан в 1 500 баров. А сколько баров сформировано на тестерном чарте до того бара, где выходит значение EMA 1.633405877461445?

Для получения же стольких же десятичных знаков, сколько и на чарте (т.е., вместо 1.633405877461445 равное необходимому количеству значений после точки), при выводе отметок для чисел с типом double применяйте нормализацию:

  • при преобразовании же числового значения в текстовую строку это DoubleToString.

P./S.: Про особенности работы с числами double, посмотрите инфу по поиску. Например, эту статью.

 
DiPach:

У вас период усреднения задан в 1 500 баров. А сколько баров сформировано на тестерном чарте до того бара, где выходит значение EMA 1.633405877461445?

Для получения же стольких же десятичных знаков, сколько и на чарте, при выводе отметок применяйте нормализацию:

  • для расчётной части это NormalizeDouble(...).
  • при преобразовании же числового значения в текстовую строку это DoubleToString(...).


Я применяю нормализацию до Digits-1 но ничего не меняется почему то.

История на чарте с 1999 года.

В MQL5 всё также но расхождений тестера и графика нет.

 
goodearth:

Я применяю нормализацию до Digits-1 но ничего не меняется почему то.

История на чарте с 1999 года.

В MQL5 всё также но расхождений тестера и графика нет.


Не история, а сколько баров на чарте.)

У вас в тестере проставлена дата начала тестирования 2011.05.01. Посмотрите, сколько баров на тестерном чарте до того бара, где выходит значение EMA 1.633405877461445.

По поводу же нормализации - это значение со многими знаками после точки выходит у вас при печати в журнал (или в комменте, или при печати другим способом), так ведь?

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

Выше, до того как увидела ваш пост, добавила ссылку на полезную статью.
 
DiPach:

Не история, а сколько баров на чарте.)

У вас в тестере проставлена дата начала тестирования 2011.05.01. Посмотрите, сколько баров на тестерном чарте до того бара, где выходит значение EMA 1.633405877461445.

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

При преобразовании числового значения в текстовую строку, применяйте DoubleToString (для вывода значения в журнал и т.д.).

Выше, до того как увидела ваш пост, добавила ссылку на полезную статью.

На чарте очень много баров :-). У меня лимит в настройках 1.000.000.

Все настройки в MT4 и в MT5 идентичны. Только в MT4 данные в тестере не совпадают с данными на графике а в МТ5 всё нормально.

 
goodearth:

На чарте очень много баров :-). У меня лимит в настройках 1.000.000.

Все настройки в MT4 и в MT5 идентичны. Только в MT4 данные в тестере не совпадают с данными на графике а в МТ5 всё нормально.


Вы смотрели статьи по тестеру: https://www.mql5.com/ru/articles/mt4/strategy_tester ?

В том числе, Тестер в терминале MetaTrader 4: Это необходимо знать ?
 

P./S.: У вас на скрине тестирование с 2011.05.01 до 2011.11.23 на пятиминутном чарте.

Отметка МА на скрине графика H1, равная 1,62409, значится за 2011.05.04 в 07:00.

 
Кстати по поводу  функции NormalizeDouble.

Я может быть чего то не понял.

Вот простенький код.

По идее я должен увидеть измененную переменную a равную 1.321000000 верно ?

Однако я вижу всё то же число  1.321456987. 

Это означает что округления не произошло ?

Кстати сделки нормально проходят. То есть по видимому функция эта работает но как это проверить ?

     double a=1.321456987;
     NormalizeDouble(a,3);
     Print (a);
 
 
DiPach:

P./S.: У вас на скрине тестирование с 2011.05.01 до 2011.11.23 на пятиминутном чарте.

Отметка МА на скрине графика H1, равная 1,62409, значится за 2011.05.04 в 07:00.

Верно. Я тестирую на M5 но считываю значения с H1 и что вас смущает ? :-)

 
goodearth:
Кстати по поводу  функции NormalizeDouble.

Я может быть чего то не понял.

Вот простенький код.

По идее я должен увидеть измененную переменную a равную 1.321000000 верно ?

Однако я вижу всё то же число  1.321456987. 

Это означает что округления не произошло ?

Кстати сделки нормально проходят. То есть по видимому функция эта работает но как это проверить ?

В третий раз посоветую - при выводе числового значения double в текст, применяйте DoubleToString. ) Несмотря на то, что до этого есть нормализация числового значения для расчётов с помощью NormalizeDouble.

Т.е., если своими словами, то NormalizeDouble нормализует числовое значение для расчётов, но для вывода значения в текст нужно применить DoubleToString. Тогда при выводе отметки через Print, Label и т.д. не будет сюрпризов в виде текстовых значений со многими знаками после точки.

Всё-таки прочитайте, пожалуйста, про особенности чисел double.

Print (DoubleToString(a,3));
 
goodearth:

Верно. Я тестирую на M5 но считываю значения с H1 и что вас смущает ? :-)

Меня - пока, вроде, не заметила повода для смущения.

Если кратко, то пыталась просто вам сказать, что бы вы убедились, что перед началом тестирования данные для расчётов готовы и подкачаны и есть в наличии все необходимые ценовые данные другого тайм-фрейма, и эти данные являются корректными. Как-то так.

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