Пишем класс для выгрузки статистики в файл и анализируем ее в 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; |
И так, займемся реализацией:
constructor TPASSStatStoreTextFile.Create(AfileName:String); begin inherited Create; FFileName:=AFileName; FIsFirst:=true; FStringList:=TStringList.Create; end; |
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; |
procedure TPASSStatStoreTextFile.Save; begin FStringList.SaveToFile(FFileName); end; |
destructor TPASSStatStoreTextFile.Destroy; begin FreeAndNil(FStringList); inherited Destroy; end; |
внесем изменение в объявление класса 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; |
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, как текстовый файл:
В окне выбора конвертации выберем файл с разделителями**:
Разделитель: точка с запятой**:
Вот такая таблица у нас получилась в итоге**:
Скриншоты, помеченные знаком * , являются цитатами и иллюстрациями в соответствии со ст. 1274 ГК РФ программного продукта "Delphi", авторское право на который принадлежит "Borland Software Corporation".
Скриншоты, помеченные знаком ** , являются цитатами и иллюстрациями в соответствии со ст. 1274 ГК РФ программного продукта "Microsoft Excel", авторское право на который принадлежит "Корпорации Microsoft"
Источник: http://easyprog.ru/index.php?option=com_content&task=view&id=176&Itemid=44