Для биржевого робота: индикаторы |
Автор megabax | |
27.07.2009 г. | |
Модуль, содержащий классы для расчета некоторых биржевых индикаторов. Исходник модуля Документая в формате doc (C) Шуравин Александр www.easyprog.ru
В данном модуле объявлены следующие классы: TPASSIndicator – абстрактный класс индикатора. TPASSAverageIndicator – абстрактный класс индикатора, использующего скользящие средние (напр. MA, ADX, Bollinger). TPASSMASimple – индикатор Moving average simple TPASSADX – индикатор ADX TPASSBB – индикатор Bollinger bunds.
Описание классов.
Класс TPASSIndicator
TPASSIndicator=Class(TPASSAbstractDataSource) private FParameters:TPASSParameters;. FPriceSource:TPASSPriceSource; procedure SetPriceSource(APriceSource:TPassPriceSource); procedure UpdateParameters; virtual; abstract; public constructor Create; property PriceSource:TPASSPriceSource read FPriceSource write SetPriceSource; procedure SetParameterByName(AParameterName:string; AParameterValue:Variant); virtual; function GetParameterByName(AParameterName:string):Variant; virtual; function GetResultByFieldName(AFieldName:string):double; virtual; abstract; function GetResultByFieldNameAndIndex(FieldName:string; Index:LongInt):double; virtual; abstract; function GetResultByFieldNum(AFieldName:integer):double; virtual; abstract; function GetResultByFieldNumAndIndex(FieldName:Integer; Index:LongInt):double; virtual; abstract; procedure First; virtual; abstract; procedure Last; virtual; abstract; function Next:boolean; virtual; abstract; function Prev:boolean; virtual; abstract; function GetIndicatorName:string; virtual; abstract; Destructor Destroy; virtual; end;
Свойство PriceSource – является ссылкой на объект источник котировок, по которым происходит расчет индикатора. Процедура SetParameterByName – устанавливает параметр индикатора по его имени. Функция GetParameterByName – возвращает значение параметра по его имени. Функция GetResultByFieldName – возвращает значение индикатора по имени поля и текущему указателю в источнике котировок. Функция GetResultByFieldNameAndIndex – возвращает значение индикатора по имени поля и конкретному указателю (номеру свечи). Функция GetResultByFieldNum – возвращает значение индикатора по номеру поля и текущему указателю в источнике котировок. Функция GetResultByFieldNumAndIndex – возвращает значение индикатора по номеру поля и конкретному указателю (номеру свечи). Методы First, Last, Next, Prev – служат для навигации по данным источника котировок (изменяют значение текущего указателя). Функция GetIndicatorName – возвращает название индикатора. Процедура UpdateParameters – объявлена в секции private. Данный метод служит для обновления внутренних переменных при изменении значений параметров.
Класс TPASSAverageIndicator
TPASSAverageIndicator=Class(TPASSIndicator) private FBuffer:PBufferDoubleArray; FBufferSize:LongInt; FAveragePeriod:integer; FBuffersCount:integer; procedure FullBuffer(Index:integer); virtual; abstract; procedure CreateBuffer; virtual; function GetResult(ABufferNum:integer):double; virtual; public function GetResultByFieldName(AFieldName:string):double; override; function GetResultByFieldNameAndIndex(AFieldName:string; Index:LongInt):double; override; function GetResultByFieldNum(AFieldNum:integer):double; override; function GetResultByFieldNumAndIndex(AFieldNum:integer; Index:LongInt):double; override; procedure First; override; procedure Last; override; function Next:boolean; override; function Prev:boolean; override; end;
Данный класс отличается от предка тем, что в секции private добавлены методы FullBuffer и CreateBuffer. Первый реализуется в классах потомках. Он предназначен для заполнения буфера окна усреднения соответствующими данными. Второй просто выделяет в памяти место под буфер и в большинстве случаев переписывание метода не требуется. Метод GetResult так же не нуждается в переопределении, но он используется в функциях, вычисляющих значение индикатора.
TPASSMASimple
TPASSMASimple=Class(TPASSAverageIndicator) private FMAType:string; procedure UpdateParameters; virtual; procedure FullBuffer(Index:integer); override; public constructor Create(AAveragePeriod:integer; AMAType:string); Destructor Destroy; virtual; end;
Для расчета значений индикатора используйте функции GetResultByFieldName, GetResultByFieldNameAndIndex, GetResultByFieldNum, GetResultByFieldNumAndIndex, поле “Value”. Пример:
MA:= GetResultByFieldName(‘Value’);
Класс TPASSADX
TPASSADX=Class(TPASSAverageIndicator) private FBufferSize:LongInt; FADXBuffer:PADXStruct; procedure UpdateParameters; virtual; procedure FullBuffer(Index:integer); override; function GetMDM:double; function GetPDM:double; function GetTR:double; function GetMDI:double; function GetPDI:double; public constructor Create(AAveragePeriod:integer); function GetResultByFieldName(AFieldName:string):double; override; function GetResultByFieldNameAndIndex(AFieldName:string; Index:LongInt):double; override; function GetResultByFieldNum(AFieldNum:integer):double; override; function GetResultByFieldNumAndIndex(AFieldNum:integer; Index:LongInt):double; override; function GetIndicatorName:string; override;
Для расчета значений индикатора используйте функции GetResultByFieldName, GetResultByFieldNameAndIndex, GetResultByFieldNum, GetResultByFieldNumAndIndex, поля “DI+” и “DI-“.
Класс TPASSBB
TPASSBB=Class(TPASSMASimple) private FS:double; FMA:Double; function GetCD:Double; procedure SetS(AFloat:double); procedure UpdateParameters; override; public property S:double read FS write SetS; constructor Create(AAveragePeriod:integer; AMAType:string; AFloat:double); function GetBBU(DoFullBuffer:boolean):double; function GetBBL(DoFullBuffer:boolean):double; function GetBBUAsIndex(DoFullBuffer:boolean; Index:LongInt):double; function GetBBLAsIndex(DoFullBuffer:boolean; Index:LongInt):double; function GetResultByFieldName(AFieldName:string):double; override; function GetResultByFieldNameAndIndex(AFieldName:string; Index:LongInt):double; override; function GetResultByFieldNum(AFieldNum:integer):double; override; function GetResultByFieldNumAndIndex(AFieldNum:integer; Index:LongInt):double; override; end;
Для расчета значений индикатора используйте функции GetResultByFieldName, GetResultByFieldNameAndIndex, GetResultByFieldNum, GetResultByFieldNumAndIndex, поля “BBU”, “BBL” и “MA“.
|
|
Последнее обновление ( 27.07.2009 г. ) |
« След. | Пред. » |
---|