容错
容错一词指的是自动化系统在遇到故障时继续运行的能力。 对于 cTrader 算法来说,容错意味着托管 cBots、插件和指标的进程即使在面对错误时也能继续运行。
本文解释了容错的工作原理,并描述了这一功能为算法交易者提供的主要优势。
一分钟了解容错!
- 根据容错规则,当面对异常时,算法将继续运行。 这一功能使 cTrader 算法更加稳定,并为改进代码执行方式提供了机会。
- 算法现在可以自动在操作日志中输出它们遇到的异常,提供有价值的信息,您可以用这些信息来改进您的代码。
- 您可以使用
OnException(Exception exception)方法来自定义算法对异常的反应。 使用这个事件处理程序来创建可靠和有效的扩展。
容错规则
简而言之,容错确保所有算法遵循以下详细规则:
- 当遇到异常时,算法必须继续运行。
- 算法运行时发生的每个异常都必须被记录。
- 用户必须有机会引入自定义规则,决定算法如何处理各种异常。
容错允许算法基本上忽略所有不会导致其进程崩溃的错误。 虽然异常可能仍然会阻止代码执行,但容错大大减少了算法可能意外崩溃的次数。
OnException()` 方法
根据容错规则,算法必须忽略异常。 然而,您也可以自定义算法对某些异常的反应,或完全重写默认的容错行为。
为此,请使用 OnException() 方法。 它作为任何未处理异常的专用处理程序。 其默认签名如下:
1 2 3 4 | |
考虑以下示例,其中使用 OnException() 方法来改变 cBot 对 NullReferenceException 异常的反应。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |
为了抛出 NullReferenceException 异常,我们让 cBot 关闭一个可能不存在的空头仓位。 当遇到指定的异常时,我们的 cBot 应显示一个 MessageBox,显示解释性文本,这样我们就可以快速对这个异常做出反应并调整 cBot 的行为。
请注意,OnException() 处理程序不应处理在调用此方法时发生的异常。 尽管如此,这些异常仍会记录在事件日志中。
容错的好处
容错是 cTrader 算法交易工作方式的一个关键方面,它提供以下好处。
- 容错极大地提高了算法的可靠性,并为改进自动化交易方法提供了新的机会。
- 由于算法可以在事件日志中显示它们遇到的异常,您可以轻松确定算法遇到特定错误的条件。
- 通过允许处理异常事件,
OnException()方法可用于完善算法的行为并提高其可靠性。
处理崩溃
如前所述,几种错误可能会导致整个进程崩溃。 它们如下:
OutOfMemoryException异常。StackOverflowException异常。- 在单独线程中发生的任何未处理异常。
- 任何其他可能威胁到算法运行进程崩溃的错误。
当面对上述任何错误时,指标实例将被停止;它不会自动重启。 但是,异常仍会记录在日志中。
相比之下,当托管 cBot 实例的进程崩溃时,它将自动重启(异常会记录在日志中)。
单个进程中的多个实例
在某些情况下,单个进程可能托管多个 cBot 实例。 如果其中一个实例遇到导致崩溃的异常,整个进程也会崩溃。 重启时,该进程将重启它原本托管的所有 cBot 实例。
总结
容错为使算法更加稳定和有效提供了几个宝贵的机会。 OnException() 处理程序为控制算法对异常的反应提供了额外的控制层。