Как Не Дать Алгоритму Продать Банк

Привет, Хабр! Наша команда в Москве занимается разработкой внутренней алгоритмической торговой платформы.

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

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

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

Это особенно важно в финансовом секторе, где мы работаем.

Три года назад все слышали историю о Knight Capital Group. В результате «успешного» обновления своей системы они потеряли около 460 миллионов долларов из-за торгов своей торговой системы и покупки 397 миллионов акций различных компаний по внерыночным ценам.

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

Архитектура любой торговой системы должна в той или иной форме иметь подсистему контроля финансовых рисков от торговли.

Дело KCG, на нашем внутреннем жаргоне, можно классифицировать как «стратегию, вышедшую из-под контроля».

При проектировании нужно понимать, что это лишь одна из возможностей, которая может случиться с вашей системой.

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

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

В нашей платформе торговые стратегии (или, другими словами, торговые алгоритмы) запускаются внутри определенного контейнера.

Контейнер содержит компоненты «выключателя», которые стоят на пути от торгового алгоритма к внешнему миру.

Ближайшая аналогия из физического мира — «предохранители».

Основная цель этих «выключателей» — принять автоматическое решение об отключении стратегии, если срабатывают содержащиеся в них правила.

У них есть два состояния: «закрытое» — они осуществляют все сообщения между стратегией и внешним миром, и «открытое» — когда они блокируют любые новые заявки (они же ордера) от стратегии на биржу.

Более того, в любом состоянии они всегда передают сообщения с биржи в стратегию.



Как не дать алгоритму продать банк

Возвращаясь к делу KCG: у них были различные системы мониторинга, но на поиск и решение об отключении «сломанных» подсистем у команды поддержки ушло более 45 минут. В условиях высокочастотной торговли за это время современная торговая система способна продать и купить все ваши активы сотни раз.

Поэтому решения об остановке «подозрительного» алгоритма должны приниматься автоматически.

Контейнер, в котором работает алгоритм, должен гарантировать, что стратегия не сможет обойти эту защиту.

Из практики можно также добавить, что разработкой стратегий и компонентов «выключателя» должны заниматься разные команды.

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

Типичное правило может звучать так: «стратегия может одновременно отправлять на рынок не более 100 ордеров».

Как только стратегия попытается отправить на рынок 101 ордер, «прерыватель цепи» перейдет в разомкнутое состояние и перестанет передавать новые ордера из стратегии дальше на рынок.

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

Давайте разберемся, какие, по нашему мнению, «предохранители» должны присутствовать в любой торговой системе:

  • Максимальное количество ордеров, отправляемых на рынок – для любой стратегии существует разумное количество ордеров, которые она может отправить за время своего существования.

    Если это число превышено, что-то пошло не так.

  • Максимальное количество ордеров, отправленных на рынок за определенный период времени – ни один рынок не любит спамить.

    Даже если ваша стратегия не причиняет прямого ущерба вашей компании, вы можете быть наказаны биржей, потому что, например, ваша стратегия может размещать, отменять и повторно размещать ордера на покупку или продажу какой-либо ценной бумаги.

    Биржи не любят такие заказы, потому что они создают нагрузку, но не приводят к реальным сделкам.

  • Максимальная рыночная позиция, которую может открыть стратегия.

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

    рынок.

    Если он превышает этот предел, то это признак того, что стратегия выходит за рамки возложенного на нее риска.

  • Максимальное количество открытых активных ордеров на рынке – стратегия не может превышать максимально допустимый риск для открытых позиций, однако слишком большое количество активных ордеров на рынке может быть сигналом о том, что что-то идет не так;
  • Максимальное время задержки ответа от рынка/проверка получения подтверждений отправленных на рынок ордеров - алгоритмы отправляют ордера на рынок, каждый ордер имеет свой жизненный цикл.

    Когда стратегия выставляет на рынок новый ордер, он должен быть подтвержден другой стороной в соответствии с протоколами обмена сообщениями.

    Это правило отвечает за проверку того, что мир вокруг нас ведет себя в соответствии с ожиданиями алгоритма.

    Стратегия не может работать, если она отправляет свои ордера на рынок и не получает результатов исполнения своих ордеров.

    В этом случае ошибка может быть не внутри стратегии, а в среде.

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

  • Слишком хорошо, чтобы быть правдой.

    Иногда алгоритм может попытаться купить или продать инструмент по цене, которая слишком хороша, чтобы быть правдой.

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

    Если стратегия пытается купить/продать актив по ценам, выходящим за пределы обозначенного вами коридора, это опять-таки означает, что происходит что-то подозрительное и вам нужно прекратить торговлю до тех пор, пока вы не сможете четко сказать, что стало причиной этого.

  • Толстые пальцы – эта проверка ограничивает размер ордера, который стратегия может разместить на рынке по одному ордеру за раз.

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

  • Мертвец – любые алгоритмы запускают трейдеры, которые в конечном итоге отвечают за финансовый результат. Главное правило – человек всегда должен следить за алгоритмом, следить за открытой позицией и финансовым результатом.

    Он принимает решение, работает ли алгоритм в рамках данной программы или что-то идет не так.

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

    В нашем случае, если трейдер длительное время не выполняет никаких активных действий на компьютере (нажатий клавиатуры или мыши), отображается окно с предупреждением.

    Если он не отвечает, пользовательский интерфейс закрывает активные соединения с контейнером алгоритма.

    А алго-контейнер, уже видя, что сессия с UI закрылась, останавливает свои стратегии, которые были связаны с этой сессией (в алго-контейнере можно запускать стратегии от нескольких разных трейдеров).

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

Но этот список, конечно, можно продолжать и продолжать.

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

Это лишь одна из линий защиты, которую вы должны построить внутри своей торговой платформы.

Ошибки также могут проникнуть в контейнер алгоритма и компоненты «автоматического выключателя».

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

Теги: #разработка #Алгоритмы

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.