Тестируем класс статистического анализа индикатора (momentum, МТС, Gauge).
Вот мы наконец то и добрались до тестирования. И так, берем пример из прошлых уроков (Урок 4, Урок 5) и переделываем его. В частности, положим на форму компонент TGauge (Если забыли где он находиться, загляните в урок 8), так же добавим к форме компонент TListBox, он у нас расположен на закладке Standart*:Вот как у нас будет выглядеть после этого форма*:
Теперь переделаем обработчики события:
procedure TfrmMomentum.FormCreate(Sender: TObject); begin FPriceSource:=nil; FIndicator:=nil; FDataStore:=nil; FStatAnalizMomentum:=nil; end; procedure TfrmMomentum.btnCalkClick(Sender: TObject); 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:=TPASSStatStoreDataList.Create(lbResults.Items); FStatAnalizMomentum:=TPASSStatAnalizMomentum.Create(FIndicator,10,FDataStore); Gauge.MinValue:=0; Gauge.Progress:=0; Gauge.MaxValue:=FPriceSource.CountLoadedBars; FStatAnalizMomentum.Gauge:=Gauge; lbResults.Visible:=false; FStatAnalizMomentum.Test; lbResults.Visible:=true; end; procedure TfrmMomentum.FormDestroy(Sender: TObject); begin if FDataStore<>nil then FreeAndNil(FDataStore); if FIndicator<>nil then FreeAndNil(FIndicator); if FPriceSource<>nil then FreeAndNil(FPriceSource); if FStatAnalizMomentum<>nil then FreeAndNil(FStatAnalizMomentum); end; |
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:TPASSStatStoreDataList; FStatAnalizMomentum:TPASSStatAnalizMomentum; public { Public declarations } end; |
Теперь давайте проверим, правильно ли считает наша программа. Для сперва сделаем таблицу расчета на каждую свечу, для ее формирования воспользуемся программой урока 6. Затем конвертируем в Excel тестовый файл котировок, который мы использовали для тестирования и вставим туда рассчитанное значение индикатора. После чего вручную выполним расчет сигналов и результатов**:
Желтая строчка - это сигнал. В качестве сигнальной цены берем следующую цену открытия (ниже желтой строки). Синяя строка - это противоположный сигнал. Так же считаем относительно той цены открытия, которая ниже этой выделенной строчки. Красным цветом у нас выделена строка, отсчитанная от сигнальной на 10, заданное количество свечей:
FStatAnalizMomentum:=TPASSStatAnalizMomentum.Create(FIndicator,10,FDataStore); |
Именно до этой строки нужно найти максимум и минимум, я их обозначил зеленым и темно-красным цветом. Теперь, посмотрим расчетные формулы**:
И сравним результаты с тем, что выдала программа:
Как видим, результаты сходятся. Конечно, для верности надо бы проверить еще несколько сигналов, при чем разных, но это вы уже сделаете самостоятельно, я показал как. Сам я проверил пять сигналов, результаты сошлись.
На следующем уроке мы будем тестировать наши классы на утечку памяти. Для чего это надо? А представьте себе, что биржевой робот постоянно работает на сервере и жрет память не переставая? К чему это приведет? Правильно, рано или поздно глюканет так, что мало не покажется...
Скриншоты, помеченные знаком * , являются цитатами и иллюстрациями в соответствии со ст. 1274 ГК РФ программного продукта "Delphi", авторское право на который принадлежит "Borland Software Corporation".
Скриншоты, помеченные знаком ** , являются цитатами и иллюстрациями в соответствии со ст. 1274 ГК РФ программного продукта "Microsoft Excel", авторское право на который принадлежит "Корпорации Microsoft"
Источник: http://easyprog.ru/index.php?option=com_content&task=view&id=159&Itemid=44