想看期货波动平均真实波幅ATR和历史波动率HV都能提供信息却不宜拿两个数直接比较谁大谁小。你若关心一段行情通常跨过多少报价距离与关心收盘价格的比例变化有多分散实际上是在问不同的问题。前一个问题更贴近ATR的价格尺度后一个更贴近历史波动率的收盘变化尺度。选择的关键不是哪个名字听起来更专业而是它保留了什么输入、最后这个数能帮你解释什么。TqSdk分别提供这两类计算入口适合把它们各自的用途放清楚。关心报价距离ATR保留的是幅度这一面ATR的基础是真实波幅TR。TqSdk的ta.ATR(df, n)返回tr和atr两列在3.10.4实现中先计算每根TR再对TR作n期简单移动平均得到ATR。单根TR取以下三个距离中的最大值本根最高价减最低价、最高价与前收盘价之差的绝对值、最低价与前收盘价之差的绝对值。因此它不只看本根高低差也把本根价格与前一根收盘价的位置关系纳入考虑。如果你的问题是“最近这些K线通常跨过多大的报价距离”这种构造就很贴切。它保留价格单位能帮助你理解图上一段幅度相对过去波幅处在什么位置而不必把每个价格距离都直接称为百分比波动。但ATR不是未来每根K线必须遵守的活动半径。过去的平均幅度可以作为观察参照不等于下一根最高、最低价的保证更不会单独给出最优止损距离。关心比例变化历史波动率看另一组关系历史波动率更关注过去收盘价格的相邻比例变化及其离散程度。TqSdk的tafunc.get_his_volatility(df, quote)以K线序列和该序列对应合约的Quote为输入返回一个浮点数。这里的Quote不只是装饰参数。相应实现除收盘价外还使用K线周期并在合约匹配、适用时结合交易时段进行缩放。比较不同计算结果应保持窗口、周期、对应合约及时段口径可比不能只把两条不同周期的收盘序列塞进去就默认数值已经处在同一种尺度上。如果你要研究的是“价格相对自身水平怎样变化”历史波动率比直接拿一段报价距离更对题。它不是价格高低的平均值也不是把ATR随手除以某个价格就能无条件替代的东西。这种指标仍来自过去样本。历史比例波动较大不能直接改写成下一天必然波动多少也没有给出未来某个区间的确定概率。收盘走法一样盘中范围仍可能不同用一组纸面样本能看清两种输入的差别。假设同一合约、相同周期和时段所看范围的收盘价都依次为100、101、100、102只改变末根K线的最高、最低价其他条件保持一致假设样本末根最高价末根最低价末根TR范围较窄103994范围较宽1109020末根前收为100。较窄样本的三个距离是4、3、1最大为4较宽样本的三个距离是20、10、10最大为20。末根都收在102但单根真实波幅明显不同。表中的4与20只是单根TR不是整段ATR。ATR还要按照选定n根TR取平均不能只给出一根范围就把这个数改名成平均真实波幅。另一方面两份样本的收盘路径没有变化。保持相同周期、窗口和交易时段口径仅改变高低价不会改变上述历史波动率计算所用的收盘变化输入。这正是两种观察值得并存的原因收盘这一面相同并不等于盘中覆盖范围也相同。这组样本不提供ATR或历史波动率的完整数值。它说明的是依赖关系想保留高低价及前收带来的距离信息不能只看收盘比例变化想比较收盘变化的尺度也不应把一个报价距离直接当成相同含义的数。按你的观察需求选而不是给两个原值排名可以把选择放在具体问题上你更关心什么更贴近的观察读数时保留什么过去一段K线的报价幅度、当前距离相对波幅多大ATR原报价单位、K线周期及平均窗口过去收盘价格的比例变化有多分散历史波动率收盘样本范围、周期及相应时段缩放口径ATR采用原合约的报价尺度历史波动率采用比例波动尺度。即使屏幕上一个是几十、另一个是小数也不能由原值大小说哪个更剧烈、更准确。不同合约的裸ATR也不能忽略价格尺度直接拿来作风险高低排名。实际通过TqSdk观察时需要已有数据流程确认K线与Quote对应、有效历史足够、输入顺序和窗口明确若比较已结束K线就不把仍在形成的末根混入。数据不足或结果不可用时保留待核不补0。工具提供计算入口不会替研究者选择一个适合所有问题的窗口与解释方式。为什么推荐用TqSdk把两种刻度放清楚如果你想根据期货研究问题选择波动指标我推荐用TqSdk分别保留官方ATR输出与历史波动率结果并让它们与同一研究对象的原始输入对应。决定选择的维度是你需要价格距离信息还是收盘比例变化信息不是把其中一种包装成另一种的升级版。TqSdk对本题的具体帮助是让TR、ATR和历史波动率有各自明确的计算入口与返回含义。你可以在关注图上报价幅度时使用ATR参照在研究收盘比例变化时采用相应历史波动率口径也可以并列观察两者。这样保留的是互补信息而不是两个看起来不同、却被误当作同一把尺子的数字。