自定义指标生命周期
示例代码结构
本文将引导您了解代码结构,并解释 cTrader 指标的事件和生命周期背后的逻辑。 要访问自定义指标,请打开 Algo 应用中的 Local 选项卡。

例如,您可以创建一个名为“LifeCycle Test”的新指标,代码编辑器窗口中提供了以下示例代码。

要重置为样板版本,请复制以下代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | |
乍一看,代码结构仅包含两个方法,即 Initialize() 方法和 Calculate() 方法。 点击 Build 继续测试此指标。 我们将添加一个名为 OnDestroy() 的附加方法,稍后解释其用途。
初始化事件
当 cTrader 指标首次附加到图表上或用户更改任何参数设置时,将重新创建指标实例并调用 Initialize() 方法。 它用于初始化您计划在指标中使用的任何变量。 您还可以定义和引用其他指标,以使用其他指标的公式创建单个指标。
默认情况下,新代码模板包含一个名为 Message 的参数设置,其值为“Hello world!”。
1 2 | |
在 Initialize() 方法中,有一行代码将此消息打印到日志中。
1 | |
为了演示 Initialize() 方法,请通过点击 Build 图标旁边的 Plus 图标并选择一个交易品种来添加指标实例。 如果您点击指标行中的 More 并选择 Add an instance,将自动添加 EURUSD 交易品种和 h1 时间框架。

注意
在 cTrader Algo 中添加实例与在 Trade 应用程序中将指标附加到图表相同。
现在,打开图表下方的 Trade Watch 面板中的 Log 选项卡。 如您所见,消息“Hello world”已被打印。

每次首次将指标添加到图表或更改参数时,图表都会刷新并再次调用 Initialize() 方法。 在 Parameters 部分中输入不同的消息,以查看日志条目相应更新。

计算指标输出
Calculate() 方法为每个历史数据索引和每个传入的报价调用。 例如,如果当前图表有 1000 根柱,Calculate() 方法将为索引 0、1、2 等调用,最多到 999。
1 | |
在高波动期间,Calculate() 方法每秒可能被调用多次,而在市场平稳时调用次数较少。 要测试其工作原理,您可以在 Calculate() 方法的主体中添加一行代码,以打印传递给该方法的每个新数据报价的索引值。 每次在代码编辑器窗口中添加更改后,不要忘记点击 Build。
1 | |
要从代码编辑器窗口切换到图表,请点击添加的指标实例。 如果您打开 Trade Watch 面板中的 Log 选项卡,您将看到为传递给该方法的每个索引打印的值。

OnDestroy() 方法
当指标从图表中移除且不再需要时,将调用 OnDestroy() 方法。 您需要实现此方法,因为它在创建新指标时默认不会添加。
1 2 3 4 | |
此方法对程序员很有用,因为它允许他们释放非托管资源并执行最终任务。 它有助于防止内存泄漏,并确保指标在移除后不会保留资源。 示例包括关闭与外部数据源的连接、释放大数据对象以及其他释放内存的操作。
总结
总之,Initialize()、Calculate() 和 OnDestroy() 方法说明了自定义指标生命周期的不同阶段。 通过调整 Algo 应用中的示例代码,您可以自由决定如何初始化指标变量、计算指标输出并运行最终任务。
