Отказоустойчивость
Термин «отказоустойчивость» означает способность автоматизированной системы продолжать работу при возникновении сбоя. Для алгоритмов cTrader отказоустойчивость означает, что процессы, в которых размещены сиБоты, плагины и индикаторы, могут продолжать работу даже при возникновении ошибок.
В этой статье объясняется, как работает отказоустойчивость, и описываются ключевые преимущества, которые эта функция предлагает алготрейдерам.
Отказоустойчивость за одну минуту!
- Согласно правилам отказоустойчивости, при возникновении исключения алгоритм продолжит работу. Эта функция делает алгоритмы cTrader еще более стабильными и предоставляет возможности для улучшения выполнения вашего кода.
- Алгоритмы теперь могут автоматически выводить исключения, с которыми они сталкиваются, в журнал операций, предоставляя ценную информацию, которую вы можете использовать для улучшения своего кода.
- Вы можете использовать метод
OnException(Exception exception)для настройки реакции ваших алгоритмов на исключения. Используйте этот обработчик событий для создания надежных и эффективных расширений.
Правила отказоустойчивости
Вкратце, отказоустойчивость гарантирует, что все алгоритмы следуют правилам, описанным ниже:
- При возникновении исключения алгоритм должен продолжать работу.
- Каждое исключение, возникающее во время работы алгоритма, должно быть зарегистрировано.
- Пользователи должны иметь возможность вводить пользовательские правила, определяющие, как алгоритмы обрабатывают различные исключения.
Отказоустойчивость позволяет алгоритмам по сути игнорировать все ошибки, которые не угрожают сбоем их процессов. Хотя исключения все еще могут препятствовать выполнению кода, отказоустойчивость значительно сокращает количество случаев, когда алгоритм может неожиданно сломаться.
Метод OnException()
Согласно правилам отказоустойчивости, алгоритмы должны игнорировать исключения. Однако вы также можете настроить реакцию ваших алгоритмов на определенные исключения или полностью переопределить стандартное поведение отказоустойчивости.
Для этого используйте метод OnException(). Он действует как специальный обработчик для любых необработанных исключений. Его стандартная сигнатура выглядит следующим образом:
1 2 3 4 | |
Рассмотрим следующий пример, в котором метод OnException() используется для изменения реакции сиБота на исключение NullReferenceException.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |
Чтобы вызвать исключение NullReferenceException, мы заставляем наш сиБот закрыть короткую позицию, которая может не существовать. При возникновении указанного исключения наш сиБот должен показать MessageBox с пояснительным текстом, чтобы мы могли быстро отреагировать на это исключение и скорректировать поведение нашего сиБота.
Обратите внимание, что обработчик OnException() не должен обрабатывать исключения, возникающие во время вызова этого метода. Тем не менее такие исключения все равно записываются в журнал событий.
Преимущества отказоустойчивости
Отказоустойчивость — это важный аспект работы алгоритмической торговли в cTrader, обеспечивающий следующие преимущества.
- Отказоустойчивость значительно повышает надежность алгоритмов и предоставляет новые возможности для улучшения вашего подхода к автоматизированной торговле.
- Поскольку алгоритмы могут отображать исключения, с которыми они сталкиваются, в журнале событий, вы можете легко определить условия, при которых алгоритм столкнулся с конкретной ошибкой.
- Благодаря возможности обработки событий исключений метод
OnException()можно использовать для совершенствования поведения ваших алгоритмов и повышения их надежности.
Обработка сбоев
Как было сказано ранее, несколько ошибок могут привести к сбою целых процессов. Это следующие ошибки:
- Исключение
OutOfMemoryException. - Исключение
StackOverflowException. - Любое необработанное исключение, возникающее в отдельном потоке.
- Любые другие ошибки, которые могут угрожать сбоем процесса, в котором работает алгоритм.
При возникновении любой из вышеперечисленных ошибок экземпляр индикатора будет остановлен; он не будет перезапущен автоматически. Однако исключение все равно будет записано в журнал.
В отличие от этого, когда процесс, в котором размещен экземпляр сиБота, ломается, он будет перезапущен автоматически (при этом исключение будет записано в журнал).
Несколько экземпляров в одном процессе
Бывают случаи, когда один процесс может размещать несколько экземпляров сиБотов. Если один из этих экземпляров столкнется с исключением, которое приведет к его сбою, весь процесс также сломается. При перезапуске процесс перезапустит все экземпляры сиБотов, которые он изначально размещал.
Обзор
Отказоустойчивость предоставляет несколько ценных возможностей для того, чтобы сделать алгоритмы еще более стабильными и эффективными. Обработчик OnException() обеспечивает дополнительный уровень контроля над тем, как ваши алгоритмы реагируют на исключения.