Новая версия платформы MetaTrader 5 build 3550: улучшения и исправления - страница 18

 
Alexandr Gavrilin #:


И что мне теперь всегда одно из чисел преобразовывать к double чтобы получать дробное??? Ну это бред, так раньше не работало.

Екзешники перестали работать или заново скомпилированные? Вообще у Ковалева в учебнике 2009 года тоже 2/4=0.

Возможно поведение нормализации изменили.

 
Valeriy Yastremskiy #:

Екзешники перестали работать или заново скомпилированные? Вообще у Ковалева в учебнике 2009 года тоже 2/4=0.

Возможно поведение нормализации изменили.

Добрый день, Валерий! Поведение нормализации очень давно у меня вызывает недоумение. Например, за каким лядом писать в Справочнике MQL5:

double  NormalizeDouble( 
   double  value,      // нормализуемое число 
   int     digits      // кол-во знаков после запятой 
   );

когда по факту в отладчике или при выводе на принт, количество знаков после запятой не ограничивается этим дигитсом? Мне один хороший человек и Программист уже объяснял почему это так, но всё равно пока не до конца понятно.

С уважением, Владимир.

 
Давно есть специально созданная ветка по общим вопросам начального уровня.
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - Попробуйте сделать настраиваемым число баров построения т Е отличным от 5.
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - Попробуйте сделать настраиваемым число баров построения т Е отличным от 5.
  • 2016.11.09
  • www.mql5.com
Исправления минимальные Правда я бы немного иначе бы делал. Это Смещение стрелок по вертикали для стиля DRAW Ничем из стандартного. Просто можно задать смещение либо жестко в настройках. Не вызывать из другого индикатора Или показать как вы это делаете
 
MrBrooklin #:

Поведение нормализации очень давно у меня вызывает недоумение.

Подробно разбирали.

Forum on trading, automated trading systems and testing trading strategies

Bug in MetaEditor Build 3566: Wrong display of double floating point numbers in the debugger window

fxsaber, 2023.02.01 17:57

Если это слово убрать из описания функции, то она становится правильной для ее использования.

NormalizeDouble

Округление числа с плавающей точкой до указанной точности.

fxsaber #:
Основной задачей финансового приложения при работе с ценами является единый алгоритм нормализации цен. Если все цены нормализованы по единому алгоритму, то все в порядке. Ссылка является доказательством того, что это именно то, что происходит в МТ5.
fxsaber #:
Print(1.14 == NormalizeDouble(1.14, 2)); // MT5-false, MT4-true.

В МТ4 функция работает так, как видится правильным. Но должен быть баланс между точностью и скоростью выполнения .

Если все цены нормируются по единому алгоритму, пусть и не идеальному, то задача нормализации сравнения цен выполнена на 100%.

fxsaber #:
Предварительная нормализация цен имеет большое значение для проведения тестирования на исторических данных. Нормализованные цены всегда можно сравнивать напрямую друг с другом.
 
Alexey Viktorov #:

А зачем больше MAXBARS?

Получает количество баров равное rates_total

Так rates_total то и показывает как правило больше чем MAXBARS. Об этом я и пишу тут седьмую страницу. Алексей, почитайте с начала эту историю. Или на соседней ветке пост.

 
Rashid Umarov #:

Я молча читаю и поражаюсь. Все это многократно уже обсуждалось - что в процессе работы терминала количество баров может выходить за пределы MaxBars. Бары  не обрезаются.

Бары то как раз и обрезаются. На графике их всегда MAXBARS, а старые удаляются. У меня такое чувство, что вы меня через слово читаете, а то и через два...

Рашид, покажите пожалуйста, где это неоднократно обсуждалось. Я физически не могу читать всё что пишут на форуме.

И как это связано с iTime(...) В документации ничего не написано про то, что она видит историю только до MAXBARS

 
Andrey Kaunov #:

Так rates_total то и показывает больше чем MAXBARS. Об этом я и пишу тут седьмую страницу. Алексей, почитайте с начала эту историю. Или на соседней ветке пост.

Входными данными индикатора являются только эти ценовые массивы и одно число.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Новая версия платформы MetaTrader 5 build 3550: улучшения и исправления

Andrey Kaunov, 2023.02.07 09:57

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])

И больше ничего! Индикаторы не работают с Copy-функциями (и их производными) и Bars-функциями. Если кто-то решил использовать эти функции на свое усмотрение, то они к индикатору никакого отношения не имеют. Это как в советнике их использовать или запрашивать данные с чужого символа/периода.

Не наделяйте индикаторы функционалом, которого в нем не должно быть. Для индикатора есть только данные из шапки OnCalculate. При выполнении Copy-функций они (функции) понятия не имеют (и не должны), из какой программы вы их вызываете. Их поведение всегда одинаковое, откуда бы вы их не вызвали.

 
fxsaber #:

Подробно разбирали.

Предварительная нормализация цен имеет большое значение для проведения тестирования на исторических данных. Нормализованные цены всегда можно сравнивать напрямую друг с другом.

Разбирали. Читал про это. Вопрос к разработчикам: что мешает написать в справочнике так, чтобы у людей не было двоякого толкования написанного? Можно же было так написать:

   int     digits      // кол-во знаков после запятой из 16-ти отображаемых знаков, которые не округляются до ближайшей цифры 0 или 9. Нормализация не означает 
                          сокращение дробного числа с 16 знаками после запятой до количества знаков указанного в digits.

Всё!!! Вопросов бы больше ни у кого не было! Но нет же, нужно чтобы люди сами догадались или постоянно подымали этот вопрос из года в год.

С уважением, Владимир.

 
Andrey Kaunov #:

Так rates_total то и показывает больше чем MAXBARS. Об этом я и пишу тут седьмую страницу. Алексей, почитайте с начала эту историю. Или на соседней ветке пост.

Я и читаю с самого начала. Вчера ещё начал читать. И перед тем как написать о Copy*** проверил, значения не нулевые без ошибки. Потому и спрашиваю, а что важнее получить значение видимого или доступного бара?

Можно и так получить нормальное значение

    i_time = iTime(_Symbol, PERIOD_CURRENT, TerminalInfoInteger(TERMINAL_MAXBARS)-1);
 
MrBrooklin #:

Разбирали. Читал про это. Вопрос к разработчикам: что мешает написать в справочнике так, чтобы у людей не было двоякого толкования написанного? Можно же было так написать:

Всё!!! Вопросов бы больше ни у кого не было! Но нет же, нужно чтобы люди сами догадались или постоянно подымали этот вопрос из года в год.

С уважением, Владимир.

Владимир, не пытайтесь документацию превратить в учебник начального класса.