K线事件
算法开发者经常需要参考 K 线事件,以便及时执行交易策略,响应更新的价格。 API 为算法创建者提供了 BarOpened 和 BarClosed 事件,以微调 cBot 并在 K 线周期的不同点把握机会。
注意
K 线事件只能在编写 cBot 时处理。 相反,指标有 Calculate() 方法,该方法在每个跳动点上被调用。
在本指南中,我们解释了 OnBar() 和 OnBarClosed() 方法之间的区别,并提供了几个用例。
一分钟内的 K 线事件!
- 每当在添加实例的图表上绘制新的 K 线时,就会触发
OnBar()方法。 它是为新形成的 K 线调用的。 OnBarClosed()事件处理程序也在每个新 K 线上触发。 但是,它是为最后关闭的(即当前 K 线的前一个)K 线调用的。- 通过参考正确的 K 线事件,您可以提高技术分析的准确性,并为算法操作选择适当的时机。
BarOpened和BarClosed支持的图表类型包括时间 K 线图、K 线图、分时图、砖形图、区间图和平均 K 线图。
使用 OnBar() 方法
BarOpened 事件的发生取决于交易品种时间表和价格到来的频率。 通常,平台用户可以通过图表时间周期设置来调整 BarClosed 的发生。
注意
OnBar() 方法可以根据图表时间周期设置的允许频繁调用。 一旦 K 线关闭,OnBar() 将不会被触发,直到下一个跳动点到来,这在逻辑上会触发新 K 线的形成。
OnBar() 方法与附加算法的图表上绘制的每个新 K 线同时调用。 因此,OnBar() 处理程序是定义 cBot 应定期重复的自定义交易逻辑的理想位置。
在代码编辑器中,您可以按如下方式指定 OnBar() 处理程序:
override void OnBar()
使用 OnBarClosed() 方法
Algo API 还允许为最后关闭的 K 线执行逻辑,这可能是处理 BarOpened 事件的更方便和准确的替代方法,具体取决于您想要实现的策略。 在 K 线开盘时,新的 K 线显示为(十字星 K 线),不包含完整的技术分析数据。
BarClosed 事件是 BarOpened 事件的别名,这意味着只有在 BarOpened 事件发生时才会发生。 例如,如果交易品种在周末不交易,周五最后一根 K 线的 BarClosed 事件将在周一第一根开盘 K 线时发生。
注意
在跳动点到来形成新 K 线之前,不会调用 OnBarClosed() 方法。
OnBarClosed() 事件处理程序可以按如下方式声明:
override void OnBarClosed()
在 OnBarClosed() 方法的主体中,您可以确定当触发 BarClosed 事件时,您的 cBot 将执行哪些相关操作(例如,执行订单、勾勒模式、绘制技术分析可视化等)。
在此事件处理程序中访问时,Bars 集合不包含当前实时 K 线,而其他集合(如 Positions、Symbols 等) 包含实际数据。
OnBar() 和 OnBarClosed() 事件处理程序在回测和优化中按预期工作。 这两种方法都可以在不同的图表类型上使用,包括时间 K 线图、K 线图、分时图、砖形图、区间图和平均 K 线图。
创建示例 cBots
以下示例 cBot 在 EURCHF 图表上每三根 K 线开盘时下一个市价单。
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 27 28 29 30 31 32 33 | |
由于 cBot 在 m1 图表上启动,执行市价单之间的大约时间间隔为三分钟。

下面是一个带有嵌套方向运动系统(DMS)指标的 cBot 示例, 如果 DI+ 值(绿线)超过 DI- 值(红线),它会打印(上升趋势!)。

当 DI- 大于 DI+ 时,在 BarClosed 事件中打印(下降趋势!)。

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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | |
总结
Algo API 中存在的各种柱状图事件允许算法开发者为调用的方法选择精确的时机。 OnBar() 方法可以根据交易品种时间表和图表时间框架设置以不同的频率被调用,这也增加了 cBot 的功能性。 OnBarClosed() 方法是 OnBar() 的一个便捷别名,用于处理指标。