以下是来自于通义对源代码的解析
- TR 的标准定义:True Range (真实波幅) 的定义就是 max(high, prev_close) - min(low, prev_close)。它天然地就需要用到前一根 K 线的收盘价来计算当前 K 线的 TR。
- iATR 函数也是如此:如果您在 MQL 中直接使用 iATR 函数,它的内部实现同样是基于 TR 的,也会需要 prev_close。这个 prev_close 是计算 TR 所必需的历史信息,而不是计算当前 K 线 i 的指标值所使用的“未来”信息。
- 信息流是正确的:在计算 K 线 i 的 TR 时,K 线 i+1 (前一根) 的 Close 已经是确定的、历史的数据了。K 线 i+1 已经完全形成并收盘。因此,使用 close[i+1] 来计算 tr 是完全符合逻辑和标准的,不违反“不能使用未来数据”的原则。
总结这个 ATR Bands 指标在计算过程中,无论是获取价格 (getPrice)、计算 TR、计算移动平均线 (iCustomMa) 还是计算上下轨,都只使用了当前 K 线 i 及其之前(i+1, i+2, ...)的历史数据。它没有使用任何 i-1, i-2 等代表未来(更晚形成)的 K 线数据来计算 i 位置的值。
因此,这个指标没有未来函数。它的计算逻辑是基于标准的金融指标定义,正确地使用了历史数据。
|