Инфраструктура Трейдинга

22.09.2021 (c) Vytas Ramanchauskas, www.SpyTlt.com

Вкратце расскажу, как она устроена у меня. Я имею склонность к "изобретению велосипедов", если мне нужно что-то не слишком сложное, предпочитаю сделать сам, а не пользоваться готовыми решениями. В этом есть как свои плюсы, так и минусы, ну есть как есть. В результате все, от загрузки котировок и бэктестинга, до торговых роботов – самописное. В основном это C#, один маленький кусочек для эксперимента на F#, и один, исторически древний, фрагмент на C++. В бэктестере присутствует питон, в основном для нейросеток, для обычных алгоритмов я предпочитаю C#.

  • BackTester – довольно монстрообразное чудище, которое позволяет быстро реализовывать в коде различные торговые идеи и проверять их на истории со всевозможной статистикой и информацией. Есть возможность hot reload, изменения в коде тут же отображаются в результатах – очень удобно в процессе творческого поиска граалей. Отдельно код для работы с нейронными сетками и самописная система для эволюционных алгоритмов, на которую я возлагаю большие надежды – возможно, она то и станет окончательным решением трейдерского вопроса ;)
  • Робот, выкачивающий котировки акций и опционов, грядущие отчеты, подготавливающий начало дня, проверяющий что все скачано, запущено и готово.
  • Торговый робот – о нем ниже.
  • WatchDog – отдельный робот, который каждый рабочий день запускает торгового робота и следит за ним, в случае его зависания или падения, поднимает тревогу. Так же следит за общим состоянием компьютера, от температуры (с тех времен, когда все крутилось на домашнем компе), до нагрузки на процессор, память и достаточного места на системном диске (TWS, кстати, феерически себя ведет, если оно кончается в ноль).
  • Автоматический бэкап всего в облако.

Торговый Робот

  • Информационные сервисы:
    • Текущее время EST (а при запуске синхронизация времени с серверами IB).
    • Streaming quotes для главных тикеров, текущая цена, изменение в %% от открытия и от предыдущего закрытия, диапазон дня.
    • Баланс, изменении за день, диапазон дня – для своего счета и для SPY, QQQ
    • Просадка моя, SPY и QQQ, в абсолютном выражении, в %% и ее длительность.
    • Доход YTD и MTD в $ и %%, сравнение со SPY и QQQ, прогноз годового дохода.
    • Текущий leverage и cushion.
    • Несколько моих индикаторов; из стандартных – только %% насколько SPY и QQQ выше/ниже SMA(220), почему 220, а не классические 200 – в книге
    • Предупреждение об отчетах на след. день и в течении недели для акций из моего портфеля и для самых значимых акций.
    • Постоянно обновляемый Web отчет (большой; общая инфа, позиции, опционные позиции, результаты работы систем, дивиденды, аллокация активов с круговой диаграммой, asset curve, результаты по месяцам в сравнении со SPY и QQQ, метрики, информация по просадкам, полный лог торгового робота)
    • Предупреждение о грядущих праздниках, коротких днях, летнем времени и обо всем, что выведено в бот StockAchtung
    • Забавная тема про информирование – я сделал довольно много для оперативного информирования о текущей ситуации: плавающее окошко на экране с балансом и его последними изменениями, возможность проговаривать общую ситуацию голосом раз в заданное кол-во минут, информация о существенных изменениях, возможность, чтоб все это сыпалось в телеграм или по смс (я много путешествую и часто в дороге смс – единственный канал). Но в итоге пришел к выводу, что ничего или почти ничего этого не надо: лишняя информация нервирует. Например, если в течении дня случилась просадка, а к концу дня она выправилась, если я постоянно слежу за ситуацией – придется понервничать, а если только в конце дня за комп – то и не узнаешь ничего, одним словом, счастье в неведении ;).

  • Возможность установить триггеры: при увеличении/уменьшении цены на указанный актив до указанного порога робот меня позовет
  • Возможность быстрой отсылки ордеров вручную. Примерно так:
    • b SPY 300 – купить 300 SPY по рынку.
    • b NVDA $50K – купить NVDA по рынку на $50,000, кол-во акций робот посчитает сам.
    • b AMD – купить AMD на сумму по умолчанию, она тут же на экране присутствует и ее можно менять.
    • s XYZ 10000 7.77 – лимитный ордер на продажу.
    • c QQQ – полностью закрыть позицию QQQ (покупать или продавать робот поймет сам).
    • b QCOM 1000 @MOC – купить 1000 акций QCOM по цене закрытия, можно задать и лимитный LOC ордер.
    • b SPY 500 10:25:00 – купить SPY в указанное время (EST).
    можно ввести несколько ордеров и есть две кнопки: исполнить все ордера, и подготовить, но не отправлять – в TWS они будут висеть как неотправленные, надо вручную Transmit нажать. При отправке ордеров робот проверит размер сделок и сильно разорется, если он выходит за заданные границы, причем, за пределами одной границы можно нажать кнопку, что, мол, все-равно давай (причем, кнопка становится доступной через пару секунд, чтоб на автомате не клацнуть ее), а вторая граница – жесткая, ордер просто блокируется. Дополнительно проверяется, нет ли у покупаемых акций в ближайшие дни отчетов и выдается предупреждение, если есть.
  • Возможность делать заметки (внезапно полезная), просто вписываю мысли или что-то важное, например, почему решил закрыть позицию или еще что-то – к заметке прилепляется время.
  • Отдельная и большая тема – безопасность, как сделать так, чтобы робот меня не разорил – это тема для отдельной статьи.
  • Возможность базового удаленного управления роботом через web.
  • Возможность отправить самому себе напоминалку о чем-либо на заданную дату или на время внутри дня.
  • Возможность выставить автоматическое закрытие указанных позиций в заданную дату или через N торговых дней.
  • В торговый робот подключаются стратегии, можно выбрать, какими следует торговать сегодня.
  • Управление капиталом для стратегий – очень большая тема и много ноухау.
  • Ведение журнала результатов, расширенная статистика и графики.
  • Есть возможность полностью автоматической торговли, есть полуавтоматический вариант: робот выставляет ордера, сигналит, но нажать кнопку должен человек. Честно говоря, включать автоматический режим я до сих пор боюсь – я слишком хорошо знаю, как программисты пишут программы ;).
  • Наверняка есть еще мелочи, о которых просто забыл. В целом, все делалось исключительно под себя, некоторые фичи оказывались очень полезными и развивались, некоторые, наоборот, через некоторое время убирались за ненадобностью или сильно переделывались.


Вопросы и обсуждение - в телеграм-группе SpyTlt.