定义
期货交易所按交易日期来结算、报告和清算。由于 Globex 在每日休市之后于芝加哥时间 17:00 重新开盘,从那个晚上起的成交属于下一个营业日的时段:它们按那一天的结算价结算,并出现在那一天的对账单上。
这个约定不是一个技术细节:它决定了「今天」在期货上指的是哪一段时间,而所有按天组织的统计量都跟着它。
算例
- 周日芝加哥时间 18:30:交易日期是周一。
- 周一芝加哥时间 10:00:交易日期是周一。
- 周一芝加哥时间 17:15,在重新开盘之后:交易日期是周二。
- UTC 的午夜在冬季落在芝加哥时间 18:00(CST,UTC−6)、在夏季落在 19:00(CDT,UTC−5):也就是新交易日开始之后一到两个小时,所以一个 UTC 的日界线会把一个时段切成两半。
它为什么对订单流工具要紧
基于时段的计算——比如一个时段 VWAP、一个时段累积 Delta、一个每日成交量分布,或者每日的高低点——必须用和交易所相同的边界,否则它们的数值不会和参考平台吻合。
来自交易所的每日统计量,包括结算价、成交量和未平仓量,全部是按交易日期组织的。所以用一个自定义的日界线去算这些量,等于在算一个交易所那边不存在的东西。
为什么不能用一个固定的时区偏移
17:00 这个边界是按芝加哥的本地时间定义的,而芝加哥在三月到十一月之间实行夏令时。所以这条边界在 UTC 里一年会移动两次:冬季是 23:00 UTC,夏季是 22:00 UTC。把它写成一个固定的 UTC 偏移,会在夏令时切换的那两个周末把时段切错一个小时。
正确的做法是用操作系统的时区数据库去解析「America/Chicago 的 17:00」,而不是自己去算偏移。这还有一个附带好处:当某个年份的切换日期改变时,不需要改任何代码。顺带一提,交易所的假期时间表也以同一个本地时间为基准,所以同一套解析方式可以复用。
在 Senzoukria 里
图表用来自系统时区数据库的芝加哥时区、以 17:00 为边界,按芝商所交易日把 K 线分组;时段键是这个时段开盘所在的那个日历日期,所以周日晚上的成交被归到周日开盘的那个时段键上。
而自营公司的演示模拟按「这个时段结算的那个日期」来给它的天数编键,所以同样这些成交落在周一下面。两者分组的是完全相同的成交;只有标签差了一天,而这一点在把一张图表的时段和一份对账单做比较时值得知道。
常见错误
- 把任何时区的午夜当成期货的时段边界。
- 拿一个按日历日期算出来的每日合计,去和交易所按交易日期给出的数字做比较。
- 忘掉夏令时切换时 UTC 偏移的那一个小时的变化。
相关内容
同一栏目
其他语言版本
常见问题
- 为什么周日晚上算周一?
- 因为在周日芝加哥时间 17:00 开盘的那个时段,在周一下午收盘;而交易所把整个时段归属到它收盘并结算的那一天。
- 我平台的日线和另一个平台不一样,为什么?
- 一个平台可能在某个时区的午夜切天,而另一个用交易所的芝加哥 17:00 边界。于是同样这些成交落进了不同的日线里。