Lenta kotirovok

Some blogs or websites linked from this site may contain objectionable or uncensored content, www.mainru.com is not affiliated with these websites and makes no representations or warranties as to their content.

пятница, 12 ноября 2010 г.

Пишем робота Урок №12

Пишем класс для выгрузки статистики в файл и анализируем ее в Excel-е (TStringList, конвертация в Excel).

 

Вспомним прошлые уроки, когда мы писали и тестировали класс статистического анализ индикаторов (Урок 8, урок 9, урок 10 и урок 11) и возьмем исходники, которые мы создали на этих уроках.  В модуле momStatAnaliz создадим новый класс, он у нас будет предназначен для выгрузки данных статистического анализа в файл.
TPASSStatStoreTextFile=class(TPASSStatStoreDataTemplate)
protected
      FStringList:TStringList;
      FFileName:string;
      FIsFirst:boolean;
public
      constructor Create(AFileName:String);
      procedure AddData(AParameters:TPASSParameters); override;
      procedure Save;
     destructor Destroy;
end;
Как видим, это дочерний класс от TPASSStatStoreDataTemplate - очередная разновидность сохранялки результатов анализа. На прошлых уроках мы писали пробный класс сохранялки, только для того, что бы проверить корректность самих результатов анализа. а сегодня мы сохраним их в текстовый файл, который сможет открыть в программе Excel и уже там проводить дальнейший анализ.
И так, займемся реализацией:
constructor TPASSStatStoreTextFile.Create(AfileName:String);
begin
    inherited Create;
    FFileName:=AFileName;
    FIsFirst:=true;
    FStringList:=TStringList.Create;
end;
поле FIsFirst у нас нужно для того, что бы при перовом вызове метода AddData у нас в файл добавился заголовок. а вот, собственно, и этот метод:
procedure TPASSStatStoreTextFile.AddData(AParameters:TPASSParameters);
var cn,i:integer; s:string;
begin
    cn:=AParameters.Count-1;
    s:='';
    if FIsFirst then
    begin
        for i:=0 to cn do s:=s+AParameters[i].Name+'; ';
        FStringList.Add(s);
     end;
     FIsFirst:=false;
     s:='';
     for i:=0 to cn do s:=s+AParameters.AsStringByNum(i)+'; ';
     FStringList.Add(s);
end;
Как видим, он просто формирует строчку с разделителями и добавляет его в список строк, который мы потом сохраним в файл методом Save:
procedure TPASSStatStoreTextFile.Save;
begin
     FStringList.SaveToFile(FFileName);
end;
И теперь нам осталось только реализовать деструктор:
destructor TPASSStatStoreTextFile.Destroy;
begin
   FreeAndNil(FStringList);
   inherited Destroy;
end;
Теперь проверим, есть ли у нас на форме компонент TSaveDialog, если нет - добавим и назовем sdTextFile*:
класс для выгрузки статистики в файл и анализируем ее в Excel-е (TStringList, конвертация в Excel)
внесем изменение в объявление класса TfrmMomentum:
TfrmMomentum = class(TForm)
   odOpenDialog: TOpenDialog;
   mmMenu: TMainMenu;
   itFile: TMenuItem;
   itLoad: TMenuItem;
   lbResult: TLabel;
   btnCalk: TButton;
   seDT: TSpinEdit;
   lbDateTime: TLabel;
   seCandle: TSpinEdit;
   sdTextFile: TSaveDialog;
   lbResults: TListBox;
   Gauge: TGauge;
   procedure itLoadClick(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   procedure btnCalkClick(Sender: TObject);
   procedure seCandleChange(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
private
   { Private declarations }
   FPriceSource:TPASSPriceSource;
   FIndicator:TPASSMomentum;
   FDataStore:TPASSStatStoreTextFile;
  
FStatAnalizMomentum:TPASSStatAnalizMomentum;
public
   { Public declarations }
end;
Перепишем обработчик события OnClick кнопочки "Вычислить"
procedure TfrmMomentum.btnCalkClick(Sender: TObject);
begin
    if sdTextFile.Execute then
    begin
       if FIndicator<>nil then FreeAndNil(FIndicator);
       if FDataStore<>nil then FreeAndNil(FDataStore);
       if FStatAnalizMomentum<>nil then FreeAndNil(FStatAnalizMomentum);
       FIndicator:=TPASSMomentum.Create(seDT.Value,'Close');
       FIndicator.PriceSource:=FPriceSource;
       FDataStore:=TPASSStatStoreTextFile.Create(sdTextFile.FileName);
       FStatAnalizMomentum:=TPASSStatAnalizMomentum.Create(FIndicator,10,FDataStore);
       Gauge.MinValue:=0;
       Gauge.Progress:=0;
       Gauge.MaxValue:=FPriceSource.CountLoadedBars;
       FStatAnalizMomentum.Gauge:=Gauge;
       FStatAnalizMomentum.Test;
       FDataStore.Save;
   end;
end;
Теперь давайте тестировать. Запускам программу, открываем файл котировок:
класс для выгрузки статистики в файл и анализируем ее в Excel-е (TStringList, конвертация в Excel)
Выбираем интервал индикатора, жмем кнопочку "Вычислить", выбираем файл, в котором у нас будут сохранены результаты.
класс для выгрузки статистики в файл и анализируем ее в Excel-е (TStringList, конвертация в Excel)
Теперь откроем сформированный файл в программе Excel, как текстовый файл:
класс для выгрузки статистики в файл и анализируем ее в Excel-е (TStringList, конвертация в Excel)
В окне выбора конвертации выберем файл с разделителями**:
класс для выгрузки статистики в файл и анализируем ее в Excel-е (TStringList, конвертация в Excel)
Разделитель: точка с запятой**:
класс для выгрузки статистики в файл и анализируем ее в Excel-е (TStringList, конвертация в Excel)
Вот такая таблица у нас получилась в итоге**:
класс для выгрузки статистики в файл и анализируем ее в Excel-е (TStringList, конвертация в Excel)


Скриншоты, помеченные знаком * , являются цитатами и иллюстрациями  в соответствии со ст. 1274 ГК РФ программного продукта "Delphi", авторское право на который принадлежит "Borland Software Corporation".
Скриншоты, помеченные знаком ** , являются цитатами и иллюстрациями  в соответствии со ст. 1274 ГК РФ программного продукта "Microsoft Excel", авторское право на который принадлежит "Корпорации Microsoft" 

Источник: http://easyprog.ru/index.php?option=com_content&task=view&id=176&Itemid=44

Поделится

Котировки

Идея