Как повысить надёжность робота и защитить депозит от технических сбоев?
Эта статья о том, как снизить риск технического сбоя, а также уменьшить негативные последствия для торгового счёта в случае наступления такого сбоя.
Статья написана по материалам моего выступления в Москве на конференции алготрейдеров, проводившейся в конце 2011 года, и будет полезна всем трейдерам, торгующим с помощью роботов – программ автоматизированных механических торговых систем. Приведённые примеры будут относиться к роботам, торгующим через терминал QUIK, как наиболее распространённый. Однако поднятые вопросы актуальны для трейдеров, использующих любых торговых роботов.
Важность и ценность темы в том, что цена технического сбоя очень высока: последствием могут являться реальные убытки на депозите или даже его слив. Например, у одного моего знакомого трейдера его робот потерял 600 тыс. руб. за полчаса в результате технического сбоя. Следует также помнить, что наличие потенциальной возможности значительного плеча при торговле фьючерсами добавляет и риск ухода депозита вообще в «минус», т.е. теоретически может появиться долг трейдера перед брокером. К сожалению, в жизни трейдеры задумываются о вопросе надёжности робота тогда, когда сталкиваются с конкретным сбоем и его последствиями. Почему бы не подготовиться к таким ситуациям заранее?
Мы сконцентрируемся на методах повышения надёжности разрабатываемых роботов, т.е. софта. Риски аппаратного обеспечения, UPS (источник бесперебойного питания), дублирование интернет-канала и необходимость антивируса и фаервола НЕ входят в данную тему. Часть этих проблем можно решить, разместив робота в специализированном data-центре на выделенном или виртуальном сервере.
Задача построения робота сводится к тому, чтобы создать надёжную систему на основе ненадёжных компонентов. Эта задача неоригинальна, и уже решалась и природой и радиотехникой.
Причины технических сбоев:
- внутренняя логика робота;
- внешняя среда.
Первое, чем необходимо озаботиться с самого начала разработки робота – встроить систему логов. Причём записывать нужно не только действия самого робота, но также и состояние «внешней среды» в момент этого действия. Источником логов может являться специальный модуль робота – анализатор ошибок. Задача анализатора ошибок – определить и записать в каком «окружении» действовал робот. Например: задержка выставления заявок, разрыв связи с интернетом, заявка выставлена в будущем и проч.
Когда робот совершает сделку, помимо записи самой сделки, необходимо записать в лог также все условия, на основании которых эта сделка была совершена в соответствии с Вашей торговой системой. Также полезно записать текущую торговую позицию и выставленные заявки по мнению торгового терминала и по мнению робота. На практике эти мнения могут различаться. Многие помнят недавнюю историю с некорректным отображением позиций и ограничений в терминале.
Здесь мы подходим к вопросу необходимости фильтрации данных от брокера, т.к., к сожалению, часть этих данных может отсутствовать или быть недостоверной.
Фильтрация данных от брокера
Одной из причин сбоя робота может являться некорректное отображение данных брокера в терминале. Относиться ко всей используемой в Вашем роботе внешней информации необходимо скептически. Для предотвращения пагубных последствий необходимо преобразовать типы данных и проверить, что данные находятся в установленных диапазонах (напр.: не должно быть отрицательных цен или нулевой цены).
Также, для проверки поступающих котировок необходим независимый поставщик данных или котировки от разных брокеров, т.к., зачастую, брокеры могут предоставлять неполные данные. Например, на ФОРТС некоторые брокеры на открытии торгов транслируют нормальную первую «свечу», а некоторые «рисуют» несуществующий гэп. Не важно, связана ли данная ситуация с брокером или вызвана самим КВИКом. Эта проблема влияет на оценку значений high и low дня, на сетапы некоторых паттернов, что может повлечь лишние или некорректные сделки робота.
При фильтрации и проверке данных появляется вопрос, который каждый трейдер должен решить для себя: либо уже на этом этапе сгенерировать ошибку и отключить робота, либо позволить ему продолжать работать на основе исправленных данных. Во втором случае нужно помнить, что это может привести к ложным торговым сигналам, т.к. они базируются на неясной информации.
«Графитовая» защита
Графитовая защита – это центральная тема моей статьи.
Защита на атомных электростанциях построена на принципе самозатухания реакции, в случае выхода её из-под контроля. Например, те же графитовые стержни падают под действием обычной силы тяжести.
Единственная задача графитовой защиты в роботе – отключить его «на лету» в случае, если поведение и/или результаты действия робота в терминале неудовлетворительны.
Графитовая защита рассчитана как раз на случай наступления какого-либо технического сбоя. Разрабатывая её, мы исходим из предположения о неизбежности такого сбоя. Может быть, сбой так и не произойдёт – ну и отлично, но на случай, если он всё же произошёл, у нас должно быть готовое решение. Произойти же он может по очень многим причинам. Например, однажды, уже после полугодовой работы робота, неожиданно в КВИКе возникло окно, остановившее работу терминала и требующее ввести цифры. Ничего подобного и близко не было в технической документации по КВИКу!
Уже в процессе создания автоматизированной торговой системы можно предусмотреть некие системные «эшелоны» защиты, снижающие негативные последствия технического сбоя. Например, если у Вас робот торгует по нескольким торговым стратегиям или инструментам одновременно, то можно разделить счёт по субсчетам. Это может локализовать последствия сбоя и ограничить убытки размером субсчёта. Однако я рекомендую не надеяться только на инфраструктуру брокера, но и в самой графитовой защите предусмотреть определённые ограничения и критерии отключения робота.
Это может быть ограничение размера максимальной позиции / плечей, ограничение на количество транзакций, ограничение на максимальный дневной убыток (подходит для HFT-систем и проч.) и т.д.
Я перечислю топ самых существенных по последствиям и разрушительности сбоев, от которых необходимо предусмотреть защиту:
1. Нахождение робота в позиции с чрезмерным или даже максимальным плечом
2. Совершение роботом значительного числа сделок («разнос») по какой-либо причине, например, некорректных исходных данных, некорректному расчёту позиции, неверному отображению позиции в терминале или задержках выставления заявок и т.д.
3. Совершение несистемных сделок, в т.ч. закрытие позиции
4. Пропуск системных сделок
5. Критические временные задержки выставления заявок (когда заявки улетают «в никуда»)
Безусловно, на этапе создания робота (как и любого софта), его необходимо протестировать на наличие ошибок, попробовать в реальной торговле и т.д. Но на практике бывает, что мы робота модернизируем, выходят новые версии торгового терминала, количество параметров и различных потенциальных причин сбоев растёт, так что что-то неведомое может произойти.
Поэтому имеет смысл потратить ещё неделю на создание такой графитовой защиты и оставить себе «право на ошибку». Как будет действовать графитовая защита? Например, она может подсчитывать величину используемого плеча и при превышении критического уровня просто отключить робота. Она может подсчитывать количество отправленных транзакций и при превышении условленного числа отключить робота и т.д.
Здесь, однако, перед разработчиком встают определённые вопросы.
Какую чувствительность на сбои отрегулировать у создаваемой защиты?
Защита может реагировать на малейшие неприятности, или она будет реагировать только на действительно серьёзные сбои. Я считаю, что даже незначительные несоответствия желательно отлавливать, т.к. наслоение этих неприятностей как раз может привести к чёрному лебедю. Таким образом, проектируемая защита должна состоять из нескольких независимых друг от друга эшелонов-ограничений. Т.е. нужно одновременно ограничить и максимальное количество транзакций в день, и размер максимального плеча и т.д. Какое именно поведение робота будет не соответствовать «модели» – решать Вам.
Второй вопрос заключается в том, что делать при наступлении технического сбоя: выйти ли из позиции перед отключением робота или отключить робота не корректируя позицию? Это не такой простой вопрос, т.к. может быть неизвестно, что явилось причиной сбоя, каковы истинные торговые позиции, работает ли терминал вообще, и т.д.
Стоит ли доверять роботу попытаться самостоятельно разобраться с возникшей проблемой и продолжить торговлю или «позвать на помощь» трейдера?
В любом случае, необходимо каким-либо образом проинформировать трейдера о наступлении чрезвычайной ситуации.
Сигнальная система
С помощью сигнальной системы робот сообщает трейдеру необходимую информацию: о текущем состоянии, позиции, входе и выходе из сделки, о каком-либо техническом сбое. Это может быть сайт, на который робот будет выкладывать информацию. Если последнее время обновления информации произошло слишком давно, значит ситуация совсем критическая (например, отсутствует интернет или проблема на уровне операционной системы или аппаратного обеспечения).
Это могут быть звуковые сигналы, специальные всплывающие окна, если трейдер находится в непосредственной близости от терминала.
Однако самая удобная система – это смс-оповещение.
Реализовать смс-оповещение можно с помощью различных интернет-сервисов. Например, можно достаточно удобно и надёжно организовать смс-оповещение через сервис Google Calendar. Робот подключается к Google API и создаёт событие в календаре. В настройках календаря включено смс-уведомление о событиях. В результате можно получать смс-сообщение с необходимой информацией и быть в курсе состояния робота.
Конечно, в случае, если робот вышел из строя, он не сможет отправить смс, поэтому некая независимая система, например скрипт на сайте, или другой сервер могут время от времени проверять состояние робота.
Какую сигнальную систему выбрать? Я не сторонник решения «или», я сторонник решения «и». В роботе может быть одновременно и возможность выкладывать информацию на сайте, и сообщение о критических ошибках через смс, и возможность дистанционного подключения к серверу через систему удалённого доступа, и т.д.
Наличие смс-оповещения даёт владельцу робота большее количество свободы – нет нужды постоянно мониторить состояние робота. Идеальный вариант: всегда с собой иметь ноутбук с возможностью быстрого дистанционного доступа к серверу, на котором запущен робот, и проверять его деятельность по мере необходимости.
Итак, в этой статье мы рассмотрели вопрос технической надёжности робота. Заниматься этим нужно на этапе проектирования архитектуры робота, предусмотрев необходимые системы: систему логов, систему фильтрации, проверки и обработки импортируемых данных, анализатор ошибок, сигнальную систему и, конечно, систему аварийного выключения робота – графитовую защиту.
Некоторые из поднятых вопросов дискуссионны и окончательное решение как поступать в той или иной ситуации остаётся за трейдером или разработчиком торгового робота. Мы торгуем по разным торговым системам, на разных таймфреймах, на разных инструментах, да и характеры у нас разные. Для неторопливых систем и трейдеров подойдёт робот-параноик с чувствительной защитой и без попыток каким-либо образом решить возникшую проблему, для других систем – необходим такой робот, который, например, сможет закачать или сгладить пропущенные котировки и / или исправить мелкие стандартные ошибки самостоятельно.
Автор: Конвертор
Специально для сайта «Русский трейдер»
Эта статья о том, как снизить риск технического сбоя, а также уменьшить негативные последствия для торгового счёта в случае наступления такого сбоя.
Статья написана по материалам моего выступления в Москве на конференции алготрейдеров, проводившейся в конце 2011 года, и будет полезна всем трейдерам, торгующим с помощью роботов – программ автоматизированных механических торговых систем. Приведённые примеры будут относиться к роботам, торгующим через терминал QUIK, как наиболее распространённый. Однако поднятые вопросы актуальны для трейдеров, использующих любых торговых роботов.
Важность и ценность темы в том, что цена технического сбоя очень высока: последствием могут являться реальные убытки на депозите или даже его слив. Например, у одного моего знакомого трейдера его робот потерял 600 тыс. руб. за полчаса в результате технического сбоя. Следует также помнить, что наличие потенциальной возможности значительного плеча при торговле фьючерсами добавляет и риск ухода депозита вообще в «минус», т.е. теоретически может появиться долг трейдера перед брокером. К сожалению, в жизни трейдеры задумываются о вопросе надёжности робота тогда, когда сталкиваются с конкретным сбоем и его последствиями. Почему бы не подготовиться к таким ситуациям заранее?
Мы сконцентрируемся на методах повышения надёжности разрабатываемых роботов, т.е. софта. Риски аппаратного обеспечения, UPS (источник бесперебойного питания), дублирование интернет-канала и необходимость антивируса и фаервола НЕ входят в данную тему. Часть этих проблем можно решить, разместив робота в специализированном data-центре на выделенном или виртуальном сервере.
Задача построения робота сводится к тому, чтобы создать надёжную систему на основе ненадёжных компонентов. Эта задача неоригинальна, и уже решалась и природой и радиотехникой.
Причины технических сбоев:
- внутренняя логика робота;
- внешняя среда.
Первое, чем необходимо озаботиться с самого начала разработки робота – встроить систему логов. Причём записывать нужно не только действия самого робота, но также и состояние «внешней среды» в момент этого действия. Источником логов может являться специальный модуль робота – анализатор ошибок. Задача анализатора ошибок – определить и записать в каком «окружении» действовал робот. Например: задержка выставления заявок, разрыв связи с интернетом, заявка выставлена в будущем и проч.
Когда робот совершает сделку, помимо записи самой сделки, необходимо записать в лог также все условия, на основании которых эта сделка была совершена в соответствии с Вашей торговой системой. Также полезно записать текущую торговую позицию и выставленные заявки по мнению торгового терминала и по мнению робота. На практике эти мнения могут различаться. Многие помнят недавнюю историю с некорректным отображением позиций и ограничений в терминале.
Здесь мы подходим к вопросу необходимости фильтрации данных от брокера, т.к., к сожалению, часть этих данных может отсутствовать или быть недостоверной.
Фильтрация данных от брокера
Одной из причин сбоя робота может являться некорректное отображение данных брокера в терминале. Относиться ко всей используемой в Вашем роботе внешней информации необходимо скептически. Для предотвращения пагубных последствий необходимо преобразовать типы данных и проверить, что данные находятся в установленных диапазонах (напр.: не должно быть отрицательных цен или нулевой цены).
Также, для проверки поступающих котировок необходим независимый поставщик данных или котировки от разных брокеров, т.к., зачастую, брокеры могут предоставлять неполные данные. Например, на ФОРТС некоторые брокеры на открытии торгов транслируют нормальную первую «свечу», а некоторые «рисуют» несуществующий гэп. Не важно, связана ли данная ситуация с брокером или вызвана самим КВИКом. Эта проблема влияет на оценку значений high и low дня, на сетапы некоторых паттернов, что может повлечь лишние или некорректные сделки робота.
При фильтрации и проверке данных появляется вопрос, который каждый трейдер должен решить для себя: либо уже на этом этапе сгенерировать ошибку и отключить робота, либо позволить ему продолжать работать на основе исправленных данных. Во втором случае нужно помнить, что это может привести к ложным торговым сигналам, т.к. они базируются на неясной информации.
«Графитовая» защита
Графитовая защита – это центральная тема моей статьи.
Защита на атомных электростанциях построена на принципе самозатухания реакции, в случае выхода её из-под контроля. Например, те же графитовые стержни падают под действием обычной силы тяжести.
Единственная задача графитовой защиты в роботе – отключить его «на лету» в случае, если поведение и/или результаты действия робота в терминале неудовлетворительны.
Графитовая защита рассчитана как раз на случай наступления какого-либо технического сбоя. Разрабатывая её, мы исходим из предположения о неизбежности такого сбоя. Может быть, сбой так и не произойдёт – ну и отлично, но на случай, если он всё же произошёл, у нас должно быть готовое решение. Произойти же он может по очень многим причинам. Например, однажды, уже после полугодовой работы робота, неожиданно в КВИКе возникло окно, остановившее работу терминала и требующее ввести цифры. Ничего подобного и близко не было в технической документации по КВИКу!
Уже в процессе создания автоматизированной торговой системы можно предусмотреть некие системные «эшелоны» защиты, снижающие негативные последствия технического сбоя. Например, если у Вас робот торгует по нескольким торговым стратегиям или инструментам одновременно, то можно разделить счёт по субсчетам. Это может локализовать последствия сбоя и ограничить убытки размером субсчёта. Однако я рекомендую не надеяться только на инфраструктуру брокера, но и в самой графитовой защите предусмотреть определённые ограничения и критерии отключения робота.
Это может быть ограничение размера максимальной позиции / плечей, ограничение на количество транзакций, ограничение на максимальный дневной убыток (подходит для HFT-систем и проч.) и т.д.
Я перечислю топ самых существенных по последствиям и разрушительности сбоев, от которых необходимо предусмотреть защиту:
1. Нахождение робота в позиции с чрезмерным или даже максимальным плечом
2. Совершение роботом значительного числа сделок («разнос») по какой-либо причине, например, некорректных исходных данных, некорректному расчёту позиции, неверному отображению позиции в терминале или задержках выставления заявок и т.д.
3. Совершение несистемных сделок, в т.ч. закрытие позиции
4. Пропуск системных сделок
5. Критические временные задержки выставления заявок (когда заявки улетают «в никуда»)
Безусловно, на этапе создания робота (как и любого софта), его необходимо протестировать на наличие ошибок, попробовать в реальной торговле и т.д. Но на практике бывает, что мы робота модернизируем, выходят новые версии торгового терминала, количество параметров и различных потенциальных причин сбоев растёт, так что что-то неведомое может произойти.
Поэтому имеет смысл потратить ещё неделю на создание такой графитовой защиты и оставить себе «право на ошибку». Как будет действовать графитовая защита? Например, она может подсчитывать величину используемого плеча и при превышении критического уровня просто отключить робота. Она может подсчитывать количество отправленных транзакций и при превышении условленного числа отключить робота и т.д.
Здесь, однако, перед разработчиком встают определённые вопросы.
Какую чувствительность на сбои отрегулировать у создаваемой защиты?
Защита может реагировать на малейшие неприятности, или она будет реагировать только на действительно серьёзные сбои. Я считаю, что даже незначительные несоответствия желательно отлавливать, т.к. наслоение этих неприятностей как раз может привести к чёрному лебедю. Таким образом, проектируемая защита должна состоять из нескольких независимых друг от друга эшелонов-ограничений. Т.е. нужно одновременно ограничить и максимальное количество транзакций в день, и размер максимального плеча и т.д. Какое именно поведение робота будет не соответствовать «модели» – решать Вам.
Второй вопрос заключается в том, что делать при наступлении технического сбоя: выйти ли из позиции перед отключением робота или отключить робота не корректируя позицию? Это не такой простой вопрос, т.к. может быть неизвестно, что явилось причиной сбоя, каковы истинные торговые позиции, работает ли терминал вообще, и т.д.
Стоит ли доверять роботу попытаться самостоятельно разобраться с возникшей проблемой и продолжить торговлю или «позвать на помощь» трейдера?
В любом случае, необходимо каким-либо образом проинформировать трейдера о наступлении чрезвычайной ситуации.
Сигнальная система
С помощью сигнальной системы робот сообщает трейдеру необходимую информацию: о текущем состоянии, позиции, входе и выходе из сделки, о каком-либо техническом сбое. Это может быть сайт, на который робот будет выкладывать информацию. Если последнее время обновления информации произошло слишком давно, значит ситуация совсем критическая (например, отсутствует интернет или проблема на уровне операционной системы или аппаратного обеспечения).
Это могут быть звуковые сигналы, специальные всплывающие окна, если трейдер находится в непосредственной близости от терминала.
Однако самая удобная система – это смс-оповещение.
Реализовать смс-оповещение можно с помощью различных интернет-сервисов. Например, можно достаточно удобно и надёжно организовать смс-оповещение через сервис Google Calendar. Робот подключается к Google API и создаёт событие в календаре. В настройках календаря включено смс-уведомление о событиях. В результате можно получать смс-сообщение с необходимой информацией и быть в курсе состояния робота.
Конечно, в случае, если робот вышел из строя, он не сможет отправить смс, поэтому некая независимая система, например скрипт на сайте, или другой сервер могут время от времени проверять состояние робота.
Какую сигнальную систему выбрать? Я не сторонник решения «или», я сторонник решения «и». В роботе может быть одновременно и возможность выкладывать информацию на сайте, и сообщение о критических ошибках через смс, и возможность дистанционного подключения к серверу через систему удалённого доступа, и т.д.
Наличие смс-оповещения даёт владельцу робота большее количество свободы – нет нужды постоянно мониторить состояние робота. Идеальный вариант: всегда с собой иметь ноутбук с возможностью быстрого дистанционного доступа к серверу, на котором запущен робот, и проверять его деятельность по мере необходимости.
Итак, в этой статье мы рассмотрели вопрос технической надёжности робота. Заниматься этим нужно на этапе проектирования архитектуры робота, предусмотрев необходимые системы: систему логов, систему фильтрации, проверки и обработки импортируемых данных, анализатор ошибок, сигнальную систему и, конечно, систему аварийного выключения робота – графитовую защиту.
Некоторые из поднятых вопросов дискуссионны и окончательное решение как поступать в той или иной ситуации остаётся за трейдером или разработчиком торгового робота. Мы торгуем по разным торговым системам, на разных таймфреймах, на разных инструментах, да и характеры у нас разные. Для неторопливых систем и трейдеров подойдёт робот-параноик с чувствительной защитой и без попыток каким-либо образом решить возникшую проблему, для других систем – необходим такой робот, который, например, сможет закачать или сгладить пропущенные котировки и / или исправить мелкие стандартные ошибки самостоятельно.
Автор: Конвертор
Специально для сайта «Русский трейдер»