Создание составного индикатора с нуля и до конца. Пример с описанием.

Создание составного индикатора с нуля и до конца. Пример с описанием.

Для закрепления пройденного материала разберем код составного индикатора Alligator, который находится в папке со скриптами. Аллигатор является комбинацией 3-х сглаженных скользящих средних разной длины и с разным сдвигом вперед. Соответственно для каждой из них есть по одному индикатору SSMA (сглаженная скользящая средняя), по два параметра и по одной серии данных. Рассмотрим для начала поля класса:

  1. В первой части сгруппированы параметры, предназначенные для определения длин внутренних скользяшек.
  2. Во втором блоке параметры сдвигов для серий данных аллигатора.
  3. В третьем расположены серии данных самого индикатора.
  4. В последнем блоке сгруппированы все три внутренних индикатора.

Далее взглянем на процесс конфигурации индикатора в методе OnStateChange:

  1. Создаются параметры, которые будут задавать настройки внутренних индикаторов.
  2. Создаются параметры для сдвига серий аллигатора.
  3. Создаются серии данных индикатора, так называемые челюсть, зубы и губы.
  4. Процесс создания внутренних индикаторов.

Каждый внутренний индикатор создается по следующему принципу:

  1. При помощи фабрики создается объект индикатора SSMA с нужными параметрами.
  2. Первый параметр созданного индикатора привязывается к соответствующему параметру родительского индикатора.
  3. Созданный индикатор устанавливается в качестве встроенного при помощи метода ProcessIndicator.

Далее в методе OnProcess наполняются все 3 серии данных.

Рассмотрим подробнее логику вычислений на примере одной серии данных _seriesTeeth.

  1. Проверяется, имеется ли в индикаторе достаточное количество данных с учетом сдвига.
  2. Если данных достаточно, устанавливаем последнее значение серии.
  3. Для этого обращаемся к соответствующему встроенному индикатору.
  4. Берем не последнее значение, а с учетом параметра сдвига.

Обратите внимание на следующий факт. Все объекты, создаваемые в индикаторе, помещаются в соответствующие списки в той же последовательности, в которой они создаются. Все параметры хранятся в свойстве:

public List<IndicatorParameter> Parameters

Числовые параметры, а именно объекты классов IndicatorParameterInt и IndicatorParameterDecimal конвертируются в объекты ParameterDigit и помещаются в список:

public List<ParameterDigit> ParametersDigit

Все серии данных помещаются в список:

public List<IndicatorDataSeries> DataSeries

Все встроенные индикаторы размещаются в списке:

public List<Aindicator> IncludeIndicators

Метод ProcessIndicator помимо индикатора принимает произвольное имя. Эти имена помещаются в список

public List<string> IncludeIndicatorsName

и хранятся там параллельно индикаторам, то есть если индикатор добавлен в свой список по индексу 0, то и имя будет храниться в соответствующем списке под индексом 0. 

16:32
244
FAQ

Комментарии

Нет комментариев. Ваш будет первым!