7 сезон · выпуск 9 · 14 июля 2022 · 60 мин
Как научить алгоритм торговать на бирже
Бизнес и деньги ИИ и нейросети
Слушать · 59:46
На бирже постоянно что-то происходит, и делать достоверные прогнозы на длинной дистанции умеют немногие. Но чтобы успешно торговать и зарабатывать, это необязательно. Гость сегодняшнего эпизода Эмиль Лернер рассказывает, как его компания создаёт боты для высокочастотной торговли, умеющие за миллисекунды совершать сделки, и как написать алгоритм, приносящий деньги.
Регистрация на бесплатный вебинар «Как стать разработчицей» от Яндекс Практикума: https://clck.ru/sHuFD
Фонд Эмиля: https://wunderfund.io
Подписаться на «Запуск++» в Телеграме: https://t.me/+N_AopnXC0dBkMGQy
Подписаться в Apple Podcasts на Либо/Либо+, куда включены эпизоды «Запуск++»: https://clck.ru/rfqJR
Над выпуском работали
- Редакторка
- Маша Агличева
- Продюсерка
- Настя Медведева
- Звукорежиссерка
- Нина Мамотина
- Дизайнер обложки
- Петр Сутупов
Транскрипт
Самат Галимов, Эмиль · расшифровано автоматически, ошибки возможны
-
Всем привет! Меня зовут Самат Калимов, и это подкаст «Запуск завтра». Как технический директор я пытаюсь разобраться, как устроены сложные и интересные штуки. Я зову профессионала, с которым можно поговорить простым, человеческим языком. Сегодня мы поговорим о финансовой бирже. Есть такой образ финансиста, как человека, который что-то понимает в том, что происходит в экономике, может это объяснить и благодаря этим знаниям зарабатывает деньги. Сегодня мы посмотрим на биржу с совсем другой стороны. Во-первых, мы разберемся, как она устроена технически. Это безумно сложная система, она обрабатывает миллиарды запросов в день. С другой стороны, мы поговорим с людьми, которые вообще не пытаются разобраться в том, как устроен рынок. Эти ребята смотрят на биржевые торги не как на финансовую задачу, а как на задачу инженерную, техническую, и пишут программы, которые играют на бирже и даже зарабатывают деньги. Это подкаст студии Либо-Либо, и мы его сделали вместе с сервисом онлайн-образования Яндекс Практикум. У Практикума есть курсы по разработке, по анализу данных и по английскому языку. Если вы хотите освоить цифровую профессию, переходите на сайт Яндекс Практикум и учитесь. Я знаю, что есть такое убеждение, что программирование— это не женская профессия. Меня при этом окружает теща-программист баз данных Oracle, жена, которая закончила ВМК, и сестренка, которая очень хорошо программирует. Девушки часто недооценивают свои силы, это вообще известный психологический феномен, и не идут на работу, которая им могла бы понравиться. Программирование— это и женская профессия тоже. Если вы, девушка, и задумывались о том, чтобы пойти в IT, стать айтишницей, то специально для вас 27 июля в среду в 18.00 Яндекс.Практикум проводит открытый бесплатный вебинар на эту тему. Ссылка есть в описании к этому эпизоду.
-
Привет, меня зовут Эмиль, Wunder Fund, мы занимаемся высокочастотной торговлей.
-
Я сначала хочу разобраться с тем, как просто торговать на бирже, а потом разобраться, где там может появиться высокочастотная торговля, вообще алгоритмы и все такое. Давай с таких совсем тупых вопросов. Где люди торгуют и чем?
-
В принципе, вообще не важно, чем торговать. То есть вначале у тебя есть просто, допустим, какой-нибудь актив, допустим, сахар или нефть или пшеница. И, соответственно, у тебя есть люди, которые хотят ее купить, и люди, которые хотят ее продать. И каждый человек, который хочет купить, он обычно хочет купить не дороже, чем сколько-то, да? То есть у него есть какое-то ограничение. Соответственно, другие чуваки хотят продать, они хотят продать не дешевле, чем сколько-то. Получается, что если у тебя есть два чувака, у которых цены тот, который хочет продать, у него больше равна, чем тот, который хочет купить, тогда чуваки матчатся, а получается сделка. Ну и, собственно, все классические биржи устроены так. Дальше у тебя возникают разные производные финансовые инструменты. Ну, допустим, у тебя есть производство пшеницы, и ты знаешь, что у тебя осенью будет пшеница. Но продать ты ее хочешь сейчас. Конечно, цена на пшеницу может вырасти, но она ведь может и упасть, а ты хочешь от этого застраховаться. И поэтому ты заключаешь контракт со мной на поставку пшеницы осенью. Соответственно, мы с тобой договариваемся, что 30 сентября ты мне отдашь пшеницу по такой цене, по которой мы договоримся сейчас. Соответственно, у тебя получаются тоже люди, которые хотят купить 30 сентября пшеницу. продать 30 сентября пшеницу. То есть тоже можно их заявки собрать, там сматчить, сделки какие-то сделать, и тоже получается вот такая же структура. И вот ход следующий спекулятивный заключается в том, что пшеница здесь нахер не нужна. Мы можем просто с тобой договориться, что мы 30 сентября посмотрим на цену пшеницы и посмотрим, кто выиграл, и договоримся, что один из нас отдаст другому деньги. И вот это вот чудо называется расчетный фьючерс. У него прикол в том, что его можно сделать на любое число на самом деле. То есть если что-то можно посчитать как цену, то можно и фьючерс на это сделать. И не обязательно тебе иметь возможность это купить, продать. Это по сути пари, которые мы с тобой заключаем, и отказаться от него уже нельзя.
-
Ты мне сказал про то, что можно типа продавать, покупать, примерно, все что угодно, и что кроме физических товаров можно еще и договариваться о покупках на будущее, о фьючерсах. Следующий мой вопрос, это кто занимается торговлей на бирже? То есть я условно сам по себе прихожу к бирже и говорю, вот у меня заказ, или мне нужны какие-то посредники, чтобы работать?
-
Если у тебя биржа вот абсолютно легальная, такая обычная, ну, например, там, московская биржа, я не знаю, нью-йоркская биржа, то, как правило, ты там торгуешь через брокера. Зачем это нужно? Ну, бирже не хочется на самом деле возиться с кучей клиентов, им тяжело, они не умеют их привлекать, им хочется просто организовывать торги. Чтобы тебе поторговать как просто человеку, тебе нужно, соответственно, какой-то посредник. Брокер – это финансовая организация, которая очень зарегулирована, да? То есть, условно, деньги у брокера не кончатся. Соответственно, биржа, она рассчитывает брокеров. То есть, если ты проиграл деньги, Ну, брокер просто делал заявки от твоего имени, соответственно, биржа спишет деньги со счета брокера. А на счете брокера денег очень много.
-
Ты сказал, что много людей отправляют то, что хотят купить, много людей отправляют то, что хотят продать, биржа их матчит. Биржа, скорее всего, это какая-то компьютерная система, в которой, типа, хранятся такие заказы, такие заказы, и они там сматчились. У биржи есть какой-то API, что ли, публичный? машиночитаемые протоколы, которые, короче, компьютеры говорят с компьютерами.
-
Ответ—
-
да.
-
У биржи есть API. Можно посмотреть его на сайте биржи. Это, как правило, не JSON API. Обычно это либо какие-то кастомные протоколы, либо это стандартизированные финансовые протоколы. FIX. Хрень, наверное, какая-то из 60-х. Точно так, как ты говоришь. То есть Financial Information Exchange на самом деле протокол замечательный. Он устроен так. Там ты пишешь, типа, имя равно значение, имя равно значение, имя равно значение и так далее. Но только вместо имени, чтобы экономить место, ты пишешь номер, причем ты пишешь прям его десятично, то есть ты пишешь прям цифры, не какой-нибудь бинарный формат. А в качестве разделителя ты используешь символ с кодом 1. И эти протоколы до сих пор живут. Ну, как бы сфера достаточно консервативная. Понятно, что там есть более современные, уважающие себя биржи какие-то более современные, идеально бинарные протоколы, где ты просто прям посылаешь условно из памяти бинарную структуру, и тогда тебе ничего кодировать не надо, очень удобно, и вот так вот. стандарт отправки того API, про который ты говоришь.
-
Значит, биржа— это такая программа-сервис. в которую ты посылаешь данные по API, посылаешь туда сигнал, что типа хочу купить, хочу продать, дальше биржа это матчит, и все происходит. О, следующий мой вопрос. А что происходит под капотом, когда вот этот матчинг, там какие-то хитрые алгоритмы или это прямо тупо типа, если я хочу купить максимум по такой цене, то выбирается минимальная цена и отдается, а если никакой нет, тогда говорится, извини, чувак, не получилось. Или там есть какая-то более хитрая логика?
-
На самом деле, логика вот примерно такая, как ты отписал. Единственное, что такой сразу момент, что если не получилось, если не смачилось, то тебе не говорится «извини». Твоя заявка, ну в типичном случае, она просто добавляется на биржу и там ждёт своей очереди, потому что она будет матчиться с кем-то, кто придёт позже.
-
Она истечёт когда-нибудь или она будет жить вечно пока не?
-
Ты можешь её отменить, ну и, как правило, они в конце дня истекают, да. То есть в простейшем случае, да. Она может переноситься на следующий день автоматически. Может, ты брокера попросишь её переносить. Но в целом вот так вот. То есть заявка просто живёт там, она ждёт кого-то, с кем она сможет смачиться. И вот все эти заявки, которые ждут, когда к ним наконец придет кто-нибудь, они, получается, образуют такую структуру, то, что у тебя снизу, если их нарисовать, вот сверху большие, а снизу маленькие, то получится, что снизу у тебя заявки, которые хотят что-то купить, то есть люди, которые что-то хотят купить, сверху те, которые хотят что-то продать. Вот эта вся картинка называется биржевой стакан. или ордер-бук.
-
Ага. А что значит купилось или продалось? Вот я понимаю, что берусь, я какую-то базу данных записал, что произошел матч. А что физически для меня изменится? Ну в смысле, не знаю, у меня деньги на счету появятся или что?
-
Ну типа того, да. Как правило, у тебя есть именно депозитарий, такая штука, в котором хранятся вот эти вот деньги, акции, вот. И биржа просто рассказывает результаты торгов в депозитарию, а он уже там применяет, собственно, модифицирует там количество денег на счете или там акции и вот это все. Опять-таки есть хороший пример такой децентрализованный, что ли, ну даже не то, что децентрализованный, а такой более конкурентной области— это криптобиржи. И в криптобиржах у тебя все гораздо проще. У тебя там, допустим, нету вот этих вот сущностей торгового дня. У тебя просто торги идут 24 часа, и биржа сама просто зачисляет без всякой отдельной сущности, сама зачисляет те штуки, которые ты купил, те штуки, которые ты продал, ты их можешь вывести сразу же. Ну понятно, что когда у тебя нет вот этих вот отдельных сложных сущностей, где одна другая должна как-то там передавать данные, то в итоге ну просто пишешь в прогу, как тебе удобно, и, собственно, криптобиржа, поэтому в этом плане гораздо проще организованная именно с точки зрения для пользователя.
-
Окей, мы поняли, как это работает технически. Теперь давай про финансы. Как на этом вообще люди зарабатывают? Какие есть схемы?
-
В целом у тебя как будто есть разные виды инвесторов, условно. В основном зависит от того, насколько долго они собираются держать акции или что там они покупают. У тебя есть такие более фундаментальные чуваки, которые, допустим, понимают, что какая-то компания фундаментально недооценена, допустим, Например, рискованные чуваки любят вкладываться в какие-нибудь развивающиеся страны. То есть они думают, что на самом деле «Газпром» стоит больше просто из-за того, что он в России, а люди хотят его продавать, недооценивают, и он верит, что в России...—
-
Когда-нибудь станет хорошо?—
-
Ну, верил. И, соответственно, их покупал. И держал просто очень долго. То есть он рассчитывал ждать долго.
-
Или чувак, который купил акции Apple в 2000 году.
-
Да, да. Как бы какие-то мелкие колебания на него малого значения влияют. Может, годовой отчет для него важен, а все остальное, ну так. Дальше у тебя могут быть другие горизонты планирования. То есть ты можешь торговать в течение дня, что называется intraday. Ну, короче, то время, на которое ты покупаешь акции, оно измеряется днями. Ты рассчитываешь, что они там сейчас как-то одномоментно вырастут, завтра, послезавтра, может, на следующей неделе, и тогда я их солью, получу, собственно, профит.
-
Это, например, я покупаю акции или, наоборот, продаю акции перед годовым отчетом компании. Я знаю, что завтра будет годовой отчет, и там все будет красиво, и акции вырастут.
-
Не, ну если ты знаешь, что в годовом отчете все будет красиво, то ты называешься инсайдер.
-
Это тоже... Ой, погоди, я не знаю, но я предполагаю, я думаю... Ну да,
-
если ты предполагаешь, то да. То есть здесь ты уже не так хорошо разбираешься вообще в компании, но ты понимаешь, что там может быть, примерно как-то прикидываешь. Ну, соответственно, ты уже чаще торгуешь, некоторое время держишь открытую позицию.
-
Вот биржевой спекулянт, мне кажется, для меня это ассоциируется именно с этим типом людей.
-
Ну да, да. Есть вот, соответственно, боты. Боты бывают очень разные. High frequency trading, соответственно, то, чем мы занимаемся, это боты, они в пределах секунды, может, предсказывают. То есть они чувствуют, что сейчас вот-вот произойдет какое-то событие. Они торгуют уже очень часто, вообще не пытаются инвестировать. То есть в конце дня, как правило, у тебя позиция закрывается, чтобы как раз у тебя там не летели ни в какой депозитарии твои вот эти вот владения акциями и вот это все, потому что это обычно просто лишний геморрой. Вот в конце дня ты закрываешь позицию, утром опять открываешь. Ну еще потому что у тебя за ночь может что-то произойти, и утром цена слишком резко изменится. Соответственно, на резких изменениях, которые заранее известны, ты можешь... ну, как правило, ты на них не стремишься заработать, ты стремишься заработать на резких изменениях, которые ты можешь предсказать вот на секундочку вперед. Ну в целом вот такие примерно категории, и я приближен к той части спектра, которая торгует на очень маленьких промежутках.
-
Эмиль, я в этом вообще не разбираюсь, но я слышал, что есть чуваки, которые занимаются так называемым техническим анализом. Типа смотрят на графики, вообще ничего не знают про компанию, но могут типа что-то предсказать по графикам. Чё это за тема такая? И насколько это алгоритмизированная тема?
-
Короче, я бы сказал, что большая часть людей, которые занимаются теханализом, они занимаются гаданием на картах Таро. То есть они по графику пытаются увидеть какие-то фигуры, понять, что там будет. Ну и эти предсказания, если они сбылись, то хорошо, если они не сбылись, то всегда можно объяснить. Почему это произошло? Понятно, что если у тебя есть какой-то реальный алгоритм, который как-то ты можешь на графике посмотреть и не просто интерпретировать их как фигуры, которые в дыме от костра поднимающиеся, ты распознаешь, а вот реально что-то алгоритмическое понять, то понятно, что это можно автоматизировать. Вообще боты, которые торгуют на таких небольших интервалах порядка дня и успешно торгуют, они бывают? Используют ли они технический анализ в том виде, в котором он на форумах? Я думаю, что ни один из них не использует вот так вот. Я подозреваю, что это не так. Окей,
-
то есть это люди просто развлекаются таким образом.
-
Ну да, да. Но тут надо понимать, что биржа— это, с одной стороны, игра с нулевой суммой, с другой стороны, немножко заработать сразу на ней легко. То есть у тебя нет такого, что казино систематически просто постоянно выигрывает, выигрывает много, И из-за этого, если ты просто будешь играть в казино, ты проиграешь, и к концу дня ты разоришься. Тут такого нет. Тут биржа, конечно, берет комиссию, но, как правило, эта комиссия небольшая относительно объема торгов, это там, ну, какие-то десятые доли процента. И поэтому, если ты будешь просто, условно, случайные действия делать, то есть просто случайно продавать и покупать, то твой результат, у него мат ожидания ноль.
-
То есть иногда будешь выигрывать, иногда будешь проигрывать, в целом ты будешь на нуле сидеть все время.
-
Да, да. Ну, в целом ты будешь немножко проигрывать, ты будешь проигрывать комиссию. Соответственно, когда ты вместо того, чтобы делать это просто честно по монетке, делаешь это в результате каких-то там сложных графиков и чего-нибудь такого, и анализа каких-нибудь там непонятных фигур, ну, иногда ты выигрываешь, потому что, опять-таки, ты же не можешь всё время проигрывать. Это бы тоже было странно. Ты иногда выигрываешь, иногда проигрываешь, и там у тебя развивается какая-то типа чуйка, как и у любого из нас, когда мы смотрим на последствия случайных чисел, нам кажется, что мы там поняли принципы, а на самом деле они просто случайные.
-
А теперь минутка рекламы. Завтра пятница, и у нас выйдет бонусный эпизод нашего подкаста «Запуск++». Там мы поговорим о языке программирования Go. На программистов на языке Go сейчас огромный спрос, и сам язык очень интересный. Подписаться на бонусные эпизоды можно в Apple подкастах и в Телеграме. Ссылка есть в описании к этому эпизоду. Окей, мы поняли, что можно играть на длинном горизонте то, что делает Уоррен Баффет, который там типа читает документы по компаниям и решает, какие компании недооценены. Можно торговать на горизонте нескольких дней. Если ты опираешься на какие-то понимания чего-то реально происходящего, тогда ты, скорее всего, будешь выигрывать. Если ты опираешься просто на фигуры, на графики, скорее всего, это похоже на подбрасывание монетки. И есть торговля на суперкоротком горизонте. Меньше секунды. И вот этим занимаешься ты.
-
Да.
-
Давай про это. Расскажи чуть подробнее, как это работает. С какой частотой происходят сделки?
-
Ну, сделки происходят, как правило, несколько раз в секунду, вот так вот, даже, может, чаще. Несколько раз в секунду— это в среднем, потому что бывают такие периоды, когда рынок очень активный, и там происходят у тебя прям сотни, иногда тысячи сделок в секунду. Иногда рынок такой более пассивный, и у тебя может даже несколько десятков секунд ничего не происходить. Но в целом HFT – это про то, что ты делаешь очень много сделок, на каждый из них зарабатываешь очень мало, ну и в итоге у тебя скапливается какая-то сумма, хорошо бы она была положительной и приличной.
-
Если несколько тысяч делок в секунду, скорее всего, их делает не человек. То есть это обязательно сделки, которые производятся машиной.
-
Безусловно, да.
-
А обычные, кстати, трейдеры, они сколько обычно сделок производят? Ну типа нечифтишные. Как часто они делают сделки?
-
Я бы сказал, что очень активный чувак может делать сделки там каждые 10-15 минут. Это вот такой уже более разумный интервал для человека, за которым начинается бессмысленное какое-то жонглирование туда-сюда.
-
Если вернуться к тому, что ты реально делаешь, когда я слышу, что алгоритм принимает решение о покупке, типа несколько сотен раз в секунду, по ощущениям кажется, что они предсказывают движение цен, пускай на очень короткий интервал, но тоже то, что называется, посмотрев на график. И мне непонятно, чем это отличается от того технического анализа, про который ты говорил совсем недавно. В чем отличие?
-
Отличие, я бы сказал, вот в чём. Во-первых, они смотрят на большее число параметров. Во-вторых, когда ты пишешь бота, то ты не совсем предсказываешь. То есть да, формально ты, конечно, предсказываешь, куда пойдёт цена, но потому что если ты зарабатываешь, то, естественно, ты предсказываешь это. Но так как ты делаешь это на очень маленьких интервалах, то ты условно предсказываешь то, что неизбежно должно произойти. В том числе из-за таких же ботов, как твой. Сейчас объясню, что я имею в виду. Допустим, гипотетически, у нас есть какой-то будущий отчет компании. Если ты человек, и ты торгуешь, то ты хочешь предположить, что там в отчете будет, и, соответственно, в зависимости от этого, купить или продать. Если ты пишешь бота, то ты, скорее, вот когда отчет уже вышел, у тебя есть несколько микросекунд, несколько миллисекунд, в которые цена еще не успела измениться, и ты в это время пытаешься быть первым.
-
Компании выкладывают эти отчеты в определенный день, все знают в какой. Но компьютер успеет его прочитать раньше, чем человек или что?
-
В случае с отчетами, да. Вот такие боты, кстати, тоже бывают. То есть они реально смотрят на новости, которые выходят, просто быстро оценивают негативные новости или позитивные, и, соответственно, делают сделку на бирже. Понятно, что на это нужно меньше времени боту, чем человеку. Собственно, за счет этого цена и меняется. Вот что я имел в виду, что когда вышла плохая новость, цена акций упадет, но она упадет же не просто биржа там рычаг нажмет, цена падает и цена упадет. Это она упадет, потому что люди будут много продавать и мало покупать. Сначала боты предскажут, что люди будут много продавать и мало покупать, и сами много продадут и мало купят. уже упадет.
-
Если ты знаешь какой отчет, то ты можешь как бы сказать вверх пойдет цена или вниз, но ты же не знаешь какой отчет.
-
Ты не знаешь, но ты смотришь на рынок и твой бот детектит такое поведение, которое похоже на то, что вышла новость отрицательная.
-
ты успеваешь залезть на эту волну чуть раньше, чем все остальные.
-
Да, но так делают наши боты, то есть наши боты не анализируют новости. Но бывают боты, опять-таки, которые непосредственно просто смотрят на текст новости, и, в принципе, это же не такая сложная задача по текущему развитию машинного обучения— понять, какой окрас у новости негативный или позитивный. И они прочитали новость условную и поняли, позитивная она или негативная. И сразу же, им одна миллисекунда потребовалась или меньше, они сразу же сделали сделку, и всё. А потом человек прочитал и сделал сделку через секунду. Но за это время уже все боты отреагировали. есть еще такой момент, что с новостями это такой, например, понятный, но он ограниченный. То есть новости бывают достаточно редко. Гораздо чаще бывают просто какие-то события. Ну, например, никакой новости нет, а просто какой-то чувак решил продать миллиард. И вот ты смотришь на рынок, и ты понимаешь, что раз чувак решил продать миллиард, наверное, сейчас цена-то упадет. По крайней мере, даже если это заявку он просто добавил в биржевой стакан, то ты все равно понимаешь, что раз она такая большая, наверное, цена наверх-то не упадет, потому что целый миллиард нужно. съесть. Наверное, она пойдет вниз. Ну, и исходя из этого, уже делаешь сделки, которые направлены вот в эту сторону.
-
Кайф. Можно не только размещать там заявки, но можно еще смотреть чужие заявки, да?
-
Да, да. Это ключевой момент, да. То есть ты основную информацию получаешь не из внешних источников, ты получаешь из того, что на бирже происходит. Все сделки всегда доступны, все заявки, как правило, доступны. Ты видишь, какие заявки сейчас есть, какие заявки были в прошлом, и ты, как правило, принимаешь решение именно исходя из этого, а не из каких-то внешних источников. Просто потому что внешние новости, там даже твиты Илона Маска, которые влияют на акции Tesla, они случаются, ну там, раз в квартал. Ты их будешь торговать очень редко. То есть, условно, если у тебя есть тысячи акций, то ты можешь анализировать ботом новости по каждой из них и, соответственно, прикидывать уже по ним конкретные сделки делать. Если у тебя одна, две, три акции, то реальные новости будут слишком редко, поэтому ты должен получать информацию откуда-то еще с биржи, в первую очередь. И мы вообще не смотрим на новости, то есть мы получаем информацию чисто просто о торгах с биржи. У нас когда-то была такая система, что на время, когда выходят реально значимые новости, типа годового отчёта, мы просто выключаем наших ботов, потому что это необычная ситуация, и там они плохо работают. Обычно это за минуту уже всё успокаивается. Через минуту ты можешь включать назад. Все, кто хотел, проанализировали новости. Боты сначала проанализировали, потом люди, потом самые медленные люди, потом те, кто пописался, тоже вернулись. торганули, и все, это закончилось через минуту уже полностью.
-
Окей, то есть если так очень кратко суммировать, что такое HFT, высокоскоростная торговля на бирже, то это анализ поведения других участников биржи с очень быстрым реагированием на то, что происходит на бирже прямо сейчас, что делают другие игроки. Очень быстро это в рамках сотен миллисекунд, то есть меньше секунды.
-
я хочу немножко поправить, что сама реакция, она, как правило, происходит гораздо быстрее, не сотни миллисекунд. То есть твой бот реагирует за микросекунды скорее, а через 100 миллисекунд ты уже можешь закрыть сделку. То есть твое предсказание сбудется, или оно не сбудется, если у тебя хороший бот, то оно там чаще сбывается, чем не сбывается. Соответственно, твое предсказание уже сбудется, и ты уже сможешь просто получить профит.
-
Супер. Получается, HFT – это штука, которая возможна только благодаря тому, что сделки делают роботы, а не люди. И вот про этих роботов я хочу немножко поговорить. На какие события, на какие движения алгоритм обращает внимание? То есть на что имеет смысл вообще обращать, а на что нет? Какие есть вообще входные данные? Просто сейчас в моей картине мира есть только вот открытые заявки. Что еще вообще существует на бирже?
-
Ну да, вот здесь я бы, наверное, хотел вот такую новую концепцию ввести— это арбитраж. На самом деле у тебя в мире не одна акция, и они более-менее друг от друга зависят, во-первых. Во-вторых, у тебя бывает такое, что просто один и тот же товар торгуется на разных биржах. Ну, опять-таки, здесь криптобиржа— самый простой пример. То есть у тебя есть один и тот же биткоин, и он торгуется на сотнях бирж. Понятно, что некоторые биржи реально ценообразующие условно, то есть они большие, крупные, на них гигантские объемы торгов, и на них приходят основные клиентосы и там что-то торгуют. А некоторые биржи ведомые, то есть цена на них меняется уже после того, как она сменилась на какой-то более ценообразующей бирже. Тебе нужно просто как можно скорее узнать информацию о первой бирже и зеркально сделать сделку на второй.
-
Даже внутри одной биржи, я так понимаю, заявок там типа миллионы создаются в минуты, если не в секунды. Ты анализируешь вообще все, что происходит, или есть какие-то ограниченные числа вещей, на которые ты смотришь?
-
Скорее ограниченное. Совсем все анализировать обычно бесполезно, потому что все же сигнал от того, насколько меняются акции Эппла на акции Газпрома, он влияние оказывает очень косвенное. То есть там прям вот должна очень сильно измениться акция Эппла, чтобы они повлияли на Газпром еще непонятно каким образом. Обычно ты анализируешь какие-то все же более связанные вещи. более связанные прям напрямую. Ну вот, допустим, самая торгуемая штука на российской бирже— это фьючерс на индекс РТС. Вот то, что мы вначале обсуждали. Есть индекс РТС, на него есть фьючерс, можно покупать, продавать. Соответственно, потом в конце посчитается реальное значение индекса, и будет рассчитано, кто сколько выиграл, кто сколько проиграл. Ну и понятно, что вот эта штука, фьючерс на индекс РТС, он влияет на другие акции, потому что, условно, РТС покупают и продают те, кто в целом хочет вложиться в экономику. Ну и какое-то влияние есть. Есть и обратное влияние. И ты можешь свою прогу как-то обучить тому, чтобы она вот эти влияния находила. То есть даже если мы возьмем там Сбербанк и Газпром, это уже не так будет значительно. У них скоррелированы, понятно, большие движения, но маленькие движения, на которых ты хочешь заработать, они не так скоррелированы, и поэтому нет смысла смотреть с одного на другое. Ты просто можешь случайно переобучить модель, она будет у тебя дольше обучаться, она заметит какие-то паттерны, которых на самом деле не существует, ну и, в общем, будет просто проблема.
-
На каких знаниях основываются эти боты? Есть какие-то математические штуки, которые что-то тебе могут предсказать по поведению небольшого количества заявок? Ты можешь предсказать следующее или что?
-
Они основаны на интуиции, которая подтверждена тестированием. Ну вот, например, допустим, мы думаем, давай попробуем такой алгоритм. Если за последние 100 миллисекунд произошло минимум 3 сделки, суммарный объем которых больше, чем 10 миллионов долларов, тогда мы тоже будем делать сделку в эту же сторону.
-
Потому что это делают какие-то умные богатые чуваки, и скорее всего они знают, что делают.
-
Да, типа того. Серьезно, что ли? Дальше следующий этап. Здесь мы подходим к очень важной штуке, которая называется бэктест. Мы с тобой придумали стратегию. Скорее всего, если мы ее запустим, она нихера зарабатывать не будет. Но как нам это проверить? Ну, казалось бы, давай просто напишем бот и запустим. Потеряем немножко денег. Да, потеряем немножко денег. Но тогда цикл разработки у нас будет очень длинный. То есть нам, чтобы понять, вообще, повезло, нам не повезло, может, день просто плохой был, и из-за этого стратегия не заработала. Как нам понять, зарабатывает ли она в среднем за месяц, сколько она зарабатывает за месяц? У нас с тобой единственный способ будет это просто месяц торговать вот этой стратегией, а потом понять. За месяц мы с тобой, ну, во-первых, просрём очень много денег. Во-вторых, мы с тобой никуда не продвинемся, кроме того, что мы поймем, что вот эта конкретная идея не работает. И здесь нам нужна возможность тестировать идеи быстрее, чем просто запускать их на биржи и смотреть, зарабатывают ли они. Для этого в индустрии есть такое слово «бэктест». Собственно, как можно понять по названию, это просто штука, которая на исторических данных симулирует, что было бы, если бы твоя стратегия торговала. то есть, что бы она видела, как часто она бы видела вот эти три последовательные сделки за 100 последних миллисекунд, по каким ценам она бы сама совершала сделки. И в конце она тебе просто печатает прямо число, результат.
-
Типа, сколько бы ты заработал или сколько бы ты потерял?
-
Ну да, желательно, чтобы заработал, да, желательно, чтобы число было положительное.
-
Вот ты сейчас высказал такую солид, типа, хорошее, качественное, мне кажется, предположение, что если три больших сделки произошло в короткое окно времени, значит, это какие-то умные дяденьки большими деньгами ворочают, давайте мы им сядем на хвост. Сколько еще таких идей ты знаешь? Сколько ты их придумываешь в неделю? Их таких идей 10, 100 или тысяча?
-
Такого рода идей тысячи, но они в основном работают плоховато. По самой форме идей, что здесь есть какие-то параметры, 3 сделки объемом 10 миллионов долларов за последние 100 миллисекунд, можно догадаться, что все эти параметры хочется подбирать машинным обучением. И дальше твои задача как-то машинное обучение организовать. Машинное обучение организовать непросто. То есть, что предсказывать, в общем-то, не совсем понятно. Потому что, если ты будешь предсказывать напрямую цену, ну, как правило, тебя ждет просто фейл. То есть, по нашему опыту это так.
-
В смысле, алгоритм машинного обучения не должен пытаться максимизировать цену акции?
-
Ну, не должен пытаться предсказать просто цену акции.
-
Окей. А что он должен предсказать?
-
Что-нибудь еще.
-
Например? Я просто не знаю, какие еще параметры есть.
-
Ну, например, он может предсказывать типа объёмы торгов просто в ближайшие секунды, и в зависимости от этого там переключать какие-то режимы. То есть у тебя, допустим, если очень часто идут сделки, то тебе нужно как-нибудь по-другому себя вести. случае, у тебя есть, собственно, наш базовый самый тупой алгоритм, где ты продаешь всегда по 100.01 и покупаешь всегда по 99.99. И вдруг он понимает, что цена вот-вот изменится. Он даже не знает, в какую сторону, даже этого еще не знает, не предсказывает, в какую сторону. Он просто понимает, что торгов будет много, ну, наверное, цена изменится, и он просто перестает это делать, перестает продавать, ждет, пока рынок снова успокоится. Вот самое простое. Ты, условно, не используешь машинное обучение как такой гигантский мозг, в который у тебя электроды впаяны, и он просто сам там продает и покупает. Ты используешь машинное обучение как компонентный алгоритм. Где-нибудь ты видишь... Вот, допустим, мы с тобой придумали вот эту идею, но параметры для нее мы могли бы найти каким-нибудь алгоритмом машинного обучения.
-
Вот у тебя есть эта машинка по проверке гипотез. А сколько гипотез ты в нее запихиваешь, там, в день, не знаю, в месяц?
-
Я хочу сразу сказать, что я вообще занимаюсь именно инфраструктурной частью. У нас есть я, который занимается инфраструктурной частью. Это просто дисклеймер, чтобы было понятно. И есть Саша, который занимается ресёрчем. И эти гипотезы запихивают Саша и его товарищи. По количеству Ну, это могут быть десятки в день. Как правило, если у тебя есть какие-то однотипные гипотезы, вот, например, о взаимосвязях разных вот этих финансовых инструментов, разных акций, то ты хочешь их более автоматизированно проверять. И здесь ты уже пишешь какую-то систему, которая будет за тебя это делать.
-
корреляции, пары, которые связаны.
-
Да, искать эти корреляции. То есть вообще очень важно автоматизировать, конечно. Но так вообще десятки в день, если ты начинаешь, то есть у тебя еще непонятно, что вообще может работать, то тогда на начальном этапе это у нас были и сотни в день, вот так вот. Ты проверяешь очень много разных гипотез, потом уже понимаешь, какого вида гипотезы в принципе работают, начинаешь над этим строить систему. Например, придумываешь, как тебе встроить туда машинное обучение, чтобы конкретные там какие-то параметры или конкретные, ну, условно, оракулы были не просто написаны тобой, Ифом, в коде, а были... ну, что-то там, что-то где-то обучалось. У нас есть вот целый отдел, который этим занимается.
-
Слушай, а эти люди, они кто? Это люди с математических факультетов или с экономических факультетов?
-
С математических. в HFT вообще. Оно тебе помогает понимать, что именно ты торгуешь, но это никак не скоррелировано с пониманием того, как нужно это торговать. Даже если ты понимаешь, что конкретно там значит кредитный дефолтный своп, то ты нам не подходишь.
-
А как они это делают? Я пришел, у меня рабочий день. Есть какой-то бесконечно большой поток данных с десятков бирж. Что я делаю? Типа я вот реально думаю, блин, наверное, надо посмотреть, что делают большие дядьки. Как понять, что делают большие дядьки? Нужно найти окно, нужно взять минимальный размер торга. Как это устроено?
-
В простейшем случае примерно так. Сначала у тебя есть просто какие-то тупые гипотезы, и ты думаешь, как их проверить. Здесь есть такой момент, что большая часть простых тупых гипотез, она оказывается просто неверной. И ты можешь немножечко демотивироваться. Но вот здесь нужен особый склад ума, чтобы ты все же как-то систематически... Во-первых, очень важно ввести журнал исследований, то есть очень четко понимать, что конкретно ты уже пробовал, что конкретно ты не пробовал, где, какие результаты ты получил. Потом ты, соответственно, то, что у тебя получилось, то, что сработало хорошо, даже не обязательно прямо заработал, то есть не обязательно ты прямо сделал стратегию, которая уже прямо торгует и зарабатывает, ты можешь просто по каким-то еще косвенным признакам понять. Ну, например, ты можешь понять, что... можешь написать просто алгоритм, который смотрит, вот, видит три сделки, и за ней всегда следует действительно четвертое, или действительно следует уменьшение цены. Ты это понял? Ты протестил, что это действительно происходит в 70% случаев, но вот со всем вот алгоритм, который зарабатывает, ты еще пока не готов написать. Но ты уже это понял, и ты можешь как-то это встроить в другой алгоритм, дописать еще какое-нибудь условие, например, три сделки, но только если не было такого, что за последнюю секунду объём миллиард долларов, потому что если за последнюю секунду миллиард долларов, то там вообще чёрт знает, что происходит, и смотреть на это вообще бессмысленно, дописываешь ещё какой-то иф. То есть здесь, с одной стороны, нужно делать много итераций, а с другой стороны, у тебя просто в каждой итерации есть много попыток, из которых 10 неудачные, одна удачная. Что касается того, какие вообще это люди, ну вот это люди с особым складом ума, что ли, которые могут систематично ошибаться. Да-да. По сути, чтобы тебе стратегию придумать, тебе нужно сделать научное открытие. Что-то сродни научному открытию. Потому что если твоя стратегия зарабатывает, то это значит, что остальные чуваки на бирже, они до этого как-то не додумались. Потому что если все будут делать одно и то же, то зарабатывать, ну, очевидно, никто не будет. Денег же не бесконечно проигрывается, они как-то между себя делятся. То есть тебе нужно не просто что-то понять, а тебе нужно что-то понять, что еще никто не понял. И это вот такой особый научный склад ума. У меня, наверное, его нет, но вот у нас есть ребята, у которых он есть. Ну, например, вот можем так делать. Можно просто прям посмотреть на биржевой стакан в микромасштабе, условно, прям вот прокрутить его, за секунду посмотреть, и примерно прикинуть, что там происходит. И, например, смотря на него, ты можешь сформулировать вот как раз такую гипотезу, то, что вот я видел там, что три сделки, значит, будет четвертая, условно. Потому что ты просто увидел такой момент, увидел, что произошло три сделки, и дальше была четвёртая, и у тебя родилась такая гипотеза.
-
Офигеть. То есть реально глазами увидел. Окей.
-
Да. Понятно, что большая часть таких гипотез будет просто неверной. Даже если она будет верна в смысле, что да, потом будет четвёртая, она будет неверна, в смысле, что если ты вот такую стратегию в таком виде запустишь, то она будет сразу же зарабатывать. Можно как-то пытаться сразу в макромасштабе анализировать, то есть ты смотришь на макроуровень и что-то там пытаешься понять, Но обычно такое вот совсем сразу смотреть на макроуровень, обычно это работает гораздо хуже, потому что все же твоя стратегия, она смотрит на сейчас и на последние 100 миллисекунд в лучшем случае. То есть она очень локальная, и поэтому ты должен, чтобы эти гипотезы генерировать, ты должен тоже опуститься вот прям на микроуровень и посмотреть, что там происходит.
-
Слушай, а о каком количестве событий вообще идет речь? Вот за 100 миллисекунд сколько заявок прилетает на биржу?
-
Ну смотри, за день может происходить 100 миллионов миллиард заявок. То есть это не супермного, не невероятно много, это может обработать один компьютер за достаточно короткое время, но это всё же немало.
-
То есть за день миллиард заявок?
-
Ну да.
-
Это значит в час у нас получается 41 миллион событий в час. Это 600 тысяч событий в минуту. Это 11 тысяч событий в секунду. Офигеть. Это довольно много, мне кажется. А в 100 миллисекунд это получается тысяча событий. А вот это уже менеджабл. Тысячу событий можно посмотреть.
-
Да. Вот миллиард— это прям сверху. То есть это прям вот когда прям какой-то очень активный инструмент.
-
Вот.
-
Ну вот скорее ближе к 100 миллионам, то есть скорее 100 событий в 100 миллисекунд. Вот это ближе. Одно событие в миллисекунду— вот это вот та цифра, с которой ты обычно работаешь. И, соответственно, ты можешь как-то глазами что-то поймать. Да, обычно ты идёшь с микроуровня как бы наверх. То есть ты на микроуровне формулируешь какую-то гипотезу, а дальше на макроуровне уже пытаешься прикинуть, как бы она работала. Вот так вот.
-
Окей. Мы сейчас с тобой подробно довольно разговаривали про то, как устроен один алгоритм, и про то, что нужна машиновое производство алгоритмов. А как в результате? Вот сколько алгоритмов в один момент времени активно на бирже работают? Это типа вы придумали вот один классный, и его пасете? Или у тебя сразу стадо там из 100 алгоритмов? Или это вообще рой из тысячи?
-
У разных фондов по-разному. У нас были времена, когда у нас был просто один алгоритм, когда мы начинали. То есть один алгоритм, он уже может тебе обеспечивать, тебе платить зарплату. Но если у тебя один алгоритм, то, скорее всего, ты не сможешь, ну, совсем уж стать богачом. Чтобы тебе как бы развиваться, тебе нужны много бирж, все же, и много алгоритмов. Речь не идет, наверное, о десятках тысяч, может, 100 нормального числа. То есть 100 алгоритмов, 100 разных инструментов, которые ты торгуешь. Это, в принципе, менеджабл.
-
Вот ты придумал какой-то алгоритм. Он умеет из доллара делать один доллар и один цент, например, или какой-то процент зарабатывать. В него можно вложить бесконечное количество денег или у любого алгоритма есть какая-то максимальная емкость денег, в которую у него можно вложить?
-
Да, абсолютно точно есть. Даже в HFT и заработки в процентах, потому что обычно ты даешь алгоритму столько денег, сколько он максимум может съесть. То есть если ты дашь ему больше денег, то он уже не будет просто больше зарабатывать. связано с тем, что в стакане у тебя ограниченные объемы, вот так вот.
-
А, ты рассмотришь такие маленькие промежутки времени, что, условно, бесконечная биржа в очень короткий промежуток времени, она довольно конечная, она очень маленькая. Количество людей, которые в такой период времени хотят что-нибудь продать или купить, оно маленькое.
-
Ну да, да. То есть у тебя, условно, слипач даже на 0,001, то, что называется проскальзывание, да?
-
Что такое проскальзывание?
-
Ну вот когда ты покупаешь большой объем, у тебя цена на бирже немножко меняется против тебя. То есть если ты купишь миллиард долларов просто мгновенно, то у тебя мгновенно доллар станет дороже в момент покупки. Это происходит физически на бирже именно таким способом, что ты вот отправил заявку в стакан, допустим, на миллиард долларов. И там были люди, которые хотят продать доллар по 55, но их же ограниченное количество, и ты их всех съешь просто.
-
Сначала всех съешь, потом купишь что-то дороже, еще дороже, еще дороже, а под конец уже вообще будет жесть.
-
Да, да, да. И это называется проскальзывание. в HFT-алгоритмах, так как даже минимальная возможная разница цен уже имеет значение, проскальзывание должно быть просто ноль. То есть ты не можешь допустить проскальзывание даже на одну минимальную единицу цены, на одну копейку, потому что у тебя уже изменится результат. А количество людей, которые вот непосредственно по самой-самой лучшей цене хотят продавать или покупать, ну это просто какой-то конечный объём. Ну как правило, ты просто даёшь алгоритму столько денег, чтобы он делал вот всё это, всё это скупал или там всё это продавал, если он понимал, что какая-то цена невыгодна.
-
О каких объёмах идёт речь? Ну типа тысячи долларов, сотни тысяч?
-
Одна сделка, ну, может быть, несколько сотен тысяч долларов, да. Но заработок, он не вычисляется ни из оборота, ни из объёма сделки, ну, по крайней мере, не вычисляется напрямую вот так вот просто. Понятно почему. Потому что если даже ты там сто тысяч долларов или миллион долларов купил по какой-то цене, а продал всего лишь на одну сотую долю копейки дороже, то ты не так уж и много заработал.
-
А сколько обычно один алгоритм зарабатывает? Типа, что значит хороший алгоритм, что значит средний алгоритм, и что плохой?
-
У нас это менялось понимание с течением времени, потому что понятно, что когда ты зарабатываешь мало, для тебя, в принципе, любой алгоритм хороший. Когда ты много зарабатываешь... Ну, я бы сказал так, это в первую очередь зависит от твоей инфраструктуры, сколько ты готов менеджировать алгоритмов. То есть алгоритм, который систематически проигрывает, ты запускать не будешь в любом случае.
-
Это понятно.
-
Вот. А вот, допустим, у тебя есть алгоритм, который зарабатывает 10 долларов в день. Ну, готов ли ты его запускать? Ну, казалось бы, ну что, запустил, если сервер стоит меньше 10 долларов.
-
Бесплатные деньги, типа.
-
Да, бесплатные деньги. Но на самом деле здесь вот есть уже такой сложный эксплуатационный момент. Как правило, алгоритмы там могут ломаться, могут, ну, что-то там с ними происходить. У тебя просто программа упала, просто вот segfault, segmentation fault, и ты думаешь, ну, интересно.
-
А, ты своё время всё равно тратишь.
-
Да, да. То есть ты тратишь достаточно большое количество времени. Ну, не то, что прям на каждый алгоритм, но на каждую биржу ты тратишь достаточно большое количество времени. И это неизбежно. И поэтому у тебя в каждый момент есть какая-то условно сумма денег, которая начинает не покрывать косты. Ну, я бы сказал, что в целом, если у тебя алгоритм зарабатывает 100 долларов в день, при хорошей инфраструктуре уже можно запускать. И тогда, если ты будешь вот вообще вот так вот жестко, то есть 100 долларов в день, все запускаем, ну тогда, наверное, тебе нужно научиться менеджить прям вот тысячи и десятки тысяч алгоритмов.
-
А, ты можешь либо строить более мощную инфраструктуру, более автоматизированную, либо делать более крутые алгоритмы. И тогда всего несколько алгоритмов, но зато они очень сильные.
-
Ну или, например, если ты еще не построил суперкрутую автоматизированную инфраструктуру, то ты можешь просто не запускать алгоритмы, которые маловато зарабатывают. То есть ты запускаешь самые крутые, а те, которые зарабатывают меньше, ты их уже не запускаешь, ну просто потому что не хочешь тратить свое время.
-
Очень хочу узнать про то, кто программирует эти алгоритмы. Тот, кто их придумал? Или есть разделение труда, что есть вот ресерч, а есть программист?
-
смотри, в разных фондах это устроено по-разному, и здесь это завязано вот на чем, на том, что у тебя в этом бизнесе нет вообще никакой собственности, кроме как, собственно, твоя программа. То есть если у тебя украдут программу, если твой даже сотрудник украдет у тебя программу, он просто ее запустит, ну и все, и будет зарабатывать столько же, сколько ты. Поэтому алгоритмы, они держатся в основном в секрете.
-
Как в секрете, у тебя же ресерчеры твои, они типа придумали этот алгоритм, они-то его знают.
-
Ну вот, да. То есть тот, кто придумал, он его знает в любом случае. Или та группа, которая придумала, она его знает в любом случае, это неизбежно. Как правило, инженеры, которые работают над торговой системой, над инфраструктурой, они не знают алгоритмы. То есть они не знают, что конкретно они запускают.
-
Господи, у тебя есть инженеры, которые умеют запускать, но они не знают алгоритмы, есть ученые, которые знают алгоритмы, но не умеют это запускать, потому что все равно нужна инфраструктура.
-
Ну да. Понятно, что это все сходится в определенный момент, и в определенный момент у тебя просто есть сервер, на котором эта программа запущена. Иначе невозможно. У тебя все же есть какое-то место, где запущена программа, где есть и торговая система, и алгоритм. И вопрос, как это менеджировать, чтобы sysadmin
-
не стащил это все.
-
На текущий момент я хорошего решения не знаю, я просто сам занимаюсь всей этой эксплуатационной темой. Я и партнеры другие. То есть партнеры у нас имеют доступ ко всему, и когда что-то падает, мы сами чиним. Это очень приятно, конечно, для наших сотрудников, потому что никто никогда не разбудит их посреди ночи, и никто не скажет, вот сломалось, нужно починить, такого не будет. Но это может быть немножко неприятно для нас, потому что реально можешь сломаться ночью, и если ты не починишь, то ты просто не будешь торговать, не заработаешь. Еще бывает такое, что биржа, допустим, делает тебе скидку за то, что ты много на ней торгуешь, а если у тебя прога упала, то ты не поторговал.
-
И ты скидку еще не получил.
-
И обязательства свои не выполнил, да, и можешь скидку не получить. И тебе очень важно, короче, чтобы программа в любом случае работала. А если вдруг она не работает, то тебе нужно, как правило, все же до начала рабочего дня ты можешь подождать, но подождать просто потому, что там у тебя как в BaseComp итерации две недели, и типа потом починю. Обычно ты так все же не можешь. То есть обычно, если у тебя в проде прям что-то сломалось, ну, собственно, как и в любой, наверное, компании, но здесь вот есть такая особенность, что в проде чуть ли не сами владельцы. На самом деле здесь есть тонкий момент, то есть как тебе организовать коллаборацию над алгоритмом? То есть вот у тебя есть какой-то алгоритм, он сложный, в нем есть разные части, ну, допустим, разные куски просто машинного обучения, но тебе все же одному не хочется все это делать, но просто приглашать чувака и ему рассказывать алгоритм... Все, типа,
-
и ему сказать: добавь что-нибудь.
-
Да, да. И поэтому тебе приходится, ну, как-то декомпозировать уже на другом уровне. То есть тебе приходится, ну, выделить, допустим, какую-нибудь конкретную задачу, условно, по машинному обучению, и сказать, вот задача, вот там, Kaggle-формат, или что-то, в общем, придумать.
-
Kaggle-соревнование То есть ты ему говоришь, типа, вот такая-то задача, но как она там связана с остальными частями, ты ему не рассказываешь?
-
Ну да, то есть ты примерно так делаешь. И у нас есть и такие команды, то есть у нас есть и ресерчеры, которые полностью сами придумали стратегию. Но этот путь достаточно тяжелый по тем как раз причинам, по которым я говорил, потому что там нужно слишком много сделать научное открытие, по сути, и пройти его одному тяжело. У нас есть и команды, которые просто оптимизируют какую-то часть уже существующего алгоритма. И у них нет доступа ко всему алгоритму, у них есть доступ только к своей части. Ну, я бы сказал, что главная стена вот стоит между двумя отделами. То есть программисты не получают доступ к стратегиям, ресерчеры не получают доступ к самой торговой системе, которая может эти стратегии запускать. Ну и вообще к инфраструктуре. Ресерчеры не имеют доступа вообще к инфраструктуре, они получают просто данные в каком-то формате четком.
-
Офигеть. Вообще, получается, ты организуешь работу научной лаборатории, по сути, или научной группы.
-
Это делаю не я, это делает мой партнер, но моя компания это занимается.
-
Офигеть. Теперь про баги хочу спросить, потому что в любом софте есть баги. У вас бывали в софте баги?
-
Безусловно. И когда я только начинал, я очень боялся багов, все там супер тщательно проверял. Потом оказалось, что обычно, когда у тебя торгуют программы с багом, она просто чуть меньше зарабатывает, а нет такого, что она сразу про**бает вообще все. Как правило, оказывалось так. И поэтому я стал бояться меньше. Ну и в целом действительно так, что когда у тебя что-то там неправильно написано, обычно просто алгоритм работает не совсем правильно и типа не зарабатывает, ну и ты начинаешь разбираться почему. То есть катастрофы не происходят. Но вообще катастрофические истории бывали у разных-разных компаний, и у нас тоже бывали. То есть для меня это выглядит условно так. Мы там писали тестовую специально супербыструю для отдельной биржи вообще, не соединенную с основной, торговую платформу, и вот что-то я ее там захотел подебажить, скопировал туда на сервак, который в дата-центре биржи, потому что ты торгуешь всегда с серваков, которые в дата-центре. И вот я ее в консоли SSH запускаю, и что-то она ничего не пишет. Я думаю, ну, интересно, когда же логи не пишутся. Странно. Нажимаю Ctrl-C. Оказывается, она за эти две секунды там продала очень много, потому что она в цикле просто продавала, и там даже управление не передавалось той корутине, которая должна логировать.
-
О, господи!
-
Ну, мы там что-то по***ли, да. Ну, несколько миллионов рублей, наверное, по***ли.
-
за 2 секунды.
-
Ну, бывает такое, да. Опять-таки, это, наверное, единственный случай, где мы в таком формате, что за несколько секунд. Обычно баги тебе вредят по-другому. Обычно баги— это просто что-то, что ты не замечаешь, и стратегия в целом торгует примерно так, как надо, Но, допустим, ей просто не совсем правильные данные поставляются. То есть у тебя вот смотрится на объем сделки за эти три сделки вот в нашем тестовом алгоритме, да, и там у них объемы просто в 10 раз уменьшены. Ну почему-то, что-то не учел вот из-за бага. Соответственно, да, программа иногда торгует, иногда там же бывает и не 10 миллионов, а 100. Иногда она правильно торгует, ты смотришь, ну вроде правильно, но зарабатывает она гораздо меньше. И на самом деле настоящие твои враги— это не те баги, которые за секунду весь твой счет опустошат, потому что их просто очень мало. Это те баги, которые систематически каждый день у тебя откусывают профит.
-
Ты говорил про то, что у вас есть отдельная торговая платформа. Что это такое?
-
Ну, условно, у тебя как вообще все запускается? Так как у тебя скорости должны быть супермаленькие, у тебя система вообще торгов, она не может быть распределенной. То есть там нет никаких... Микросервисов. никакой Kafka там нет. Там просто у тебя одна прога, она торгует на одном конкретном сервере. получает данные и отсылает заявку в ответ, ну если хочет. Понятно, что у тебя все это как-то менеджит, то есть у тебя там есть диплой, у тебя есть что-то, что запускает на разных серверах проги, но это все внешнее по отношению непосредственно к алгоритму. А торговая система— это, по сути, такая прога, которая торговому алгоритму предоставляет высокоуровневое C-шное API, C++, то есть ресерчер у себя там написал торговый алгоритм, он написал его на плюсах, в итоге мы его вкомпиливаем просто в нашу прогу, и там дергаются правильные функции и возвращают то, что ресерчер ожидает, и в том числе там есть функция, допустим, createOrder, которая, собственно, заявку отслает на биржу, или там функция получить объем ордеров сделок.
-
Ну, то есть, чтобы ресерчеру не надо было там по сети что-то гонять. Он просто говорит, типа, сделай мне заявку.
-
Да-да-да. То есть, обычно по сети у тебя данные там приходят в каком-нибудь очень сложном формате, типа вот этого фикса. Вот. И нам нужно все это распарсить, все это организовать там в какой-то order book и предоставить ресерчеру достаточно высокоуровневой API. Но при этом, конечно, быстро. То есть, куча есть оптимизаций, которые не на уровне алгоритма, как правило, оптимизации, а именно на уровне торговой системы.
-
Ты говорил, что наш сервер располагается в дата-центре Это довольно необычно. Я обычно, знаешь, запросы в API по интернету отправляю. А у вас там какая-то такая жесть. Почему?
-
Потому что если ты будешь отправлять запросы через интернет, то у тебя в лучшем случае задержка будет 5 миллисекунд. Когда у тебя сервер стоит в центре, у него оптоволокновый провод идет из твоего сервера в свитч-биржу напрямую, и сетевая задержка может быть несколько десятков наносекунд.
-
Окей.
-
То есть понятно, что гораздо быстрее. И через интернет ты не можешь торговать, потому что твои конкуренты все же стоят в соседних стойках.
-
То есть все HFT-трейдеры тоже как бы так же подключены.
-
Да, да. То есть это единственный разумный способ, это просто встать в тот же самый дата-центр. Для классических бирж у них просто на сайте ты можешь найти прямо услугу, вот там, к локации, и поставить свой сервер туда. Для крипто-бирж там сложнее, но, как правило, тебе все равно неизбежно нужно попасть в тот же самый дата-центр и еще внутри дата-центра попасть как-то поближе к ядру крипто-биржи, вот так вот. Потому что это действительно приносит деньги. То есть, если твои заявки будут приходить на биржу позже, чем других чуваков, которые выгодные сделки успели сделать, а твои заявки просто будут не успевать.
-
Оставаться висеть в стакане.
-
Да, оставаться висеть в стакане, то тогда ты ничего не заработаешь.
-
Окей. Вот значит, вы все сидите в том же самом дата-центре, что и биржа, подключены проводами прямо напрямую чуть ли не в сервер, но как минимум в тот же самый свитч. Что дальше? Какие приемы вы применяете для того, чтобы быть быстрее, чем другие HFT-трейдеры?
-
Тут есть две категории оптимизации. Есть категория оптимизации внутренней, что ты, собственно, со своим алгоритмом можешь сделать, чтобы он быстрее работал. То есть быстрее парсить данные, например.
-
Ну, для людей вне программирования, я должен сказать, это черная магия. Это нормальные люди таким не занимаются. У тебя пришли данные, ты их распарсил как бы. Ну, как-то распарсились, что с ними? А ты это как-то оптимизируешь. Серьезно, что ли?
-
Да, ты можешь оптимизировать то, каким образом... Ну, у тебя есть, условно, пакет с данными. Ты примерно знаешь... Ну, самое простое, например, вот представим, что там не фикс, а JSON было бы. Джессон тебе приходит примерно одинаковый, и у него поля примерно одинаковые. Там куча полей, которые тебе не нужны. А ты примерно знаешь, где в Джессоне лежат те поля, которые тебе все же нужны. И ты просто прям в массиве байт вот смотришь конкретно на то место сразу, понимаешь, если ты угадал, угадал, не угадал, и, соответственно, партишь оттуда. Естественно, это будет быстрее.
-
Это будет на порядке быстрее, но это прям реально так... Это очень круто.
-
Ну да, но я на самом деле хочу рассказать вот про что. Про... Есть оптимизации аппаратные. То есть ты можешь, допустим, поставить в дат-центр не совсем сервер, а там сервер с FPGA, и у тебя даже не будет заходить условно данные, которые пришли от биржи, они не попадут в оперативную память твоего сервака, они там прямо на плате распарсятся, и прямо на плате пошлется ответ.
-
Слушай, я должен пояснить, FPGA это программируемая плата, то есть это штука, в которую можно программно зашить конфигурацию того, как она работает. Это специальный процессор, это используется, например, на этих, на боеголовках, не на боеголовках, а в ракетах, которые, типа военные ракеты. Им нужно очень быстро считать курс. Поняли, что радар им ответил, им очень быстро нужно скорректировать курс. Обычно процессор это сделать не успеет. И для этого используется FPGA. И вы используете такую же технологию, чтобы быстро отвечать на запросы в бирже?
-
Ну да. То есть в индустрии это очень распространено. Другое дело, что как бы туда, на плату, ты суперсложные алгоритмы не загонишь, на самом деле. То есть ты не сможешь организовать там, чтобы нормально работала машина обучения, ты даже не сможешь организовать, ну толком ты не сможешь даже построение стакана организовать. И поэтому здесь у тебя получается такая шкала, условно, алгоритмы вообще мегабыстрые, но зато очень тупые. Алгоритмы мегабыстрые. квинтэссенция, это когда алгоритм просто смотрит на размер пакета.
-
Сетевого пакета у тебя пришел.
-
Да, то есть он понимает, что пакет большой, наверное, начался движ. Ну, откуда-нибудь еще он может заранее в медленном режиме догадаться, в какую сторону движ должен начаться, и сразу же отправить заявку, самое тупое.
-
Офигеть! И это практически физический предел скорости. Типа быстрее уже, блядь, что-то можно сделать.
-
Ну да, да, да. И это вот то, что касается аппаратных оптимизаций. Там в арбитраже, например, у тебя может быть такое, что ты хочешь просто более быстрый канал получить. Допустим, ты можешь... Вот есть какие-нибудь вышки от одной биржи до другой. Вот они стоят, и по ним там передается сигнал. А ты возьмешь и гору распилишь. Вот это реальный кейс. Это не мы делали, но какой-то американский фонд, в общем, он распилил прям гору. И там проложил кабель, который быстрее просто.
-
Он короче.
-
Идет не в обход, а вот напрямую. И быстрее просто получал инфу. Но на самом деле, самые интересные обычные оптимизации— это не вот такие вот, а оптимизации типа внешней. То есть у тебя биржа— это же тоже сервис, да? И ты можешь попытаться понять, как она устроена, и условно ее взломать. Таким образом, ну, импакт у тебя в данном случае— это просто более быстрая обработка заявок.
-
Ну, например.
-
Ну, самый тупой пример. Биржа поддерживает несколько протоколов. разных. И ты можешь их сравнить и понять, какой из них быстрее. Это простой пример. Обычно в этом случае биржа просто заранее пишет, какой быстрее. Но у тебя может быть такое, что на бирже несколько серверов поддерживает один и тот же протокол.
-
Я себе могу предположить, что, например, биржа может поддерживать IPv4 и IPv6, и IPv6, например, будет быстрее, потому что там меньше клиентов или еще что-нибудь такое.
-
Ну что-нибудь такое. Но, например, она может поддерживать старые версии не IP, а API. Она может поддерживать другие версии API старые. И, допустим, у тебя кажется, что просто старые версии API быстрее. Ну, например, потому что меньше клиентов.
-
Офигеть. Просто обычно, когда выходит новая версия API, ты говоришь, все, зашибись, значит, можешь типа получше чем пользоваться. А тут ты говоришь, давайте мне старую, если она быстрее.
-
Конечно, да. То есть это типичная ситуация, что ты используешь какие-то более неудобные протоколы, потому что они просто быстрее.
-
А ты не задедосишь биржу? Там есть какие-то ограничения на скорость запросов, например, на количество запросов?
-
Ну, обычно у биржи, конечно, есть ограничения, да, то есть у них есть рейт-лимиты, но так как ты на бирже обычно торгуешь неанонимно, ты не можешь там просто задедость ее из инета, так что у биржи есть какой-то рейт-лимитинг. Ну, опять-таки, тут я уже говорил, что в целом объем заявок, он не супергигантский, то есть он большой, но все же миллиард заявок в день, ну, 100 миллионов или даже миллиард заявок в день, Это не те объемы, которые ты не можешь обработать. Так что совсем задидосить ты ее не сможешь, в общем. Но в моменты загрузки биржа безусловно тормозит. Это вот прям факт. Например, когда начинается день, и там все реагируют на новости, которые произошли, пока биржа была закрыта, или просто что-то случилось, и произошел момент загрузки, куча людей одновременно решили торгануть, какие-то заявки сделать. В это время биржа начинает тормозить.
-
куда развивается HFT дальше?
-
Есть несколько направлений. Есть вот эти, соответственно, тупые и быстрые алгоритмы, они становятся быстрее и остаются тоже тупыми. Более сложные алгоритмы, я бы сказал, что есть тренд на машинное обучение. И какие-то элементы, которые раньше даже в обычном мире, условно, за пределами HFT освоены были давным-давно, условно, какая-нибудь простая нейросеть, раньше в HFT этого не было, а теперь вот это реально применяется. Да, здесь мы, наверное, отстаем, deep learning, reinforcement learning не получается применить там полноценно, но вот есть такой тренд, наверное. Что там будет дальше? Ну, это сложно сказать. То есть есть регуляторы, которым почему-то не нравится HFT, есть, наоборот, регуляторы, которым нравится. Есть биржи, которым не нравится HFT, которые специально вставляют задержки случайные после каждой заявки. А есть биржи, нравятся HFT-шники, потому что они им деньги приносят в качестве комиссии, и они там улучшают свои протоколы, и все быстрее становится. Так что я бы... Может, я его просто не чувствую со своего места, но я бы не сказал, что есть какой-то прям однозначный тренд.
-
А как к вам относятся обычные трейдеры?
-
Да я думаю, что они не смотрят на рынок с точки зрения конкретных участников, они смотрят на него в целом. Они думают, что цена пойдет или отскочит сейчас, и вот на них мы и зарабатываем в таких ситуациях. Вот. А регуляторы... Ну, тут есть такой момент, что вот, как я уже сказал, есть машинное обучение, да? И машинное обучение... невозможно понять, почему оно сделало ту или иную сделку. И, соответственно, ты как бы не можешь нести ответственность за то, что у тебя алгоритм там что-то сделал. А вдруг ты большой банк, вдруг алгоритм сделал огромную сделку и уронил рынок, и там для регулятора это большая проблема. У него там, я не знаю, рубль упал, доллар упал, какая-нибудь иена упала. А ты даже не можешь объяснить, почему это произошло. У тебя просто вот алгоритм такое значение выдал. У тебя все права есть на то, чтобы его запускать, все честно.
-
А по башке дать некому.
-
Ну да, и регулятор может такое не любить. Есть регуляторы, есть структуры условно. Если ты определенного вида финансовой организации, то ты не можешь использовать машинное обучение, потому что ты должен про каждую сделку мочь отчитаться, почему ты именно так сделал, объяснить. Такое бывает. То есть в основном, конечно, для бирж HTC трейдера полезны, потому что они создают там объем, но и самое важное, они создают ликвидность. То есть кто-то же должен, вот если цена 100, то кто-то же должен продавать по 100.01 и покупать по 99.99. И вот это, как правило, HTC трейдеры, это маркетмейкеры, что называется.
-
Я могу у себя дома придумать классный алгоритм, запустить его и заработать кучу денег? Или тут нужны какие-то большие капиталы для того, чтобы начать торговать?
-
Как в любом стартапе, нужно либо капитал, либо время. Я могу сказать, что наш стартап примерно так начинался. То есть, нас было двое, у нас было денег не очень много, но мы там начали вот, условно, дома придумывать торговые алгоритмы, потом научились их запускать. Но в целом, конечно, порог входа. То есть, ну, во-первых, как я уже говорил, просто придумать с нуля торговый алгоритм— это прям вот очень сложная задача. Если у тебя нету... Ну, тебе никто не платит зарплату, у тебя нету там каких-то накоплений, то тебе просто тяжело это будет сделать. я бы сказал, что, чтобы придумать торговый алгоритм, нужно минимум полгода попыток.
-
Офигеть!
-
То есть, если с нуля прям начинать, и за полгода у тебя получится, то это просто очень круто, вот так вот. Это вот рекордно, прям рекордные сроки, скорее, дольше. Ну, а капиталы здесь полезны, опять-таки, потому что торговый алгоритм, он, конечно, не может бесконечное количество денег взять и бесконечное количество денег удваивать, утраивать. у него есть какой-то фиксированный объем денег, которым он может торговать, а дальше увеличивается бесполезно. Но этот объем, он все же не очень маленький. То есть тебе все же нужны для того, чтобы торговать какие-то деньги. Особенно если ты хочешь торговать много всего, тебе нужно как-то деньги распределить. В целом деньги, получается, не бесполезны.
-
Кайф. Эмиль, спасибо тебе огромное, что пришел. Это был дико интересный разговор.
-
Спасибо.
-
Это подкаст студии Либо-Либо, и мы его сделали вместе с сервисом онлайн-образования Яндекс Практикум. Над подкастом работали редакторка Маша Агличева, продюсерка Настя Медведева, звукорежиссерка Нина Мамотина. За джингл спасибо Алексею Зеленскому.