Всем привет !
Какие то глюки странные. Вывожу обычный 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 применяйте нормализацию:
- для расчётной части это NormalizeDouble.
- при преобразовании же числового значения в текстовую строку это DoubleToString.
P./S.: Про особенности работы с числами double, посмотрите инфу по поиску. Например, эту статью.
У вас период усреднения задан в 1 500 баров. А сколько баров сформировано на тестерном чарте до того бара, где выходит значение EMA 1.633405877461445?
Для получения же стольких же десятичных знаков, сколько и на чарте, при выводе отметок применяйте нормализацию:
- для расчётной части это NormalizeDouble(...).
- при преобразовании же числового значения в текстовую строку это DoubleToString(...).
Я применяю нормализацию до Digits-1 но ничего не меняется почему то.
История на чарте с 1999 года.
В MQL5 всё также но расхождений тестера и графика нет.
Я применяю нормализацию до Digits-1 но ничего не меняется почему то.
История на чарте с 1999 года.
В MQL5 всё также но расхождений тестера и графика нет.
Не история, а сколько баров на чарте.)
У вас в тестере проставлена дата начала тестирования 2011.05.01. Посмотрите, сколько баров на тестерном чарте до того бара, где выходит значение EMA 1.633405877461445.
По поводу же нормализации - это значение со многими знаками после точки выходит у вас при печати в журнал (или в комменте, или при печати другим способом), так ведь?
При преобразовании числового значения в текстовую строку, применяйте дополнительно DoubleToString (для вывода значения в журнал и т.д.).
Выше, до того как увидела ваш пост, добавила ссылку на полезную статью.Не история, а сколько баров на чарте.)
У вас в тестере проставлена дата начала тестирования 2011.05.01. Посмотрите, сколько баров на тестерном чарте до того бара, где выходит значение EMA 1.633405877461445.
Поповоду же нормализации, это значение со многими знаками после точкивыходит у вас при печати в журнал (или в комменте, или при печати другимспособом), так ведь?
При преобразовании числового значения в текстовую строку, применяйте DoubleToString (для вывода значения в журнал и т.д.).
Выше, до того как увидела ваш пост, добавила ссылку на полезную статью.На чарте очень много баров :-). У меня лимит в настройках 1.000.000.
Все настройки в MT4 и в MT5 идентичны. Только в MT4 данные в тестере не совпадают с данными на графике а в МТ5 всё нормально.
На чарте очень много баров :-). У меня лимит в настройках 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.
Я может быть чего то не понял.
Вот простенький код.
По идее я должен увидеть измененную переменную a равную 1.321000000 верно ?
Однако я вижу всё то же число 1.321456987.
Это означает что округления не произошло ?
Кстати сделки нормально проходят. То есть по видимому функция эта работает но как это проверить ?
double a=1.321456987; NormalizeDouble(a,3); Print (a);
P./S.: У вас на скрине тестирование с 2011.05.01 до 2011.11.23 на пятиминутном чарте.
Отметка МА на скрине графика H1, равная 1,62409, значится за 2011.05.04 в 07:00.
Верно. Я тестирую на M5 но считываю значения с H1 и что вас смущает ? :-)
Кстати по поводу функции NormalizeDouble.
Я может быть чего то не понял.
Вот простенький код.
По идее я должен увидеть измененную переменную a равную 1.321000000 верно ?
Однако я вижу всё то же число 1.321456987.
Это означает что округления не произошло ?
Кстати сделки нормально проходят. То есть по видимому функция эта работает но как это проверить ?
В третий раз посоветую - при выводе числового значения double в текст, применяйте DoubleToString. ) Несмотря на то, что до этого есть нормализация числового значения для расчётов с помощью NormalizeDouble.
Т.е., если своими словами, то NormalizeDouble нормализует числовое значение для расчётов, но для вывода значения в текст нужно применить DoubleToString. Тогда при выводе отметки через Print, Label и т.д. не будет сюрпризов в виде текстовых значений со многими знаками после точки.
Всё-таки прочитайте, пожалуйста, про особенности чисел double.
Print (DoubleToString(a,3));
Верно. Я тестирую на M5 но считываю значения с H1 и что вас смущает ? :-)
Меня - пока, вроде, не заметила повода для смущения.
Если кратко, то пыталась просто вам сказать, что бы вы убедились, что перед началом тестирования данные для расчётов готовы и подкачаны и есть в наличии все необходимые ценовые данные другого тайм-фрейма, и эти данные являются корректными. Как-то так.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем привет !
Какие то глюки странные. Вывожу обычный EMA на часовой график GBPUSD. Получаю 1,62409 на момент 2011.05.04 07:35.
Тоже самое пытаюсь получить в тестере через функцию iMA(Symbol(),PERIOD_H1,1500,0,MODE_EMA,0,1); Результат 1.633405877461445.
Как я это заметил ? Очень просто. В MT5 значения в тестере и на графике индикатора совпадают а в MT4 как оказалось нет.
Помогите пожалуйста разобраться.