Программирование - это просто
Advertisement
Главная arrow Биржевые роботы arrow Создаем биржевого робота на Delphi(платный раздел) arrow Урок 18. Биржевой симулятор. Класс TESBAccount: синхронизация инструментов.
19.04.2024 г.
Главное меню
Главная
Интернет магазин
Программные продукты
Биржевые роботы
Искусственный интеллект
Математика и информатика
1С:Предприятие
Уроки C#
Уроки Delphi
Уроки программирования
Web-программирование
Дизайн и графика
Компьютер для блондинок
Исходники
Статьи
Платный раздел
Рассказы про компьютеры
Хитрости и секреты
Системный подход
Размышления
Наука для чайников
Друзья сайта
Excel-это не сложно
Все о финансах
.
Урок 18. Биржевой симулятор. Класс TESBAccount: синхронизация инструментов. Печать E-mail
Автор megabax   
08.05.2010 г.
New Page 1

Урок 18. Биржевой симулятор. Класс TESBAccount: синхронизация инструментов.

Что бы смотреть урок полностью, а так же скачать исходники к уроку, подпишитесь на платный раздел.

В платном разделе статья находиться здесь.


Возможно, у вас есть торговая стратегия, которая предусматривает работу с несколькими инструментами одновременно. Вы хотите протестировать ее на очень большом периоде времени, но имеющаяся у вас история по каждому инструменту начинается с разных дат, к тому же, ваша сисема допускает так же неликвидные инструменты, у которых могут быть пропущены в истории отельные свечи.  Ясно дело, в этом случае вам потребуется синхронизация этих инструментов. Для этого мы добавим в класса TESBInstrument новые свойства и методы, в частности свойство Active и метод PositionToDate(ADateTime:TDateTime), кроме того, для чтения значения поля FCurrentCandle добавим свойство CurrentCandle. Вот как теперь будет выглядеть объявления класса (новые поля выделены красным)...

...

...Свойство Active показывает, активен ли в данный момент инструмент, можно ли им торговать. А торговать им можно (в том понимании, в каком мы понимаем тестирование стратегии) тогда, когда в истории на текущую дату есть котировки. Но за этим у нас будет следить класс TESBAccount.

И так, прежде чем реализовать метод PositionToDate, давайте сначала внесем небольшие изменения в методы CurrentPrice, Buy и .Sell...

...

... Теперь приступим к тестированию. Для этого открываем предыдущий пример (если у вас его нет то пример биржевого робота из урока 17 можно скачать здесь) и добавляем к нему кнопочку "В начало", обозвав ее btnFirst. Так же у сетки сделаем чуть больше колонок  - 8. И еще добавим метку lbCurDate*:

Урок 18. Биржевой симулятор. Класса TESBAccount: синхронизация инструментов.

Перепишем обработчик кнопки btnNext (следующая свеча):

procedure TfrmStockBot.btnNextClick(Sender: TObject);
begin
    Account.Next;
    RedrawGrid;
end;

Для того, что бы добавить новые колонки, изменим процедуру CreateGrid:

procedure TfrmStockBot.CreateGrid;
begin
    sgInstrs.Cols[0].Text:='№';
    sgInstrs.Cols[1].Text:='Наименование';
    sgInstrs.Cols[2].Text:='Цена';
    sgInstrs.Cols[3].Text:='Количество';
    sgInstrs.Cols[4].Text:='Стоимость';
    sgInstrs.Cols[5].Text:='Дата и время';
    sgInstrs.Cols[6].Text:='Тек. свеча';
    sgInstrs.Cols[7].Text:='Активность';

    sgInstrs.ColWidths[1]:=140;
    sgInstrs.ColWidths[5]:=100;
end;

Теперь перепишем метод RedrawGrid:

procedure TfrmStockBot.RedrawGrid;
var i,cn,curCandle:integer;
begin
    cn:=Account.InstrumetnsCount;
    sgInstrs.RowCount:=cn+1;
    for i:=1 to cn do
    begin
      sgInstrs.Cells[0,i]:=IntToStr(i);
      sgInstrs.Cells[1,i]:=Account.Instruments[i-1].Name;
      sgInstrs.Cells[2,i]:=FloatToStr(Account.Instruments[i-1].CurrentPrice);
      sgInstrs.Cells[3,i]:=IntToStr(Account.Instruments[i-1].Count);
      sgInstrs.Cells[4,i]:=FloatToStr(Account.Instruments[i-1].Count*Account.Instruments[i-1].CurrentPrice);
      curCandle:=Account.Instruments[i-1].CurrentCandle;
      sgInstrs.Cells[5,i]:=DateTimeToStr(Account.Instruments[i-1].PriceSource.GetBarDataByIndex(curCandle).DateTime);
      sgInstrs.Cells[6,i]:=IntToStr(curCandle);
      if Account.Instruments[i-1].Active then
             sgInstrs.Cells[7,i]:='Да'
      else
             sgInstrs.Cells[7,i]:='Нет';
      end;
    lbCash.Caption:='Деньги '+FloatToStr(Account.Cash);
    lbcurDate.Caption:=DatetimeToStr(Account.CurrentDateTime);
end;

Ну, и наконец, обработчик нажатия кнопочки "В начало":

procedure TfrmStockBot.btnFirstClick(Sender: TObject);
begin
    Account.First;
    RedrawGrid;
end;

Теперь можно запустить симулятор на тестирование:

Урок 18. Биржевой симулятор. Класса TESBAccount: синхронизация инструментов.


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


 

 

 

Последнее обновление ( 17.07.2013 г. )
 
« След.
 
© 2024 Программирование - это просто
Joomla! - свободное программное обеспечение, распространяемое по лицензии GNU/GPL.
Русская локализация © 2005-2008 Joom.Ru - Русский Дом Joomla!
Design by Mamboteam.com | Powered by Mambobanner.de
Я принимаю Яндекс.Деньги