Роботы и Безопасность. Часть 1

19.07.2019 (c) Vytas Ramanchauskas, www.SpyTlt.com

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

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

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

Соответственно будет две статьи, первая (эта), более простая и очевидная, будет посвящена защите от человеческих ошибок. Позже выйдет вторая часть, посвященная ошибкам в роботах. Пока она не вышла, один маленький совет: если у вас нет серьезного опыта разработки mission critical software, и ваш депозит сколь-нибудь существенен, НЕ пишите полностью автоматических роботов, делайте советников, пусть он подготовит ордер и позовет вас отправить его вручную, с возможностью оценки ситуации.

Как защититься от себя самого

Как знает и любит повторять любой гопник из питерской подворотни - errare humanum est - человеку свойственно ошибаться. Речь сейчас пойдет исключительно о технических ошибках, об осознанных, но ошибочно принятых решениях говорить не будем. Собственно в противоположность "железному" роботу, технические человеческие ошибки идут исключительно от невнимательности.

В качестве примера приведу фантастическую по нелепости ошибку, произошедшую в Японии, когда трейдер перепутал в ордере цену и количество. И вместо продажи одной акции компании J-Com Co. по цене 610 тысяч йен, выставил заявку на 610 тысяч акций по цене 1 йена, что привело к грандиозным потерям и потрясениям. В итоге опечатка обошлась почти четверти миллиарда (NB!) долларов.

Кстати, в человеколюбивой Америке, по закону, если цена лимитного ордера хуже рыночной, она должна быть улучшена брокером до рыночной. Более того, многие брокеры, в частности IB, отвергнут автоматом заявку, если лимитная цена сильно хуже рыночной, что абсолютно логично - раз трейдер ошибся в цене, то мог ошибиться и в количестве, и в самом тикере.

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

Типовые человеческие ошибки

  • Ошибка в тикере: одна опечатка и вы можете купить или продать совсем не то, что планировали. При этом ошибочный актив может оказаться малоликвидным или гораздо более дорогим. В худшем случае вы можете еще и не сразу заметить ошибку.
  • Ошибка в размере позиции: неверно посчитанное количество акций или лишний выскочивший нолик из-за дрогнувшего пальца или глючной клавиатуры или перепутаны цена и количество в лимитном ордере.
  • Ошибка в цене лимитного ордера, не так критично, если вы работаете с американским рынком, но может быть настоящей катастрофой в Европе или Японии.
  • Ошибка в цене стоп ордера: в отличии от предыдущего случая, заблокирована она не будет и в результате ордер либо сразу же исполнится (не самый худший вариант), либо же окажется по сути неработающим и не защитит вас от большого убытка при неблагоприятном развитии событий.
  • Покупка вместо продажи и наоборот - иногда бывает и так. Самый неприятный сценарий, если вы закрываете, скажем, шортовую позицию и для этого должны купить актив. Однако, по ошибке, возможно из-за того, что привыкли иметь дело с лонгами, вы не покупаете, а продаете, и в результате удваивает шортовую позицию. Если вы это сразу не замечаете, а закрываете терминал и ложитесь спать или, совсем плохо, уходите в отпуск - вас может ждать сюрприз. Как водится 50/50: или приятный или неприятный.
  • Забывание закрыть позицию. Бывает и такое. История про забытый шорт, который летал в космос, пока я решил биржей временно не заниматься еще ждет своего часа.
  • Нетривиальная ошибка для начинающего трейдера, обычно надо наступить на эти грабли, чтобы осознать. Если вы свинговый/среднесрочный трейдер и открываете позицию в конкретной акции (не ETF), то не поленитесь посмотреть, нет ли у этой компании отчета в ближайшие дни. Если, конечно же, вы не занимаетесь угадыванием отчетов и не открываете позицию под отчет преднамеренно. Иначе вас может постигнуть грандиозный сюрприз как со знаком плюс, так и со знаком минус. Скачки на десятки процентов на отчете не редкость. И хотя вы можете оказаться в неожиданном плюсе, играть в эту рулетку, добавляя себе бессмысленную дисперсию совершенно незачем.
  • Дивиденды менее значимы, но если в шорте, то платить их придется вам, впрочем, на фоне всего остального - это такая мелочь...

Написанное выше актуально для акций/ETF, для других инструментов не все актуально, но там могут быть свои "страшилки".

Робот-посредник

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

Писался он исключительно под себя исходя из моих собственных представлений о прекрасном ;)

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

Например, простейший вариант:
b QQQ
Покупка QQQ, на типичную сумму, которая задана в конфигурации. Можно задать разные суммы для разных инструментов и сумму по умолчанию.

При желании можно указать конкретное количество акций:
b AAPL 42
b NVDA $50K
без знака доллара - количество в штуках, со знаком доллара - покупка на указанную сумму, количество будет вычислено автоматом по последней цене. Возможность написать K вместо тысяч существенно снижает вероятность ошибки типа "лишний ноль", да и проще так, чем пересчитывать нули. Это одна из тех мелочей, которая на деле оказывается совсем не мелочью. Однако, вариант с нулями тоже возможен, причем можно использовать запятую как разделитель групп цифр, например, $100,000 - опять же, снижает риск глупой ошибки.

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

Есть так же дополнительный синтаксис для стоп ордеров, MOC/LOC ордеров (исполняющихся на закрытии), а так же ордеров, исполняющихся в заданное время.

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

Если открывается позиция в акции, у которой в течении ближайшей недели должен выйти отчет, выдается предупреждение.

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

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

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

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

Помимо этой, основной, функции робот имеет целый ряд дополнительных мелочей:

  • Синхронизация времени локального компьютера с сервером IB
  • Можно задавать триггеры, подающие звуковой сигнал, если цена на указанный актив станет больше или меньше заданной
  • На основе триггеров возможны виртуальные стопы: они не видны HFT хищникам, просто маркет ордер при заданном изменении цены на автомате
  • Умеет голосом/телеграмом/смсом говорить о сильных изменениях, портфеля в целом, индексов, отдельных позиций, отчитывать о балансе - желаемая информация и канал доставки легко меняются
  • Предупреждать о грядущих отчетах для акций в портфеле
  • Предупреждения о праздниках, коротких днях, сменах летнего времени, скором открытии и закрытии биржи
  • Всякие мелочи вроде интеллектуальных комментариев по итогам дня, если залет - грустную песенку поставит, по головке погладит, в магазин за водкой сгоняет (в следующей версии). Или, напротив, порадуется вместе с вами ;)


Вопросы и обсуждение - в телеграм-группе SpyTlt.