Слово "безопасность" очень многомерное и разноплановое, поэтому договоримся, что речь чисто о технических ошибках,
которые могут приводить - и такие истории прекрасно известны - к серьезным потерям при торговле.
Есть два противоположных аспекта проблемы:
-
Как защищать депозит от технических ошибок человека, который торгует напрямую, без робота.
-
Как защитить свой депозит, если торгует робот-автомат и из-за технической ошибки он "сбесился" и принялся
уничтожать депозит.
Безусловно, и во втором случае, ошибки в роботе делаются человеком, но это другой вид ошибок, другой характер проблемы.
В случае ошибок человека, речь идет прежде всего о невнимательности.
В случае ошибок в роботе, это ошибки в логике его работы, допущенные на этапе разработки.
Соответственно будет две статьи, первая (эта), более простая и очевидная, будет посвящена защите от человеческих ошибок.
Позже выйдет вторая часть, посвященная ошибкам в роботах. Пока она не вышла, один маленький совет: если у вас нет серьезного
опыта разработки 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 хищникам, просто маркет ордер при заданном изменении цены
на автомате
- Умеет голосом/телеграмом/смсом говорить о сильных изменениях, портфеля в целом, индексов, отдельных позиций,
отчитывать о балансе - желаемая информация и канал доставки легко меняются
- Предупреждать о грядущих отчетах для акций в портфеле
- Предупреждения о праздниках, коротких днях, сменах летнего времени, скором открытии и закрытии биржи
- Всякие мелочи вроде интеллектуальных комментариев по итогам дня, если залет - грустную песенку поставит,
по головке погладит, в магазин за водкой сгоняет (в следующей версии). Или, напротив, порадуется вместе с вами ;)