что такое алгоритмическая торговля
Как добиться успеха в алгоритмическом трейдинге? (часть первая)
Как добиться успеха в алгоритмической торговле?
Сегодня в открытом доступе много информации об алгоритмической и количественной торговле. Трейдера, которого привлекает эта область, хочет синтезировать как можно больше информации, когда он только начинает. В результате новички могут быть ошеломлены «параличом анализа» и потратить много своего ценного времени на алгоритмическую торговлю, не добившись значительного прогресса. В этой статье я расскажу о том, как я подошел бы к алгоритмической торговле в качестве новичка, если бы только начинал свой путь. Эта статья окрашена личным опытом, поэтому, пожалуйста, прочитайте ее с пониманием того, что я описываю то, что работает для меня. Я не претендую на то, чтобы быть гуру по личному или профессиональному развитию, но мне удалось развить свои навыки алгоритмической торговли до такой степени, что я смог оставить свою основную работу для торговли на рынках – так что, возможно, у меня есть личный опыт и понимание, которые могут быть полезны для вас. В этой статье, я намерен предоставить вам некую «дорожную карту» для начала и достижения максимально эффективного прогресса, поделившись некоторыми практическими вещами, которые я узнал на своем пути в качестве алготрейдера.
Это статья посвящена:
1) Чему научиться, чтобы добиться успеха
2) Как научится этому
3) Важные практические соображения
Что делать чтобы добиться успеха?
Активное практика это гораздо важнее, чем пассивное обучение. Изучение теоретических основ важно, но это только первый шаг. Чтобы стать опытным в алгоритмической торговле, вы должны применять теорию на практике. Чтобы преуспеть в алгоритмической торговле, обычно нужно иметь знания и навыки, которые охватывают ряд дисциплин. Это включает в себя как технические, так и другие навыки.
Технические навыки, необходимые для долгосрочной успешной алгоритмической торговли, включаю в себя:
Программирование
Если вы еще не можете программировать, начните учится. Чтобы заниматься серьезной алгоритмической торговлей, вы должны уметь программировать, так как этот навык позволяет проводить эффективные исследования. Забудьте о программах типа «нажмите и перетащите», которые обещают успех в алгоритмической торговле без необходимости писать код, и если какой либо гуру трейдинга скажет вам, что вам не нужно кодировать, развернитесь и бегите не оглядываясь от него. Примите, что навыки программирования являются предпосылкой для успешной алгоритмической торговли. Через некоторое время вы обнаружите, что вам это нравится.
Полезно ознакомиться с синтаксисом языка на основе С, такого как С++ и Java, но в тоже время сосредоточьтесь на основах структур данных и алгоритмах. Это даст вам очень прочную основу и хотя может потребоваться десятилетие, чтобы стать экспертом С++, я считаю, что большинство людей могут достичь достойного уровня за шесть месяцев напряженной работы. Это подготовит вас к тому, что последует дальше.
Также полезно знать хотя бы один из языков более высоко уровня, таких как Python, R или MATLAB, поскольку вы, вероятно будете делать подавляющее большинство своих исследований и разработок на одном из этих языков. Мое личное предпочтение R.
Когда вы начнете, я не думаю, что это будет иметь большое значение, какой из этих языков высокого уровня вы выберете. Со временем вы начнете узнавать, какой инструмент является наиболее подходящим для выполнения поставленной задачи. Поэтому не слишком зацикливайтесь на своем первоначальном уровне – просто сделайте выбор и начните!
Смысл возможности программирования в этом контексте заключается в том, чтобы обеспечить тестирование и реализацию алгоритмических торговых систем. Поэтому может быть огромной пользой иметь качественную среду моделирования в вашем распоряжении. Как и в случае любой задачи моделирования, важным соображением являются точность, скорость и гибкость. Вы всегда сможете написать свою собственную среду моделирования, и иногда это будет наиболее разумной вещью, но часто вы можете использовать инструменты, которые создали другие люди для этой цели. Это имеет то преимущество, что позволит сосредоточиться на реальных исследованиях и разработках, которые непосредственно связаны с торговой стратегией, а не тратить много времени на создание самой среды моделирования. Недостатком является то, что иногда вы не совсем точно знаете, что происходит под капотом, и бывают случаи, когда использование чужого инструмента помешает вам преследовать определенную идею, в зависимости от ограничений инструмента. Хороший инструмент моделирования должен иметь следующие характеристики:
Есть несколько вариантов, но для новичка, вероятно, нет ничего лучше, чем платформа Zorro, которая сочетает в себе точность, гибкость и скорость с простым языков сценариев на основе C, что делает его идеальным введение в программирование. Платформа постоянно совершенствуется и обновляется, причем улучшения выпускаются примерно раз в квартал. Zorro может выглядеть не очень впечатляюще, но он упаковывает в себе множество функций и является отличным выбором для начинающих. Платформа Zorro широко использует возможности в алгоритмической торговле и включает в себя подробные учебники по началу работы, которые направлены на новичка.
Статистика
Было бы трудно быть успешным алгоритмическим трейдером без хорошего знания статистики. Статистика лежит в основе почти всего, что мы делаем, от управления рисками до изменения эффективности и принятия решения о распределении по конкретным стратегиям. Важно отметить, что статистика станет вдохновением для многих ваших идей для торговых алгоритмов. Вот некоторые конкретные примеры использования статистики в алгоритмической торговле, чтобы проиллюстрировать, насколько важен этот навык:
Помимо этого, наиболее важное применение статистики в алгоритмической торговле связана с интерпретацией результатов тестирования и моделирования. Есть некоторые существенные подводные камни, такие как выемка данных или «P-hacking» — которые возникают естественным образом в результате процесса разработки стратегии и которые очевидны, если вы не понимаете статистику тестирования гипотез и последовательного сравнения. Неправильный учет этих предубеждений может быть катастрофическим в торговом контексте. Хотя этот вопрос невероятно важен, он далеко не очевиден и представляет собой самый значительный барьер на пути к успеху с которым я столкнулся. Пожалуйста, потратьте некоторое время на понимание этого принципиально важного вопроса – я не могу не подчеркнуть насколько он важен.
Также оказывается, что человеческий мозг прискорбно неадекватен, когда дело доходит до выполнения обоснованных статистических рассуждений. Даниел Канеман в книге «Думай медленно… Решай быстро» обобщает несколько десятилетий исследований и когнитивных предубеждений, с которыми люди сталкиваются. Канеман обнаружил, что мы склонны слишком доверять собственным способностям и суждениям, что человеческий разум систематически впадает в заблуждения и ошибки в суждениях, и что мы в подавляющем большинстве склонны приписывать слишком много значения случайности. Важным следствием работы Канемана является то, что, когда дело доходит до выводов о сложной системе со значительным количеством случайности, мы почти гарантированно принимаем плохие решения без надежной статистической основы. Мы просто не можем полагаться на собственную интерпритацию.
«Думай медленно… Решай быстро» — это не книга о трейдинге, но она помогла мне в торговле больше, чем любая другая книга, которую я читал. Очень рекомендую. Кроме того, не случайно работа Канемана создала область поведенческой экономики.
Риск менеджмент
Управление рисками. Существует множество рисков, которыми необходимо управлять в рамках алгоритмического трейдинга. Например, существует инфраструктурный риск (риск того, что ваш сервер выйдет из строя или пострадает от отключения питания, оборванного соединения или любого другого вмешательства) и встречный риск (риск того, что встречная сторона сделки не сможет выполнить сделку или риск того, что ваш брокер обанкротится и заморозит ваш счет). Хотя эти риски, весьма реальны и их необходимо учитывать – больше внимания уделяется управлению рисками на уровне торговли и портфеля. Этот вид управления рисками пытается количественно оценить риск потерь и определить оптимальный подход к распределению стратегии или портфеля стратегий. Это сложная область, и есть несколько подвохов и вопросов, о которых практикующий трейдер должен знать.
Две стратегии распределения, о которых стоит узнать – это распределения Келли и оптимизация средней дисперсии (MVO). Они использовались на практике, но они несут в себе некоторые сомнительные предположения и практические вопросы осуществления. Именно этими предположениями должен заниматься новичок в алгоритмической торговле.
Лучшее место, чтобы узнать о распределении Келли – в «руководстве по математике портфолио» Ральфа Винса, хотя есть множество сообщений в блогах и на форумах о распределении Келли, которые будет легче переварить.
Сложность в реализации Келли заключается в том, что она требует регулярной ребалансировки портфеля, что приводит к покупке в выигрышах и продаже в убытках – что легче сказать, чем сделать.
MVO, за которую Гарри Марковиц получил Нобелевскую премию, включает в себя формирование портфеля, который лежит на так называемой «эффективной границе» и следовательно, минимизирует дисперсию (риск) для данной доходности или, наоборот максимизирует доходность для данного риска. MVO страдает от классической проблемы, с которой алгоритмические трейдеры будут постоянно сталкиваться: оптимальный портфель формируется задним числом, и нет никакой гарантии, что прошлый оптимальный портфель будет оставаться оптимальным в будущем. Базовая доходность, корреляция и ковариация компонентов портфеля не являются стационарными и постоянно меняются часто непредсказуемым способом.
Другим способом оценки риска, связанного со стратегией, является использование Value-at-Risk (VaR), которое обеспечивает аналитическую оценку максимального размера убытка от торговой стратегии или портфеля за заданный временной горизонт и при заданном доверительном уровне.
Наконец, я хочу упомянуть эмпирический подход к измерению риска, связанного с торговой стратегией: перестановка системных параметров или SPP. Этот подход пытается обеспечить обьективную оценку эффективности стратегии на любом доверительном уровне в любое время интересующего горизонта. Под «непредвзятым» я подразумеваю, что оценка не подвержена тенденциям интеллектуального анализа данных или «P-hacking», упомянутым выше. Лично я считаю, что этот подход имеет большую практическую ценность, но он может быть очень дорогим в вычислении и не подходить для некоторых торговых стратегий.
Теперь вы знаете о нескольких различных инструментах, которые помогут вам в управлении рисками. Я не буду рекомендовать один подход по сравнению с другим, но я рекомендую изучить каждый из них, особенно их преимущества, недостатки и предположения. Тогда вы сможете выбрать тот подход, который соответствует вашим целям и который вы понимаете достаточно глубоко, чтобы строить реалистичные ожидания. Следует также иметь ввиду, что существует множество различных ограничений, в рамках которых необходимо управлять портфелями проектов и стратегий, особенно в институциональных условиях.
Последнее слово по управлению рисками: при измерении любой метрики, связанной с торговой системой, учитывайте, что она статична – скорее, она почти всегда динамично развивается со временем. Таким образом, точечное измерение говорит лишь крошечную часть истинной истории. Пример того, почему это важно, можно увидеть в портфеле акций, риск которых управляется путем измерения корреляций и ковариаций различных компонентов. Такой портфель направлен на снижение риска за счет диверсификации. Однако такой портфель сталкивается с проблемами, когда рынки танкуют: в этих условиях ранее некоррелированные активы становятся гораздо более коррелированными, сводя на нет эффект диверсификации именно тогда, когда это необходимо больше всего!
Переходя к трем основным навыкам, которые я описал, я также хотел бы добавить численную оптимизацию, машинное обучение и анализ больших данных, однако они выходят за рамки того, что я бы назвал «минимальными требованиями». Эти навыки приятно иметь в своем инструментарии, они облегчат вашу жизнь в качестве алгоритмического трейдера.
Для авантюрных и по-настоящему преданных делу я также могу порекомендовать изучение поведенческих финансов, микроструктуры рынка и макроэкономики. Опять же, это не минимальные требования, но это даст вам понимание, которое поможет ориентироваться на рынках. Финансы и экономика помогают генерировать торговые идеи, но вам не нужно формальное образование в этих областях.
Наконец, было бы упущением с моей стороны не упомянуть о «нетехнических навыках», которые пригодятся. Особенно важным из них является критическое мышление. Вы будите читать горы информации о рынках на своем алгоритмическом торговом пути, и каждая страница должна быть прочитана критическим взглядом. Заведите привычку проверять идеи самостоятельно и собирать собственные доказательства, а не полагаться на утверждение других людей.
Другие нетехнические навыки, которые стоит культивировать, включают настойчивость перед лицом отказа (вы к сожалению, будете вынуждены отказаться от большинства ваших торговых идей) и способность проводить высококачественны, воспроизводимые и обьективные исследования.
Алгоритмическая и автоматизированная торговля: Введение
В нашем блоге на хабре мы неоднократно поднимали вопросы, связанные с созданием торговых роботов и алгоритмических торговых систем. Сегодня мы представляем вашему вниманию пост, написанный нашим читателем — цель этой публикации заключается в том, чтобы внести ясность в терминологическую путаницу, которая окружает алгоритмическую торговлю.
Цзы Лу спросил: «Вэйский правитель намеревается привлечь Вас к управлению государством. Что Вы сделаете прежде всего»?
Учитель ответил: «Необходимо начать с исправления имен».
Для начала давайте представим главных участников процесса биржевых торгов:
Электронная торговля
До появления компьютеров и сетей движение ордеров между клиентами, брокерами и биржами осуществлялось с помощью телефона, а до появления телефона – с помощью телеграфа, а до телеграфа в седые бородатые времена – курьерами и вестовыми и даже почтовыми голубями.
В настоящее время движение ордера («order flow») от клиента через брокера на биржу у всех брокеров полностью компьютеризировано, хотя есть случаи, когда некоторые ленивые клиенты с толстыми кошельками предпочитают передавать свои ордера лично по телефону, не прикасаясь к компьютеру, но их ордера все равно заносятся у брокера в брокерский компьютер, и далее они передаются на биржу по сети как и положено в XXI веке.
Инвестор, его цель и стратегия
Инвестор занимается тем, что принимает инвестицинное решение о купле и продаже того или иного актива или целого портфолио активов. Его цель – заработать деньги.
Инвестор может принимать решение самостоятельно, руководствуясь чутьем, знаниями, инсайдерской информацией, шепотом русалок, расположением планет и полетом птиц, конфигурацией «японских свечей» («технический анализ») или квартальными отчетами компаний («фундаментальный анализ»). В принятии таких инвестиционных решений для анализа данных и расчетов многие инвесторы уже давно используют компьютеры. Торговля на основе таких расчетов называется «quantitative trading».
Получив из расчетов сигналы «продавай»/«покупай», инвестор генерирует ордер-заявку на куплю (продажу), которая отправляется к брокеру на исполнение. Если инвестор работает с целым портфолио активов, одновременных заявок на куплю и продажу может быть несколько сотен.
Автоматизировання торговля
Если инвестор может выразить свою инвестиционную интуицию, видение, стратегию в виде компьютерного кода, он может полностью автоматизировать принятие инвестиционных решений, поручив компьютеру все: от анализа поступающих рыночных данных и вычисления потенциальной прибыли-убытков до генерирования ордеров на куплю-продажу. Себе инвестор оставляет только проверку, мониторинг и расслабленную игру в гольф.
В те горячие моменты, когда у инвестора трясутся руки и гложут сомнения, компьютер бесстрастно вынесет вердикт покупать-продавать и купит и продаст в точном соответствии с заложенным в нее набором правил. И принесет прибыль. Если, конечно, набор правил верный.
Такой стиль торговли называется «автоматизированным» (automated trading). Другие названия для такой торговли: «rule-based trading» (торговля по правилам), «systematic trading» (торговля по системе). Компьютерная программа в этом случае называтся «автоматизированной торговой системой» (automated trading system) или «торговым роботом» (trading robot).
Если набор правил, по которым принимается инвестиционное решение, хранится в особом секрете разработчиком от тех, кто им пользуется, такая система называется «черный ящик» (black box), а торговля с ее помощью – «black-box trading».
Цель «автоматизированной торговли», как и любой другой проприетарной торговли – зарабатывание денег. Набор правил автоматизированной торговой системы разумеется тоже можно назвать алгоритмом, но от этого «автоматизированная торговля» не становится «алгоритмической».
Когда вы пишете «роботов» в торговых терминалах или в Visual Basic-е и запускаете их торговать на бирже, вы занимаетесь не алгоритмической торговлей, а автоматизированной проприетарной торговлей.
Алгоритмическая торговля
Термин «алгоритмическая торговля» используется для обозначения другого специфического процесса, в котором не принимаются инвестиционные решения. В алгоритмической торговле алгоритмы используются для исполнения больших ордеров с минимальными потерями.
Цель алгоритмической торговли – эффективно уменьшить затраты на исполнение ордера (execution costs), уменьшив влияние ордера на рынок (reduce market impact).
Слово «торговля» (trading) в этом термине не совсем удачное. Оно имеет слишком широкое значение и у большинства ассоциируется с деятельностью по купле-продаже, поэтому корректно называть этот процесс «алгоримическим исполнением ордера» (algorithmic order execution).
Откуда именно в алгоритмический движок попадает ордер – не суть важно, главное — его создает не алгоритмический движок. Чаще всего алго-движок брокера работает над крупным ордером, поступившим от клиента.
Исполнение ордера
До появления алгоримической торговли большие клиентские ордера в брокерских конторах обрабатывались вручную. Над ордером что называется «работали» трейдеры (working the order), аккуратно «продавливая» его на рынок по частям (slicing), руководствуясь чутьем, опытом и реакцией.
Такие ордера назывались «high touch», так как такие ордера требовали много внимания и заботы. Поток этих клиентских ордеров брокеры называют «high touch order flow», а у брокера такими ордерами занимался особый отдел трейдеров «high touch trading desk». За «ручную работу» с ордером клиенты платят брокеру самую высокую комиссию.
Почему так важно осторожно работать с большими клиентскими ордерами, читайте в разделе «Большой ордер двигает рынок» в конце статьи.
С ростом потока заявок трейдеры уже не успевали уделять должное внимание каждому большому ордеру и появилась идея использовать для этого компьютеры. Это вполне объяснимо, раз ордера поступают к брокеру электронно и уже назходятся в компьютере, то почему бы не запрограммировать компьютер простейшим правилам исполнения ордеров и поручать им рутинную работу?
Так были созданы алгоритмические движки (algorithmic engines), которые делали все то же самое, что делал вручную обычный трейдер с большим ордером, а именно: большой родительский ордер (parent order) делился, используя специальный алгоритм с заданными параметрами, на маленькие ордера (child orders) и каждый маленький ордер отправлялся на рынок в предопределенный момент времени. Компьютеры очень легко могут обрабатывать тысячи клиентских ордеров одновременно и делить их на сотни «маленьких медвежат», оставляя трейдеру время и возможность работать над другими более сложными ордерами вручную.
Как видите, по-началу алгоритмические движки были всего лишь вспомогательным инструментом для трейдеров брокерской компании, к которому они прибегали, когда исполнение клиентского ордера не требовало особого внимания, а нужно было просто дисциплинированное исполнение определенной стратегии.
Direct Market Access
Direct Market Acess – «прямой доступ к рынку», это когда брокер пропускает ордер через свою торговую систему на рынок в полностью автоматическом режиме без дополнительного ручного вмешательства.
Если ордер от клиента принимается электронно и уже находится в компьютере, почему бы не запрограммировать компьютер на выполнение определенных проверок и после этого сразу отправить ордер на биржу? Эта простая идея была реализована в начале 2000-ых годов, когда повсеместно биржи стали электронными, а брокеры стали предлагать услугу DMA своим клиентам.
В отличие от «high touch» ордеров, в DMA-сервисе к клиентским ордерам никто не прикасается, их никто не обрабатывает и не проверяет вручную. Поэтому они называются «low touch». «Low» потому что кое-какая обработка все-таки ведется: ордер проходит через торговую систему брокера, где его проверяют на валидность (validation) и соответствие различным лимитам и рискам (risk checks). Только после этого торговая система брокера отправляет ордер на биржу. Все проверки ордера проходят за доли секунды, но тем не менее они вносят свой вклад в разницу между времененем поступления ордера к брокеру и поступлением ордера на рынок.
Эта задержка («latency») нравилась не всем клиентам, и брокеры пошли на еще более смелый сервис – предоставление «naked DMA» или «sponsored DMA». В naked DMA клиент сам подключается к бирже напрямую, создавая свою собственную инфраструктуру, и отправляет свои ордера со своей торговой системы напрямую на биржу, минуя инфраструктуру брокера, но пользуясь его идентификатором.
Идентификатор брокера клиенту требуется потому, что на бирже могут торговать только члены биржи, коим является брокер, но не клиент. Т.е. все ордера, отправленные клиентом через naked DMA, отправляются от имени брокера (он выступает как sponsor, сдающий в аренду свой идентификатор и свою репутацию) под ответственность клиента. Брокер же получает информацию об ордерах клиента пост-фактум в виде протокола (drop-copy) от биржи. Такие ордера называются «zero-touch», потому что брокер к ним не прикасается вообще. В последнее время naked DMA стали прижимать правительственые регулирующие органы, особенно в США.
За пользование сервисом DMA клиенты тоже платят брокеру комиссию, пусть и мизерную.
Direct Strategy Access
Отступление: У некоторых брокеров алгоритмы исполнения называются словом «стратегии» (strategy). Просто так красивее звучит. Это вносит путанницу, потому что слово «стратегия», например, в словосочетании «инвестиционная стратегия» приобретает совершенное значение.
Где-то около 2004 года крупные брокеры стали помимо DMA-сервиса предоставлять клиентам доступ и к своим алгоритмическим движками. Теперь клиент мог прислать ордер с параметрами, где было указано, какой именно алгоритм брокера он выбирает, насколько агрессивно надо выполнять ордер, когда надо начать выполнение ордера и когда закончить. Этот особый ордер внутри брокерской инфрастурктуры пренаправляется в алгоритмический движок, который потом «работает» над ордером, отправляя на биржу его по маленьким кусочкам.
Выше я писал, что алгоритмы иногда для красоты и рекламы называются стратегиями, поэтому прямой доступ к ним называется «direct strategy access», т.е. буквальнно «прямой доступ к стратегиям». Ордера носят название «DSA orders», а поток таких ордеров называется «DSA flow».
За пользование алгоритмами брокера клиент платит брокеру еще дополнительную комиссию.
Инвестор и алгоритмическая торговля
Так как клиент-инвестор уже имеет прямой доступ к рынку через DMA-сервис от брокера, то ему ничто не мешает (если есть бюджет) создать свой собственный алгортимический движок у себя, заточенный под его собственные нужды, который будет исполнять его большие ордера, сгенерированные его автоматизированной торговой системой.
Инвестор может купить готовый (of-the-shelf) алгоритмический движок у сторонней конторы (vendor), либо нанять программистов, чтобы они написали ему свой собственный (custom built).
В любом случае у инвестора алгоритмический движок становится частью его автоматизированной торговой системы, но по-прежнему является модулем исполнения ордеров. Генерацией же ордеров занимается инвестиционная часть торговой системы.
Большой ордер двигает рынок
Главная задача брокера-агента – услужить клиенту, т.е. качественно исполнить ордер клиента, чтобы клиент, покупая не переплатил, а продавая – не потерял. Но если и переплатил, то не слишком много. И тут против брокера-агента вступает главный рыночный закон обратной связи спроса и предложения. Если клиент передает для обработки очень большой ордер, скажем продать 100.000 акций (речь идет об ордере на сумму как минимум миллион у.е.), то его нельзя просто взять и выбросить на рынок. Это моментально приведет к дисбалансу рынка, а это приведет к тому, что желающие купить будут понижать свою цену, видя что кому-то надо продать такое больше колчиество акций. Выглядит это так – продавец видит на рынке текущие котировки акции XYZ покупка/продажа 100 – 110. И посылает ордер: продать 100.000 по 100 у.е., планируя выручить 10.000.000 у.е. Неумелый брокер вываливает весь ордер на рынок, и что же он видит? Те, кто еще недавно желал купить по 100 у.е., моментально отзовут свои заявки и подадут новые заявки: нет, мы уже не хотим покупать по 100, мы хотим купить по 90. Брокер почешет в затылке и переопределит свой ордер: ладно, продаю 100.000 по 90 у.е. Если покупатели не повторят свой финт, брокер выполнит ордер, принеся клиенту на тарелочке вместо 10.000.000 у.е. всего 9.000.000. Т.е. на исполнении ордера клиент потерял 10% капитала, из-за криворукого торопливого брокера. Да еще заплатил комиссионные. Клиенту это очень не понравится.
Данный феномен называется «большой ордер двигает рынок» («moves the market»), влияние большого ордера на цены на рынке (market impact) характерно не только для финансового рынка. Если, скажем, вы привезете на базар КАМАЗ бананов, чтобы продать их побыстрее, базарные торговцы-перекупщики обступят ваш КАМАЗ и тут же начнут снижать цену, за которую они у вас согласны перекупить весь грузовик.