В области финансовых рынков существует огромное множество индикаторов и подавляющее большинство из них имеет настраиваемые параметры.
В OsEngine класс IndicatorParameter является базовым классом для всех параметров индикатора, который избавляет от необходимости создания отдельных окон для индикаторов. При использовании классов параметров появляется возможность настраивать любые индикаторы при помощи готового функционала платформы.
DoDefault – публичный метод. Сбрасывает целевое значение параметра на значение по умолчанию.
Bind – публичный метод. Принимает в качестве аргумента другой параметр такого же типа, связывает основные значения двух параметров. При изменении основного значения одного параметра, автоматически будет изменено значение другого.
Далее идут абстрактные члены, поэтому мы будем рассматривать их в контексте производных классов.
Name – уникальное имя для параметра.
GetStringToSave - общедоступный метод, не принимающий параметров. Возвращает строку, в которую записаны все поля объекта для дальнейшего сохранения в хранилище.
LoadParamFromString - общедоступный метод. Принимает строку, парсит ее и инициализирует состояние объекта.
Type – свойство указывает тип параметра. Перечисление IndicatorParameterType содержит следующие константы:
ValueChange – общедоступное событие. Сигнализирует об изменении целевого значения параметра.
В OsEngine существует четыре класса, расширяющих функционал абстрактного класса IndicatorParameter. Все они являются некой оболочкой над соответствующими примитивными типами. Для создания параметров используются соответствующие методы класса Aindicator, который является базовым для всех индикаторов. Все параметры индикатора отображаются в первой вкладке окна настроек:
Рис. 1. Меню настройки параметров индикатора.
IndicatorParameterInt используется, когда в качестве параметра индикатора необходимо использовать целочисленные значения. Например, в индикаторе SMA есть такой параметр, как количество свечей, необходимое для расчета значения индикатора. Посмотрим на примере, как использовать этот тип параметра:
Целевое значение параметра IndicatorParameterInt хранится в свойстве ValueInt. Во время использования параметра мы можем менять его основное значение, но всегда можно узнать какое значение у параметра было при создании, обратившись к свойству ValueIntDefolt.
Класс IndicatorParameterDecimal используется, когда индикатору нужны настройки типа decimal. Предлагаем рассмотреть способ использования этого параметра на примере доработки индикатора LastDayMiddle, который мы сделали в прошлых статьях. Нам нужно добавить еще две серии данных, которые будут отображать отклонение от середины прошлого для, одна вверх на заданный процент, другая вниз.
Создадим метод, который будет вычислять размер отклонения, используя значение середины прошлого дня и параметр _deviationPercent:
Для того, чтобы получить целевое значение параметра данного типа, нужно обратиться к свойству ValueDecimal. И теперь, используя метод CalcDeviation, вычисляем значения для линий отклонения:
В итоге индикатор будет выглядеть так:
Рис. 2. Отображение серий данных индикатора на графике.
Класс IndicatorParameterString позволяет передавать индикаторам любые строковые значения в качестве параметров. Для добавления в индикатор параметров данного типа, в Aindicator существует два метода, причем от выбранного метода зависит способ использования данного параметра в графическом интерфейсе.
Если создавать параметр при помощи метода CreateParameterString, в окне настроек индикатора он будет отображаться в виде поля для ввода любых символов:
Рис. 3. Визуальное представление параметра IndicatorParameterString.
Если же прибегнуть к использованию метода CreateParameterStringCollection, параметр отобразится в виде выпадающего списка:
Рис. 4. Другой способ отображения параметра IndicatorParameterString.
По сути это некая аналогия перечисления. Мы ограничиваем список доступных для выбора пользователем значений.
Продолжим модифицировать наш индикатор и добавим возможность выбора метода вычисления максимума и минимума. Сделаем 2 способа:
Для начала изменим конструктор класса:
Далее логику вычисления максимума и минимума вынесем в отдельный метод:
Для того, чтобы получить значение параметра, необходимо вызвать свойство ValuesString. Таким образом мы определяем способ подсчета максимума и минимума.
Выбор способа расчета по закрытиям позволяет исключить тени из вычислений:
Рис. 5. Визуальное представление индикатора на графике.
Класс IndicatorParameterBool позволяет использовать булевы значения в качестве параметров индикатора. Для создания параметров данного типа используется метод CreateParameterBool, который принимает отображаемое имя и значение по умолчанию. Как и все параметры, данный имеет специальное свойство ValueBool, в котором хранит свое значение.
Код измененного индикатора можно скачать по ссылке.
Комментарии