В данном модуле объявлены следующие классы:

TPASSAbstractDataSource – Шаблон источника данных.

TPASSDataSource – Источник загруженных данных.

TPASSBufferedDataSource – Буферизированный источник данных.

TPASSStreamBufferedDataSource – источник данных, читающий хранящий данные в потоке.

TPASSStreamTimedBufferedDataSource – источник данных, кроме того, что хранящий данные в потоке, еще заточен для хранения данных, лежащих на шкале времени.

TPASSPriceSource – Источник котировок.

Описание классов.

Класс TPASSAbstractDataSource.

TPASSAbstractDataSource=Class(TObject)
private
FFields:TStringList;
public
property Fields:TStringList read FFields;
function GetFieldNum(AFieldName:string):integer;
end;

Функция GetFieldNum предназначена для того, что бы по названию поля найти ее местоположение в списке.

Свойство Fields представляет из себя список полей объекта источника данных. Оно только для чтения, так как список полей жестко задан и заполняется в момент создания объекта.

Класс TPASSDataSource

TPASSDataSource=Class(TPASSAbstractDataSource)
private
FActive:boolean;
FCurrentItemIndex:LongInt;
FCountLoadedBars:LongInt;
procedure SetActive(AActive:boolean); virtual; abstract;
procedure SetCurrentItemIndex(ACurrenItemIndex:LongInt); virtual; abstract;
public
Property Active:Boolean Read FActive Write SetActive;
Property CurrentItemIndex:LongInt Read FCurrentItemIndex Write SetCurrentItemIndex;
Property CountLoadedBars:LongInt Read FCountLoadedBars;
Function NextItem:boolean; virtual; abstract;
Function PrevItem:boolean; virtual; abstract;
Procedure First; virtual; abstract;
Procedure Last; virtual; abstract;
Function GetDataByFieldName(AFieldName:String):Double; virtual; abstract;
Function GetDataByFieldNum(AFieldNum:integer) :Double; virtual; abstract;
Function GetDataByFieldNameAndIndex(AFieldName:String;Index:LongInt):Double; virtual; abstract;
Function GetDataByFieldNumAndIndex(AFieldNum:integer;Index:LongInt):Double; virtual; abstract;
end;

Active – это свойство показывает, активен ли в данным момент источник данных. Если активен – из него можно получить данные.

CurrentItemIndex - указатель на текущий элемент данных.

CountLoadedBars - количество элементов данных. Только для чтения.

Методы NextItem, PrevItem, First, Last предназначены для навигации по данным.

Методы GetDataByFieldName, GetDataByFieldNum, GetDataByFieldNameAndIndex, GetDataByFieldNumAndIndex - предназначены для обращения к полям источника данных. GetDataByFieldName, GetDataByFieldNum - по текущему указателю, GetDataByFieldNameAndIndex, GetDataByFieldNumAndIndex - по заданному номеру элемента данных.

Класс TPASSBufferedDataSource

TPASSBufferedDataSource=Class(TPASSDataSource)

private

FBuffer:PBufferArray;

FPointerSize:LongInt;

procedure SetCurrentItemIndex(ACurrentItemIndex:LongInt); override;

public

Property PointerSize:LongInt Read FPointerSize Write FPointerSize;

Function NextItem:boolean; override;

Function PrevItem:boolean; override;

Function Add:Boolean; virtual;

Procedure First; override;

Procedure Last; override;

Procedure FillGrid(AGrid: TStringGrid; AFields:TStringList);

end;

Свойство PointerSize – размер пункта.

Функция Add – добавляет пустой элемент в конец списка данных и перемещает указатель CurrentItemIndex на него.

Процедура FillGrid заполняет сетку TStringGrid данными источника данных (например, котировками, ранее загруженными в буфер).

Класс TPASSStreamBufferedDataSource

TPASSStreamBufferedDataSource=class(TPASSBufferedDataSource)

private

procedure SaveHeader(AStream:TStream); virtual;

procedure LoadHeader(AStream:TStream); virtual;

end;

Класс TPASSStreamTimedBufferedDataSource

TPASSStreamTimedBufferedDataSource=class(TPASSStreamBufferedDataSource)

public

function SearchIndexAsDate(ADateTime:TDateTime):integer;

end;

Функция SearchIndexAsDate – осуществляет поиск свечи с заданной датой. Если находит данную свечу, тогда CurrentItemIndex встает на не и функция возвращает 1. Если данную свечу не находит, но есть свеча со временем больше данной, а перед ней меньше данной, то функция возвращает -1 и встает на свечу с большим временем. Если все свечи с датой, меньше заданной – возвращает 0. Указатель при этом встает на последнюю свечу.

Класс TPASSPriceSource

Класс источник котировок.

TPASSPriceSource=Class(TPASSBufferedDataSource)

private

FFilePath:string;

FTiker:string;

FPeriod:string;

FStream:TStream;

FHaveHeader, FHaveTicker, FHavePer:boolean;

