Биржевой робот на Delphi. Урок 20. Биржевой симулятор. Реализуем эмулятор стоп-приказов и стратегии. |
Автор megabax | |||||||||
11.11.2010 г. | |||||||||
Урок 20. Биржевой симулятор. Реализуем эмулятор стоп-приказов и стратегии.Что бы смотреть урок полностью, а так же скачать исходники к уроку, подпишитесь на платный раздел. В платном разделе статья находиться здесь. Сегодня мы продолжим улучшать функционал нашего симулятора. Но, давайте по по порядку. Сначала немножко изменим класса TESBInstrument,... .... ... И так, все объяснения по порядку. У вас наверняка возникнет вопрос: для чего мы заводим аж три списка для хранения ордеров: FStopLoses, FTakeProfits и FOrders? Все дело в том, что в целях достоверного тестирования стратегии мы должны рассматривать самые неблагоприятные варианты, в противном случае мы не можем гарантировать, что стратегия, показавшая хорошие результаты в тесте, покажет такие же хорошие результаты при реальной торговле. А если при тестировании мы учтем закон Мерфи: "Если неприятность может случиться, то она непременно случиться" и тест все равно покажет прибыль, значит, наша стратегия действительно прибыльная. Теперь предположим, что мы тестируем стратегию на дневных интервалах, и у нас получается, что в один день должен сработать и стоп лосс и тэйк профит. В целях "жесткого" тестирования мы предполагаем, что сначала у нас исполниться стоп лосс. Если наша стратегия предусматривает отмену тэйк профита при срабатывании стоп лосса, то это и будет учет наихудшего варианта развития событий. Вот для того, что бы обеспечить первичное срабатывания стоп лосса по отношению к тейк профиту мы и создаем два списка ссылок на стоп-приказы: FStopLoses и FTakeProfits. А FOrders - это общий список ссылок для доступа через свойство Orders.... .... ... И так, изменим объявление класса:
Мы добавили абстрактный метод Step и конструктор. Вот последний то мы и реализуем:
Теперь реализуем класс торговой стратегии на пробой уровня поддержки и сопротивления с нижеприведенными правилами (TESBExternalTradeSystem):
Поясню сказанное русским языком: у нас есть уровень поддержки и сопротивления. У нас допустим, происходит пробой сопротивления. Мы покупаем на пробое (для этого то и устанавливаем отложенный стоп приказ). Когда нам закрываться? Тогда, когда будет пробой уровня сопротивления (обратный сигнал). При этом мы не просто продаем наш лонг, но и встаем в шорт. Естественно, уровни поддержки и сопротивления у нас постоянно меняются, следовательно, мы постоянно корректируем значение цены наших стоп приказов. При этом мы предполагаем, что сигналы у нас охраняться во внешнем файле, который по заданному формату сформирован в другой программе. См анонс предыдущего урока. ... ... ... Теперь начнем тестировать созданные классы. .... Нам надо добавить в тестовый пример, который вы создали на предыдущем уроке компонент TStringGrid (назовем его sqOrders), поля вводе (edCandle), которое у нас будет предназначена для ввода количества свечей, на котором мы будем тестировать стратегию и так же добавляем кнопочку btnGoto (тестирование заданного количества свечей)*: В объявление класса формы TfrmStockBot на надо добавить поле TradeSystem:TESBExternalTradeSystem*: Переделываем процедуру создания формы:
Так же переписываем процедуру уничтожения формы (что бы TradeSystem тоже уничтожалась):
Для того, что бы мы могли тестировать стратегию в пошаговом режиме, переделаем обработчик нажатия на кнопочку "След. свеча" (btnNext):
Для отображения списка выставленных ордеров переделаем процедуру CreateGrid:
и процедуру RedrawGrid дописываем с этой же целью:
Ну, и наконец, пишем обработчик нажатия на кнопочку тестирования по заданному количеству свечей (btnGo):
Все, запускаем программу и тестируем: Для того, что бы убедиться, что программа работает, убедимся, что стопы срабатывают: Скриншоты, помеченные знаком * , являются цитатами и иллюстрациями программного продукта "Turbo Delphi", авторское право на который принадлежит "Borland Software Corporation
|
|||||||||
Последнее обновление ( 04.07.2013 г. ) |
Пред. » |
---|