有个问题想问下:刷新图表或向右拖动图表获取更多数据的时候,程序中如何获知呢(是否对应什么事件)?谢谢
你可以通过 OnTimer 或者 OnTick,指标对应的是 OnCalculate
来轮询 最后一个可见 Bar 的价格,或者时间发生变化来获取状态的改变
这是最简单的办法
图表改变事件被触发
如果你写的是 MQL5 自定义指标,可以在 OnCalculate() 里检查 prev_calculated。加载更早的历史数据,或者补齐历史数据缺口后,终端会把它设为 0,此时应重新计算所需的有效数据区间,正常完成后返回 rates_total。
要注意,拖动图表改变可见范围,不一定加载了新的历史数据;CHARTEVENT_CHART_CHANGE 也不是“历史数据加载完成”的专用通知。
另外,首次计算时 prev_calculated 也是 0,程序上次返回 0 也会产生这个值。所以它适合判断“需要重新计算”,不能单凭它判断用户刚刚点了刷新。
MQL5文档: OnCalculate / 事件处理
- www.mql5.com
当 Calculate 事件发生时在指标中调用这个函数,来处理价格数据的变化。有两种函数类型。一个指标内只可以使用其中一种。 基于数据数组的计算 基于当前时间周期时间序列的计算 参数 rates_total [in] 可用于指标计算的price[]数组或输入序列的大小...