FName:string;

procedure SetActive(AActive:boolean); virtual;

procedure SetFilePath(AFilePath:string);

function GetSignature:Str3;

function GetVersion:real;

procedure ShiftBufferRight(index,count:LongInt);

public

property Name:string read FName write FName;

property Active:Boolean Read FActive Write SetActive;

constructor Create(AFilePath:string;AActive:boolean);

property FilePath:string Read FFilePath Write SetFilePath;

property Tiker:string read FTiker write FTiker;

property Period:string read FPeriod;

property Stream:TStream read FStream;

destructor Destroy; override;

procedure SetBarData(ABarData:TBarStructure); virtual;

function GetBarData:TBarStructure; virtual;

function GetBarDataByIndex(Index:LongInt):TBarStructure; virtual;

function GetDataByFieldName(AFieldName:String):Double; virtual;

function GetDataByFieldNum(AFieldNum:integer) :Double; virtual;

function GetDataByFieldNameAndIndex(AFieldName:String;Index:LongInt):Double; virtual;

function GetDataByFieldNumAndIndex(AFieldNum:integer;Index:LongInt):Double; virtual;

function SearchIndexAsDate(ADateTime:TDateTime):integer;

procedure LoadDataFromTextFile(AFilePath:string);

procedure LoadBarFromTextFile(var AStruct:TBarStructure; var VF:TextFile);

procedure LoadDataFromStream(AStream:TStream);

procedure LoadBarFromStream(var AStruct:TBarStructure; AStream:TStream);

procedure SaveDataToStream(AStream:TStream);

procedure SaveBarToStream(AStruct:TBarStructure; AStream:TStream);

procedure SaveBarToTextFile(var VF:TextFile; AStruct:tBarStructure);

procedure SaveDataToTextFile(AFilePath:string);

procedure SaveAllData;

function InsertBarData(ABarData:TBarStructure):boolean; virtual;

function InsertEmptyBarBefore(index:LongInt):boolean; virtual;

procedure Delete(index:LongInt);

end;

Свойство Name – название инструмента, например «Акции РАО ЕЭС обыкновенные».

Конструктор Create создает объект из полного имени файла (включая путь) и флага активности.

Свойство FilePath – полное им файла (включая путь).

Свойство Tiker – биржевой код финансового инструмента. Для акции РАО ЕЭС обыкновенных это EESR. Тикеры можно узнать у брокера или в биржевом терминале. Если объект загружен из текстового файла, и в нем есть поле Tiker, то свойство Tiker устанавливается автоматически.

Свойство Period – период котировок. Загружается автоматически из текстового файла при загрузке, если в нем есть это поле. Данное свойство только для чтения. Таблица соответствия периодов:

Представление | В стандартном формате текстового файла
Месяц | M
Неделя | W
День | D
Час | 60
30 мин. | 30
15 мин. | 15
10 мин. | 10
5 мин. | 5
1 мин. | 1
Тик | 0

Данное свойство возвращает период в стандартном формате. Для преобразования в модуле объявлены функции PerPrToStr и StrToPerPr.

Свойство Stream – ссылка на внутренний поток ввода вывода. Данный поток создан как TFileStream. Свойство только для чтения.

Процедура SetBarData – устанавливает поля текущей свечи.

Функция GetBarData – читает поля текущей свечи.

Функция GetBarDataByIndex - читает поля свечи по индексу.

Методы NextItem, PrevItem, First, Last предназначены для навигации по данным.

Методы GetDataByFieldName, GetDataByFieldNum, GetDataByFieldNameAndIndex, GetDataByFieldNumAndIndex - предназначены для обращения к полям источника данных. GetDataByFieldName, GetDataByFieldNum - по текущему указателю, GetDataByFieldNameAndIndex, GetDataByFieldNumAndIndex - по заданному номеру элемента данных.

Процедура LoadDataFromTextFile считывает данные из текстового файла стандартного формата. Старые данные при этом затираются.

Процедура LoadBarFromTextFile – считывает одну свечу из текстового файла и помещает ее в параметр AStruct.

Процедура LoadDataFromStream – читает данные из потока. Старые данные затираться.

Процедура LoadBarFromStream – считывает одну свечу из потока и помещает ее в параметр AStruct.

Процедура SaveDataToStream – записывает данные в поток.

Процедура SaveBarToStream – записывает переданную в параметрах свечу в поток.

Процедура SaveBarToTextFile – записывает переданную в параметрах свечу в текстовый файл.

Процедура SaveDataToTextFile – записывает данные в текстовый файл.

Процедура SaveAllData – записывает данные в файл данные, указанный в свойстве FilePath.

Функция InsertBarData – вставляет в данные свечу. Если свеча с этой датой существует, замещает ее. Иначе вставляет в нужное место.

Функция InsertEmptyBarBefore – вставляет свечу перед той, на которую указывает индекс в параметре.

Процедура Delete – удаляет указанную свечу.