- PVSM.RU - https://www.pvsm.ru -

How-to: пошаговое руководство по разработке торговой системы для работы на фондовом рынке

image [1]

Примечание: Данный пост написан британским разработчиком и финансовым аналитиком Майклом Халлс-Муром, который является профессионалом в так называемом Quantitative trading. С нашей точки зрения информация, содержащаяся в этом топике, может быть интересна техническим специалистам и разработчикам, которые интересуются фондовым рынком и обладают навыками для создания, к примеру, успешных торговых роботов, но не знают с чего начать. Поэтому топик будет рассматриваться именно в таком контексте, кроме того, текст адаптирован к российским реалиям, соответственным образом переведены и некоторые термины. Будем рады вашим комментариям! (Поправки по переводу лучше отправлять в личных сообщениях).

Алгоритмическая торговля — является крайне сложной областью финансов, и чтобы освоить объем информации, который позволит создать свою собственную торговую систему или устроиться разработчиком в финансовую компанию или фонд, потребуется довольного много времени. Большой опыт в программировании просто необходим для успешной работы на этом рынке, как минимум алготорговец должен хорошо разбираться в таких языках, как C/C++ (в области финансов перспективен и язык Java) и Python, Matlab и R (на российском рынке набирает популярность разработанный в США TradeScript [2] — прим. перев.).

Любая высокочастотная торговая система состоит из четырех основных компонентов:

  • Идентификация стратегии — то есть определение стратегии торговли, эксплуатация заключенных в ней преимуществ и выбор частоты торговли.
  • Бэктестинг стратегии — получение исторических данных о торгах и «прогон» стратегии на них, анализ результатов и оптимизация слабых мест.
  • Движок — часть, которая соединяется с брокерской торговой системой (недавно ITinvest ввел в строй новую систему Matrix [3] — прим. перев.), автоматически осуществляет торговлю и подстраиваться под изменения на рынке для сокращения издержек.
  • Риск-менеджмент — распределение капитала для совершения торговых операций оптимальным образом, определение последовательности действий при неудачном стечении обстоятельств на рынке.

Начнем с первого пункта и поговорим о том, как выбрать стратегию торговли.

Торговая стратегия

В трейдинге любым действиям всегда предшествует этап сбора и изучения информации. Прежде чем выбрать стратегию для торговли, необходимо проанализировать исходные данные вроде объема имеющихся средств, а также учесть, насколько новая стратегия сочетается с уже использующимися. Индивидуальные трейдеры просто обязаны уделять большое внимание транзакционным издержкам и всеми силами пытаться их сокращать, соответственным образом и выбирается оптимальная стратегия торговли.

image

Вопреки расхожему мнению, что «ни один дурак не будет делиться стратегией, которая приносит деньги», на самом деле в публичных источниках можно найти информацию о стратегиях, которые действительно работают. Кроме того, аналитики и ученые иногда публикуют результаты своих исследований и финансовых экспериментов. Существует довольно много блогов на тему алгоритмеческой торговли на английском языке (в России, иногда, интересные темы проскакивают на ресурсе Smart-lab.ru), а в прессу иногда попадают данные о торговых стратегиях фондов.

Конечно, никто не станет обсуждать в публичном поле все аспекты и детали настройки прибыльной стратегии. Ключ к прибыльности как раз заключается в понимании того, какие параметры должны иметь стратегия, а также её «тонкая настройка». Тем не менее, практически стопроцентный путь к созданию собственной стратегии этого «воровство» чужих идей и их последующая доработка.

Большинство стратегий можно разделить на две большие группы — «играющие на неэффективностях» и «идущие за трендом». Стратегии первого типа эксплуатируют неэффективности рынка (например, спред в цене связанных финансовых инструментов) и тот факт, что в краткосрочной перспективе цена активов часто возвращается на изначальный уровень. Трендовые стратегии играют на психологии инвесторов и действиях фондов, пытаясь «запрыгнуть» в поезд нового тренда и успеть собрать на этом профит до того момента, пока движение не обратится в обратную сторону.

