Реализуем класс для расчета индикатора momentum (используем библиотеки и AfterConstruction |
Автор megabax | ||||||||
30.07.2009 г. | ||||||||
Реализуем класс для расчета индикатора momentum (используем библиотеки и AfterConstruction, наследуемый от TObject)Сегодня мы займемся реализацией биржевого робота. Точнее будем выполнять задачу, поставленную на уроке "Постановка задачи". Для начала нужно скачать с сайта www.easyprog.ru нужные библиотеки (PASSBaseObj и PASSIndicators). Теперь создадим в Delphi новый проект, скопируем туда закаченные библиотеки и добавим их в проект*:
В раздел uses добавим подключенные к проекту модули PASSIndicators, PASSBaseObj:
Для для реализации расчета по заданной в уроке "Математическая модель" формуле нам понадобиться создать новый класс индикатора - TPASSMomentum. Объявим его:
Данный класс мы объявили как дочерний от класса TPASSIndicator - это базовый класс индикатора. В модуле PASSIndicators есть еще класса TPASSAverageIndicator, объявленный как дочерний от PASSIndicators, он служит родительским классом для TPASSMASimple и TPASSADX, которые реализует индикаторы Moving Average. ADX соответственно. Но индикатор momentum, не является индикатором скользящего среднего и для своего расчета не требует буфера расчета среднего значений котировок, поэтому мы используем в качестве родительского класса TPASSIndicator. Класс TPASSIndicator имеет абстрактный метод UpdateParameters, поэтому мы обязаны переопределить его в нашем классе. Это мы делаем в секции private, так как данная процедура вызывается только из методов класса индикатора и предназначена для переписывания значений параметров из списка параметров в приватные поля класса. Почему именно так? Дело в том, что при создании библиотек PASSBaseObj и PASSIndicators предполагалось, что они будут использованы для серьезного приложения, похожего на Metatrader или Metastock. А приватные поля используются только главным образом для быстродействия, так как если обращаться через имя параметра, то нужно будет искать его в списке, что замедлит работу программы. Это замедление почувствуется, когда нужно будет делать много расчетов во вложенных циклах. В процедуре AfterConstruction, которая наследуется от TObject, являющийся предком всех классов в библиотеках, будет просто вызвана процедура UpdateParameters, поскольку в TPASSIndicator это не сделано. Конечно, правильнее было бы переопределить AfterConstruction непосредственно в TPASSIndicator, но рефреймингом кода мы займемся потом, а сейчас наша задача поскорее создать индикатор и исследовать его. Так мы же определяем конструктор класса, что бы создать объект класса на основании параметров. И переопределяем все абстрактные методы класса TPASSIndicator . Кроме того, мы поля FParameters и FPriceSource из секции private переносим в секцию protected, просто объявив их как protected в дочернем классе. Это нужно для того, что бы эти поля стали доступные в дочернем классе но были по прежнему недоступные извне. А теперь займемся реализацией. Начнем с UpdateParameters
Здесь мы просто тупым перебором перебираем параметры и устанавливаем соответствующие приватные поля. В списке есть параметр, которое не соответствует ни одному приватному полю, то это нонсенс. Такого быть не должно. Сразу вызываем исключение. Далее реализуем метод AfterConstruction и сам конструктор:
Методы GetResultByFieldName и GetResultByFieldNameAndIndex предназначены для получение значения индикатора по имени функции (у индикаторов может быть несколько функций, например у ADX есть функции DI+, DI- и само ADX). У нашего же индикатора только одна функция - Value. Реализуем получение значения по имени этой функции:
А теперь, наконец то добрались и до формулы:
Перед тем как произвести расчет по формуле мы проверяемы все возможные ошибочные значения переменных и выдаем как можно более информативные исключения, что бы потом можно было легко отлаживать программу. Теперь реализуем оставшиеся методы:
Подведем итоги. На этом уроке мы разработали класс для расчета индикатора momentum. На следующем уроке будем его тестировать.
Скриншоты, помеченные знаком * , являются цитатами и иллюстрациями в соответствии со ст. 1274 ГК РФ программного продукта "Delphi", авторское право на который принадлежит "Borland Software Corporation".
|
||||||||
Последнее обновление ( 20.07.2013 г. ) |
« След. | Пред. » |
---|