Рассмотрим на примере, как можно использовать BotTabScreener для создания робота. В этой статье напишем свой скринер по мотивам робота, торгующего пробой ценового канала.
Для начала давайте составим не большое техническое задание.
Итак, нам нужен индикатор ценового канала. Таковой уже имеется в программе – PriceChannel. При пересечении ценой верхней границы открывается длинная позиция. Выход осуществляется по обратному сигналу, то есть при пересечении ценой нижней границы канала. С шортами дела обстоят немного иначе. Входить будем по пробитию нижней границы, а вот выходить по трейлинг стопу. Все входы и выходы совершаться будут при помощи условных заявок.
Для начала нам понадобится ряд параметров:
Чтобы не раздувать конструктор, инициализацию параметров предлагаю вынести в отдельный метод CreateParameters:
Рассмотрим конструктор класса:
Рассмотрим обработчик события добавления простой вкладки ScreenerNewTabCreateEvent.
В данном методе мы можем получить доступ к простой вкладке сразу после ее добавления в скринер. Это может быть полезно, например, для подписки на события, которые не доступны в скринере. В нашем случае мы обращаемся к свойству Connector и задаем обработчик для события SecuritySubscribeEvent, которое будет вызвано, когда завершится процесс подписки по инструменту.
Прежде чем перейти к обзору основной торговой логики, рассмотрим вспомогательные методы.
Метод CalcPriceSlippageUp принимает цену активации условной заявки, рассчитывает и возвращает цену ордера на покупку с учетом проскальзывания.
Метод CalcPriceSlippageDown принимает цену активации условной заявки, рассчитывает и возвращает цену ордера на продажу с учетом проскальзывания.
Метод CalcStopForShort принимает текущую цену, рассчитывает и возвращает цену активации стоп-лосс заявки для короткой позиции.
Далее разберем обработчик события завершения свечи. Метод ScreenerTabCandleFinishedEvent является основным местом выполнения торговой логики, принимает список свечей и простую вкладку, в которой произошло событие.
В методе EnterLogic создаются условные заявки на покупку и продажу по границам индикатора, пока выполняются описанные выше условия. Эти заявки живут на протяжении одной свечи, так как используются соответствующие перегрузки торговых методов BuyAtStop и SellAtStop.
После того, как будет исполнена одна из условных заявок, вторая отменится вкладкой, и будет вызвано событие PositionOpeningSuccesEvent. В методе обработчике ScreenerPositionOpeningSuccesEvent мы определяем, какая позиция была открыта. Если покупка, устанавливается обычный стоп по цене нижней границы индикатора. Если шорт, устанавливается трейлинг-стоп.
Далее, в обработчике события завершения свечи будет срабатывать метод ExitLogic, так как теперь у нас имеется открытая позиция.
Наконец рассмотрим последний созданный метод PanelParametrsChangeByUser, обработчик события ParametrsChangeByUser:
Данный метод сработает, когда пользователь изменит настройки в окне параметров. Как мы знаем у нас есть два параметра, предназначенных для настройки индикатора. Соответственно, после их изменения нужно изменить и индикатор. Для этого при помощи цикла пробегаемся по каждой простой вкладке, принадлежащей скринеру. Получаем доступ к индикатору и устанавливаем новые значения.
Файл с кодом робота можно взять по ссылке.
Комментарии