Еще один важнейший момент алгоритмической торговли — это её частота. Низкочастотная торговля (LFT) подразумевает обладание финансовыми инструмента на протяжении времени, превышающем один торговый день. Соответственно, при высокочастотной торговли (HFT) все операции происходят «интрадей», то есть в рамках одного торгового дня. Существуют также так называемые ультравысокочастотные стратегии (UHFT), которые подразумевают удержание актива на протяжении секунд или даже миллисекунд. Большое развитие на мировых и российских рынках сейчас получила высокочастотная торговля.

После того, как стратегия выбрана, необходимо протестировать её эффективность на исторических данных. Этот процесс называется бэктестингом.

Бэктестинг

Суть бэктестинга в том, чтобы подтвердить или опровергнуть прибыльность выбранной стратегии, запущенной на исторических данных. Знание результатов, которые стратегия показала бы в прошлом, позволяет предположить её эффективность в текущей рыночной ситуации. Само собой, тот факт, что на исторических данных стратегия принесла виртуальный миллион, ещё не гарантирует успеха в реальном мире.

При бэктестинге самым важным моментом является наличие данных о прошедших торговых сессиях, для запуска стратегии. Получить эти данные можно несколькими способами — часто их предоставляют брокеры и биржи, но существуют и сторонние поставщики данных.

Также важно определить метрики, по которым будет определяться, насколько успешно или неуспешно отработала стратегия «на истории». Стандартом в индустрии являются понятия «максимальной просадки» и коэффициент Шарпа [4]. Максимальная просадка — это максимальный убыток по портфелю за определенный период (обычно за год). У низкочастотных стратегий просадка может быть больше, чем у высокочастотных, вследствие некоторых статистических факторов. Бэктест покажет максимальную просадку портфеля, которая могла бы иметь место в прошлом, что даст примерное понятие о том, чего стоит ожидать в этом плане при работе на реальном текущем рынке. Коэффициент Шарпа же это показатель эффективности инвестиционного портфеля (актива), который вычисляется как отношение средней премии за риск к среднему отклонению портфеля.

После того, как стратегия оттестирована и устранены все выявленные узкие места, возможная просадка минимизирована а коэффициент Шарпа максимален, пора переходить к собственно разработке торгового движка.

Торговый модуль

Торговый движок является средством, благодаря которому список сделок, подлежащих исполнению в соответствии с торговой стратегией, передается в торговую систему брокера. Процесс генерирования приказов может быть наполовину или полностью автоматизирован, а механизм их исполнения может быть ручным, наполовину ручным («в один клик») или полностью автоматизированным. Для низкочастотных стратегий чаще всего используется ручной или наполовину ручной ввод приказов. Для HFT-стратегий, которым важна каждая миллисекунда, в основном используется полностью автоматический метод.

image

Главные момент, которые следует учесть при разработке торговой системы, это обеспечение надежного и быстрого подключения к брокерской торговой системе (обычно через API [5]) или обеспечение прямого доступа на биржу [6], минимизацию издержек (включая комиссию брокера и биржи, а также возможное проскальзывание).

Транзакционные издержки — одна из главных вещей, о которой стоит думать HFT-трейдеру. Они обычно складываются из трех компонентов: коммиссий брокера и биржи (и налогов), проскальзывания (разница между ценой, по которой планировалось совершить сделку, и той ценой, по которой она в реальности прошла), а также спред конкретного финансового инструмента (разница между ценой покупки и продажи — bid/ask). Спред не является постоянно зафиксированной величиной и зависит от текущей ликвидности рынка.

Высокие транзакционные издержки могут сделать из потенциально очень прибыльной стратегии с хорошим коэффициентом Шарпа полностью убыточную и наоборот. С помощью бэктеста правильно спрогнозировать транзакционные издержки может быть довольно трудно, для этого обычно необходимо получать у биржи исторические тиковые данные, включающие информацию по ценам bid/ask.

