VP 7.2. Исправление ошибок, оптимизация

Рекомендуемое обновление, особенно если работаете с тиками.

Список изменений:

  • исправлено: неверно рассчитывались границы для периодов меньше D1, fix #15
  • исправлено: не работает, если комбинация параметров приводит к шагу гистограммы больше 1
  • исправлено: при тиковых исходных данных отсутствие фильтрации данных приводит к очень медленной работе, fix #22
  • не используется информация с таймфрейма RangePeriods, меньше ошибок из-за использования множества таймфреймов
  • гистограммы не перепрыгивают большие разрывы (выходные, праздники, в режиме разбивки)
  • при сглаживании не обрезаются хвосты
  • в режиме Outline хвосты замыкаются на ноль
  • уточнение названия параметра: Time Shift -> Time Zone Shift
  • позиции `Window left` и `Widow right` переименованы в `Chart left` и `Chart right` соответственно
  • ускорен расчёт гистограмм за счёт снижения числа обращений к ценовой истории и оптимизации кода
  • установлен таймер на максимальное непрерывное время работы в режиме разбивки на периоды
  • старые, смещённые новым периодом гистограммы удаляются, чтобы на графике было только заданное их число
  • снижена частота запроса истории при её отсутствии при прошлом запросе
А теперь подробнее.

Исправленные баги

Неверно рассчитывались границы для периодов меньше D1

Подробности на страничке бага здесь: https://gitlab.com/fxcoder/mt-script/issues/15. Добавлю только, что вся функция получения границ в режиме разбивки по периодам переписана и проверена на разных параметрах. Как бонус, теперь для расчётов не нужны данные таймфрейма RangePeriod.

Не работает, если комбинация параметров приводит к шагу гистограммы больше 1

Такое могло быть, например, если шаг цены инструмента большой, а к нему ещё и HgPointScale установили немаленький (*100, например), что приводило к большому шагу баров гистограмм, что, в свою очередь, натыкалось на ошибочное применение функций округления.

При тиковых исходных данных отсутствие фильтрации данных приводит к очень медленной работе

Ужасный баг, который для некоторых брокеров совершенно не давал использовать тиковый источник данных. Поток тиков от брокера часто бывает довольно грязным, и, если его не профильтровать, то можно получить неадекватный результат. В данном случае в результате пропуска кривых данных получались очень большие гистограммы, причём большую их часть даже не было видно, однако MT на них очень сильно застревал. См. также Issue #22.

Прочие изменения

Не используется информация с таймфрейма RangePeriods, меньше ошибок из-за использования множества таймфреймов

Об этом выше уже упомянул. Давно хотел избавиться от затягивания данных с лишнего таймфрейма.

Гистограммы не перепрыгивают большие разрывы (выходные, праздники, в режиме разбивки)

Изменение, достойное мажорного обновления. Но на самом деле это был как бы баг, который существовал очень давно, и вот я его пофиксил. Суть в том, что раньше, если диапазон после разбивки начинался, например, в пятницу, а заканчивался в понедельник, то рисовалась единая гистограмма, как будто никакого двухдневного разрыва нет. Вероятно, это не очень хорошо, поэтому теперь пятничный и понедельничный куски будут рисоваться раздельно.

При сглаживании не обрезаются хвосты

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


В режиме Outline хвосты замыкаются на ноль

Ещё одно визуальное улучшение. Исправление из предыдущего пункта также делает подобное, но не до конца. На картинке ниже видно, как странно раньше выглядел режим контура после сглаживания.


См. также Issue #23.

Уточнение названия параметра: Time Shift -> Time Zone Shift

Этот параметр изначально создавался для учёта сдвига часового пояса у брокера, но затем это было забыто, были попытки использовать параметр как сдвиг в общем смысле, но ничего интересного не получилось, поэтому решил вернуть суть и название обратно.

Позиции `Window left` и `Widow right` переименованы в `Chart left` и `Chart right` соответственно

Window может быть переведено (в контексте) как окно расчёта, что вносит путаницу, поэтому дал более чёткие названия значениям параметра.

Ускорен расчёт гистограмм за счёт снижения числа обращений к ценовой истории и оптимизации кода

Раньше каждый бар каждой гистограммы дёргал функцию iTime, что вообще не хорошо. Теперь временная шкала грузится заранее, и далее рисовалка использует уже этот кэш. Этот кусок кода в итоге заработал раз в 100 быстрее, как я люблю :-) На общую производительность это тоже повлияло, не говоря уже о вреде использования синхронных функций получения истории в целом.

Установлен таймер на максимальное непрерывное время работы в режиме разбивки на периоды

Проблема в том, что MT не умеет останавливать индикатор (кроме некоторых особых случаев) до тех пор, пока он не завершит работу. И если индикатор работает несколько секунд или даже минут (привет любителям смотреть глубокую историю), то его работа полностью блокирует остальную работу на том же графике, например нельзя изменить параметры, никакие события не приходят этому или другим индикаторам того же графика (или даже всем графикам того символа?) плюс прочие раздражающие вещи однопоточности. Теперь индикатор будет отдавать управление через некоторое время, что даёт возможность нормально работать с графиком пока грузятся тяжёлые гистограммы. Это изменение касается только режима разбивки на периоды, в режиме диапазона это всё не так актуально.

Старые, смещённые новым периодом гистограммы удаляются, чтобы на графике было только заданное их число

В старых версиях при появлении справа новой гистограммы самая левая оставалась на месте. Новый код поиска диапазонов их удаляет... Дежавю какое-то... И правда, я это уже в 7.0 пофиксил. Но теперь я сделал это другим способом :-)

Снижена частота запроса истории при её отсутствии при прошлом запросе

Если бы не локальные кэши, то за использование старого VP, наверно, всех бы банили на сервере (интересно, а есть такая функция?), т.к. индикатор просто расстреливал сервер (скорее кэш) запросами истории, даже если тот просил подождать. Теперь, по-первых, загрузка следующих гистограмм не продолжается, если история не была загружена, и, во-вторых, в случае неудачи таймеры обновления замедляются в три раза. Теперь индикатор намного более спокойно работает с историей котировок.

Скачать

Скачать можно со страницы хранилища: https://gitlab.com/fxcoder/mt-script. См. также Индикатор VP