Примечание: Данный пост написан британским разработчиком и финансовым аналитиком Майклом Халлс-Муром, который является профессионалом в так называемом Quantitative trading. С нашей точки зрения информация, содержащаяся в этом топике, может быть интересна техническим специалистам и разработчикам, которые интересуются фондовым рынком и обладают навыками для создания, к примеру, успешных торговых роботов, но не знают с чего начать. Поэтому топик будет рассматриваться именно в таком контексте, кроме того, текст адаптирован к российским реалиям, соответственным образом переведены и некоторые термины. Будем рады вашим комментариям! (Поправки по переводу лучше отправлять в личных сообщениях).
Алгоритмическая торговля — является крайне сложной областью финансов, и чтобы освоить объем информации, который позволит создать свою собственную торговую систему или устроиться разработчиком в финансовую компанию или фонд, потребуется довольного много времени. Большой опыт в программировании просто необходим для успешной работы на этом рынке, как минимум алготорговец должен хорошо разбираться в таких языках, как C/C++ (в области финансов перспективен и язык Java) и Python, Matlab и R (на российском рынке набирает популярность разработанный в США TradeScript — прим. перев.).
Любая высокочастотная торговая система состоит из четырех основных компонентов:
- Идентификация стратегии — то есть определение стратегии торговли, эксплуатация заключенных в ней преимуществ и выбор частоты торговли.
- Бэктестинг стратегии — получение исторических данных о торгах и «прогон» стратегии на них, анализ результатов и оптимизация слабых мест.
- Движок — часть, которая соединяется с брокерской торговой системой (недавно ITinvest ввел в строй новую систему Matrix — прим. перев.), автоматически осуществляет торговлю и подстраиваться под изменения на рынке для сокращения издержек.
- Риск-менеджмент — распределение капитала для совершения торговых операций оптимальным образом, определение последовательности действий при неудачном стечении обстоятельств на рынке.
Начнем с первого пункта и поговорим о том, как выбрать стратегию торговли.
Торговая стратегия
В трейдинге любым действиям всегда предшествует этап сбора и изучения информации. Прежде чем выбрать стратегию для торговли, необходимо проанализировать исходные данные вроде объема имеющихся средств, а также учесть, насколько новая стратегия сочетается с уже использующимися. Индивидуальные трейдеры просто обязаны уделять большое внимание транзакционным издержкам и всеми силами пытаться их сокращать, соответственным образом и выбирается оптимальная стратегия торговли.
Вопреки расхожему мнению, что «ни один дурак не будет делиться стратегией, которая приносит деньги», на самом деле в публичных источниках можно найти информацию о стратегиях, которые действительно работают. Кроме того, аналитики и ученые иногда публикуют результаты своих исследований и финансовых экспериментов. Существует довольно много блогов на тему алгоритмеческой торговли на английском языке (в России, иногда, интересные темы проскакивают на ресурсе Smart-lab.ru), а в прессу иногда попадают данные о торговых стратегиях фондов.
Конечно, никто не станет обсуждать в публичном поле все аспекты и детали настройки прибыльной стратегии. Ключ к прибыльности как раз заключается в понимании того, какие параметры должны иметь стратегия, а также её «тонкая настройка». Тем не менее, практически стопроцентный путь к созданию собственной стратегии этого «воровство» чужих идей и их последующая доработка.
Большинство стратегий можно разделить на две большие группы — «играющие на неэффективностях» и «идущие за трендом». Стратегии первого типа эксплуатируют неэффективности рынка (например, спред в цене связанных финансовых инструментов) и тот факт, что в краткосрочной перспективе цена активов часто возвращается на изначальный уровень. Трендовые стратегии играют на психологии инвесторов и действиях фондов, пытаясь «запрыгнуть» в поезд нового тренда и успеть собрать на этом профит до того момента, пока движение не обратится в обратную сторону.
Еще один важнейший момент алгоритмической торговли — это её частота. Низкочастотная торговля (LFT) подразумевает обладание финансовыми инструмента на протяжении времени, превышающем один торговый день. Соответственно, при высокочастотной торговли (HFT) все операции происходят «интрадей», то есть в рамках одного торгового дня. Существуют также так называемые ультравысокочастотные стратегии (UHFT), которые подразумевают удержание актива на протяжении секунд или даже миллисекунд. Большое развитие на мировых и российских рынках сейчас получила высокочастотная торговля.
После того, как стратегия выбрана, необходимо протестировать её эффективность на исторических данных. Этот процесс называется бэктестингом.
Бэктестинг
Суть бэктестинга в том, чтобы подтвердить или опровергнуть прибыльность выбранной стратегии, запущенной на исторических данных. Знание результатов, которые стратегия показала бы в прошлом, позволяет предположить её эффективность в текущей рыночной ситуации. Само собой, тот факт, что на исторических данных стратегия принесла виртуальный миллион, ещё не гарантирует успеха в реальном мире.
При бэктестинге самым важным моментом является наличие данных о прошедших торговых сессиях, для запуска стратегии. Получить эти данные можно несколькими способами — часто их предоставляют брокеры и биржи, но существуют и сторонние поставщики данных.
Также важно определить метрики, по которым будет определяться, насколько успешно или неуспешно отработала стратегия «на истории». Стандартом в индустрии являются понятия «максимальной просадки» и коэффициент Шарпа. Максимальная просадка — это максимальный убыток по портфелю за определенный период (обычно за год). У низкочастотных стратегий просадка может быть больше, чем у высокочастотных, вследствие некоторых статистических факторов. Бэктест покажет максимальную просадку портфеля, которая могла бы иметь место в прошлом, что даст примерное понятие о том, чего стоит ожидать в этом плане при работе на реальном текущем рынке. Коэффициент Шарпа же это показатель эффективности инвестиционного портфеля (актива), который вычисляется как отношение средней премии за риск к среднему отклонению портфеля.
После того, как стратегия оттестирована и устранены все выявленные узкие места, возможная просадка минимизирована а коэффициент Шарпа максимален, пора переходить к собственно разработке торгового движка.
Торговый модуль
Торговый движок является средством, благодаря которому список сделок, подлежащих исполнению в соответствии с торговой стратегией, передается в торговую систему брокера. Процесс генерирования приказов может быть наполовину или полностью автоматизирован, а механизм их исполнения может быть ручным, наполовину ручным («в один клик») или полностью автоматизированным. Для низкочастотных стратегий чаще всего используется ручной или наполовину ручной ввод приказов. Для HFT-стратегий, которым важна каждая миллисекунда, в основном используется полностью автоматический метод.
Главные момент, которые следует учесть при разработке торговой системы, это обеспечение надежного и быстрого подключения к брокерской торговой системе (обычно через API) или обеспечение прямого доступа на биржу, минимизацию издержек (включая комиссию брокера и биржи, а также возможное проскальзывание).
Транзакционные издержки — одна из главных вещей, о которой стоит думать HFT-трейдеру. Они обычно складываются из трех компонентов: коммиссий брокера и биржи (и налогов), проскальзывания (разница между ценой, по которой планировалось совершить сделку, и той ценой, по которой она в реальности прошла), а также спред конкретного финансового инструмента (разница между ценой покупки и продажи — bid/ask). Спред не является постоянно зафиксированной величиной и зависит от текущей ликвидности рынка.
Высокие транзакционные издержки могут сделать из потенциально очень прибыльной стратегии с хорошим коэффициентом Шарпа полностью убыточную и наоборот. С помощью бэктеста правильно спрогнозировать транзакционные издержки может быть довольно трудно, для этого обычно необходимо получать у биржи исторические тиковые данные, включающие информацию по ценам bid/ask.
Необходимо также помнить и о разнице между эффективностью работы системы в реальном мире и тем, что она показывала на исторических данных. Разница может быть весьма существенной, и тому есть множество причин. Баги программного обеспечения и ошибки самой торговой стратегии могут не проявиться при бэктестинге, но сыграть важную роль при реальной работе на рынке.
Примеры создания торговых роботов на TradeScript.
Риск-менеджмент
Понятие «риска» включает в себя вcе вышеперечисленные опасности. Риск состоит из технологических опасностей (например, внезапный отказ серверов), риск брокера (банкротство компании), да и вообще всё, что может потенциально помешать задуманному функционированию торговой системы.
Частью риск-менеджмента является и процесс оптимизации капитала (его распределении между различными стратегиями). Это довольно сложный процесс, использующий большое количество «математики». Индустриальным стандартом, описывающим отношение оптимального распределния капитала и получения максимального эффекта от работы торговых стартегий, является критерий Келли.
Ещё один важный компонент риск-менеджмента — определение собственного психологического портрета трейдера. У каждого человека есть какие-то черты, которые могут препятствовать успешной торговле на рынке. В случае алгоритмической торговли психологический эффект играет меньшую роль, чем при «ручной» торговле на рынке, но все же присутствует — ведь за торговым роботом следит человек, который может захотеть слишком рано зафиксировать убыток или поторопиться с закрытием позиции, опасаясь увеличения потерь.
Подробнее о риск-менеджменте можно прочитать в этом топике.
Выводы
Алгоритмическая торговля — это очень сложное направление человеческой деятельности, но оно также является очень интересной областью финансов. Для того, чтобы иметь шансы добиться успехов в этом деле, просто необходимо на хорошем уровне овладеть программированием. Необходимо тренироваться, создавая торговые модули самостоятельно (торговые движки, анализаторы данных, средства для бэктестинга стратегий), используя доступные ресурсы — в конце концов, речь идет о собственных деньгах, которые никто не хочет потерять.
Статьи по теме:
- Интервью: как С# и C++ помогают заработать на фондовом рынке
- Какие языки программирования наиболее востребованы в сфере финансов
- Технологии фондового рынка: Брокерская торговая система
- How-to: как выбрать язык программирования для создания торгового робота
- How-to: Пишем торговых роботов на TradeScript
- Биржевой софт: Инструменты для создания торговых роботов
Автор: itinvest