Необходимо также помнить и о разнице между эффективностью работы системы в реальном мире и тем, что она показывала на исторических данных. Разница может быть весьма существенной, и тому есть множество причин. Баги программного обеспечения и ошибки самой торговой стратегии могут не проявиться при бэктестинге, но сыграть важную роль при реальной работе на рынке.

Примеры создания торговых роботов на TradeScript [7].

Риск-менеджмент

Понятие «риска» включает в себя вcе вышеперечисленные опасности. Риск состоит из технологических опасностей (например, внезапный отказ серверов), риск брокера (банкротство компании), да и вообще всё, что может потенциально помешать задуманному функционированию торговой системы.

Частью риск-менеджмента является и процесс оптимизации капитала (его распределении между различными стратегиями). Это довольно сложный процесс, использующий большое количество «математики». Индустриальным стандартом, описывающим отношение оптимального распределния капитала и получения максимального эффекта от работы торговых стартегий, является критерий Келли [8].

Ещё один важный компонент риск-менеджмента — определение собственного психологического портрета трейдера. У каждого человека есть какие-то черты, которые могут препятствовать успешной торговле на рынке. В случае алгоритмической торговли психологический эффект играет меньшую роль, чем при «ручной» торговле на рынке, но все же присутствует — ведь за торговым роботом следит человек, который может захотеть слишком рано зафиксировать убыток или поторопиться с закрытием позиции, опасаясь увеличения потерь.

Подробнее о риск-менеджменте можно прочитать в этом топике [9].

Выводы

Алгоритмическая торговля — это очень сложное направление человеческой деятельности, но оно также является очень интересной областью финансов. Для того, чтобы иметь шансы добиться успехов в этом деле, просто необходимо на хорошем уровне овладеть программированием. Необходимо тренироваться, создавая торговые модули самостоятельно (торговые движки, анализаторы данных, средства для бэктестинга стратегий), используя доступные ресурсы — в конце концов, речь идет о собственных деньгах, которые никто не хочет потерять.

Статьи по теме:

Автор: itinvest

Источник [15]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/razrabotka/60880

Ссылки в тексте:

[1] Image: http://habrahabr.ru/company/itinvest/blog/224353/

[2] TradeScript: http://www.itinvest.ru/software/comp/smartx/plagin-konstruktor-robotov/

[3] систему Matrix: http://www.itinvest.ru/software/matrix/

[4] коэффициент Шарпа: http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D1%8D%D1%84%D1%84%D0%B8%D1%86%D0%B8%D0%B5%D0%BD%D1%82_%D0%A8%D0%B0%D1%80%D0%BF%D0%B0

[5] через API: http://www.itinvest.ru/software/smartcom/

[6] прямого доступа на биржу: http://habrahabr.ru/post/204620/

[7] TradeScript: http://habrahabr.ru/post/214601/

[8] критерий Келли: http://ru.wikipedia.org/wiki/%D0%9A%D1%80%D0%B8%D1%82%D0%B5%D1%80%D0%B8%D0%B9_%D0%9A%D0%B5%D0%BB%D0%BB%D0%B8

[9] этом топике: http://habrahabr.ru/post/215823/

[10] Интервью: как С# и C++ помогают заработать на фондовом рынке: http://habrahabr.ru/post/223551/

[11] Какие языки программирования наиболее востребованы в сфере финансов : http://habrahabr.ru/post/220605/

[12] Технологии фондового рынка: Брокерская торговая система: http://habrahabr.ru/post/218431/

[13] How-to: как выбрать язык программирования для создания торгового робота: http://habrahabr.ru/post/216937/

[14] Биржевой софт: Инструменты для создания торговых роботов: http://habrahabr.ru/post/212335/

[15] Источник: http://habrahabr.ru/post/224353/