Tolerancia a fallos
El término "tolerancia a fallos" se refiere a la capacidad de un sistema automatizado para seguir funcionando cuando se produce un fallo. Para los algoritmos de cTrader, la tolerancia a fallos significa que los procesos que alojan cBots, plugins e indicadores pueden seguir ejecutándose incluso cuando se enfrentan a errores.
Este artÃculo explica cómo funciona la tolerancia a fallos y describe los principales beneficios que ofrece esta función a los operadores algorÃtmicos.
¡Tolerancia a fallos en un minuto!
- Según las reglas de tolerancia a fallos, cuando se enfrenta a una excepción, un algoritmo seguirá ejecutándose. Esta función hace que los algoritmos de cTrader sean aún más estables y ofrece oportunidades para perfeccionar la ejecución del código.
- Los algoritmos ahora pueden generar automáticamente las excepciones que encuentran en el registro de operaciones, proporcionando información valiosa que puede utilizar para perfeccionar su código.
- Puede utilizar el método
OnException(Exception exception)para personalizar cómo reaccionan sus algoritmos a las excepciones. Utilice este controlador de eventos para crear extensiones fiables y eficaces.
Reglas de tolerancia a fallos
En resumen, la tolerancia a fallos garantiza que todos los algoritmos sigan las reglas que se detallan a continuación:
- Cuando se encuentra una excepción, un algoritmo debe seguir ejecutándose.
- Todas las excepciones que se produzcan mientras un algoritmo está operando deben registrarse.
- Los usuarios deben tener la oportunidad de introducir reglas personalizadas que determinen cómo los algoritmos manejan diversas excepciones.
La tolerancia a fallos permite a los algoritmos ignorar esencialmente todos los errores que no amenacen con bloquear sus procesos. Aunque las excepciones pueden seguir impidiendo la ejecución del código, la tolerancia a fallos reduce en gran medida el número de veces que un algoritmo puede bloquearse inesperadamente.
El método OnException()
Según las reglas de tolerancia a fallos, los algoritmos tienen que ignorar las excepciones. Sin embargo, también puede personalizar cómo reaccionan sus algoritmos ante ciertas excepciones, o sobrescribir por completo los comportamientos predeterminados de tolerancia a fallos.
Para ello, utilice el método OnException(). Actúa como el controlador dedicado para cualquier excepción no controlada. Su firma predeterminada es la siguiente:
1 2 3 4 | |
Considere el siguiente ejemplo en el que se utiliza el método OnException() para cambiar la forma en que un cBot reacciona a la excepción NullReferenceException.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |
Para lanzar la excepción NullReferenceException, hacemos que nuestro cBot cierre una posición corta que puede no existir. Al encontrar la excepción especificada, se supone que nuestro cBot mostrará un MessageBox con un texto explicativo, para que podamos reaccionar rápidamente a esta excepción y ajustar los comportamientos de nuestro cBot.
Tenga en cuenta que el controlador OnException() no está destinado a manejar excepciones que se produzcan mientras se invoca este método. No obstante, estas excepciones se siguen registrando en el registro de eventos.
Beneficios de la tolerancia a fallos
La tolerancia a fallos es un aspecto crucial de cómo funcionan las operaciones con algoritmos en cTrader, ya que proporciona los siguientes beneficios.
- La tolerancia a fallos aumenta considerablemente la fiabilidad de los algoritmos y ofrece nuevas oportunidades para perfeccionar su enfoque de las operaciones automatizadas.
- Como los algoritmos pueden mostrar las excepciones que encuentran en el registro de eventos, puede determinar fácilmente las condiciones en las que un algoritmo ha encontrado un error concreto.
- Al permitir el manejo de eventos de excepción, el método
OnException()puede utilizarse para perfeccionar los comportamientos de sus algoritmos y mejorar su fiabilidad.
Manejo de bloqueos
Como se ha indicado anteriormente, varios errores pueden bloquear procesos enteros. Son los siguientes:
- La excepción
OutOfMemoryException. - La excepción
StackOverflowException. - Cualquier excepción no controlada que se produzca en un hilo separado.
- Cualquier otro error que pueda amenazar con bloquear el proceso en el que se está ejecutando un algoritmo.
Cuando se enfrenta a cualquiera de los errores anteriores, se detendrá una instancia del indicador; no se reiniciará automáticamente. Sin embargo, la excepción seguirá registrándose en el registro.
Por el contrario, cuando se bloquea un proceso que aloja una instancia de cBot, se reiniciará automáticamente (y la excepción se registrará en el registro).
Múltiples instancias en un solo proceso
Hay casos en los que un solo proceso puede alojar varias instancias de cBot. Si una de estas instancias encuentra una excepción que hace que se bloquee, todo el proceso también se bloqueará. Al reiniciarse, el proceso reiniciará todas las instancias de cBot que alojaba originalmente.
Resumen
La tolerancia a fallos ofrece varias oportunidades valiosas para hacer que los algoritmos sean aún más estables y eficaces. El controlador OnException() proporciona una capa adicional de control sobre cómo reaccionan sus algoritmos a las excepciones.