Список изменений
v10.0:
- исправлено: паттерны [1] и [2] работают неверно для нефорексных символов
- поддержка двух вариантов формул: с логарифмированием и без него
- автоматическое определение числа знаков
- псевдонимы-исключения для индексов (в коде, см. index_aliases_)
v9.x:
- исправлено: спецсимволы не обрабатывались как формулы (например, нельзя было посмотреть индекс NG через формулу !NG)
- валюты кроссов теперь учитываются при расчёте индексов (например, AUDUSD*USD без AUD в CalcCurrs будет давать другой результат)
- все элементы формулы теперь рассчитываются через кроссы с USD (существенно быстрее для формул с более чем одним элементом)
- необходимые для расчёта инструменты теперь не попадают автоматически в обзор рынка
- убраны параметры для усреднения и вычитания средней, выполняющих роль индикатора MACD поверх Index: MAPeriod, DiffMAPeriod, MAMethod
- убран параметр AppliedPrice, типы цен кроме цены закрытия либо неинтересны (Open), либо приводят к искажениям
- убран параметр LogScale, формула теперь всегда считается с логарифмическим масштабом (поведение будет изменено в следующей версии - 10.0)
- изменён формат формул, возможность использовать множители для отдельных элементов
- параметры Power и Scale заменены одним фиксированным масштабом 1.0, при необходимости множитель можно добавить к каждому элементу формулы
- значения после логарифмирования теперь не умножаются на 100
Далее подробнее о некоторых изменениях.
Формат формулы
Теперь в формулу можно добавить вес для каждого элемента. При этом доступны две формы записи. Первая форма оставлена для обратной совместимости, в ней также символы умножаются или делятся друг на друга. но теперь каждый можно возвести в степень, например так:
Каждый элемент может быть как со степенью, так и без неё.
Второй вариант предполагает, что все символы перед расчётом формулы будут прологарифмированы, и тогда знаки умножения и деления заменяются на сложение и вычитание, а вес сивмолу даётся не степенью, а множителем. Та же формула в новой записи:
В этом варианте веса (множители) можно ставить либо сзади, либо спереди:
Formula = EURUSD^1.5 * USD^2 / EUR * JPY^2
Каждый элемент может быть как со степенью, так и без неё.
Второй вариант предполагает, что все символы перед расчётом формулы будут прологарифмированы, и тогда знаки умножения и деления заменяются на сложение и вычитание, а вес сивмолу даётся не степенью, а множителем. Та же формула в новой записи:
Formula = EURUSD*1.5 + USD*2 - EUR + JPY*2
В этом варианте веса (множители) можно ставить либо сзади, либо спереди:
Formula = 1.5*EURUSD + USD*2 - EUR - 2*JPY
Псевдонимы индексов
Наверное, можно было бы создать автоматический распознаватель рыночных символов получше, но это вряд ли решит проблему разного именования символов у разных брокеров. Например, золото может быть названо как XAUUSD, так и просто GOLD. В таких случаях, если переключить аккаунт, индикатор не сможет распознать XAUUSD там, где для золота используется символ GOLD.
Для помощи индикатору в такой непростой задаче добавлена возможность указать псевдонимы индексов в формата "индекс: список пар с USD". Так можно указать "XAU: GOLD", и теперь формула "!XAU" будет расшифрована, т.к. для XAU существует пара с USD с именем GOLD. См. глобальную переменную index_aliases_ в коде.
Исправленные ошибки
Нефорексные инструменты обрабатывались неверно, из-за чего нельзя было посмотреть индекс CFD (NG, SPX500 и т.п.). Изначально такая функциональность работала, но отвалилась в процессе последующих обновлений. Теперь можно посмотреть как сам инструмент, например указав просто "NG", так и его индекс, добавив в начале восклицательный знак, например "!NG". С валютами подобной путаницы не происходит, поэтому по-прежнему достаточно написать USD, чтобы получить индекс USD.Если взять формулу USD/USDRUB, то можно ожидать в результате просто RUB (индекс рубля). Однако в старой версии сам рубль не попадал в список валют для расчёта индекса, поэтому формула для индекса рубля давала другой результат. Теперь все валюты в формуле попадают в набор для расчёта индексов, и USD/USDRUB даст в точности то же самое, что и просто RUB.
Сокращение формул
Так как теперь все множители в формуле завязаны на один набор валют, можно сокращать формулы, избавляясь от лишних цепочек. Например, от такой: EURUSD*USDCHF/EURCHF=1. Раньше эту цепочку индикатор вычислял полностью и выдавал в итоге всё равно ту же единицу. Сейчас индикатор сразу сокращает формулу так, чтобы было меньше расчётов и используемых рыночных инструментов.Более того, индикатор стал приводить все кроссы к парам с USD. По этим инструментам обычно доступна более глубокая история, что есть плюс. Минус в том, что для некоторых формул (например, EURCHF, т.е. пара без USD) вычислений и обращений к истории становится больше, но такие случаи достаточно редки, обычно выгода в переходе на пары с USD есть.
Масштаб
Посмотрим на старые параметры Power (общая степень для всей формулы), Scale (общий масштаб - множитель) и LogScale (опция для логарифмирования всей формулы).Индикатор в логарифмической шкале (LogScale=true) выглядит почти точно так же, как и в обычной (для него), все уровни и трендовые линии, максимумы и минимумы остаются на том же месте, форма кривой, а значит и производные от неё (индикаторы) также не меняются или меняются очень слабо. Поэтому этот параметр можно отбросить, что и было сделано в версии 9, сделав все расчёты только с логарифмами (в десятке вновь стали доступны оба варианта, но в другом виде, см. выше "Формат формулы").
При логарифмировании результата Power и Scale начинают работать в формуле полностью идентично, как её множители, поэтому один из этих параметров также можно убрать без всяких последствий.
Т.к. теперь доступны множители для всех элементов формулы, то можно избавиться и от общего. Пусть это и менее удобно, но без лишней сущности, редко кому необходимой.
Прочие излишества
AppliedPrice тоже выкинул. Имеет смысл рассчитывать формулу только по ценам, значения которых достигаются в одно и то же время у всех используемых для расчёта пар с USD. Цена закрытия удовлетворяет этому критерию лучше всего, особенно на ликвидных инструментах, - ещё один плюс от использования в расчётах только пар с USD.Следующие исключенные параметры - MAPeriod, DiffMAPeriod, MAMethod. Эти параметры выполняли роль индикатора MACD поверх Index. Это уже специфичная тема, далеко не каждому интересная. Если нужен MACD, всегда можно написать MACD, который будет брать в качестве исходных данных индекс.
И осталось в итоге всего два параметра, без которых уже никак нельзя - собственно формула (Formula) и набор валют, в котором все вычисления и происходят.
Общие изменения
Кроме того, произойдут изменения для всех новых версий моих скриптов:- Код будет храниться на GitLab.com с использованием системы контроля версий Git и системы обсуждений/багтрекера GitLab (Issues).
- Код будет распространяться под лицензией GPL v3.0 (раньше была BSD 3-clause).
- Новый код из-за существенных изменений в используемой кодо-базе будет значительно отличаться от старого.
- В большинстве случаев будет использоваться унифицированный MQL4/MQL5 код. Это значит, что код будет написан так, что он будет компилироваться в обеих версиях компилятора с одинаковым результатом, насколько это позволяют различия в MT4 и MT5.
- Будет изменён метод публикации. Раньше весь код был в одном файле. Теперь код будет публиковаться в виде папки со скриптом и всеми зависимостями (кроме стандартной библиотеки), которую достаточно будет скопировать в соответствующую поддиректорию MQL4/MQL5 (без растаскивания файлов include вручную).
Новая версия доступна в хранилище: https://gitlab.com/fxcoder/mt-script.
См. также Индикатор Index.
Комментариев нет:
Отправить комментарий