一个期货代码的几个部分
- 品种代码:这个产品(MNQ、ES、CL)。
- 月份代码:交割月份的那个字母(六月是 M)。
- 年份:一位或两位数字(6 或 26)。
- 交易所:CME Group 之内的挂牌场所(CME、CBOT、NYMEX 或 COMEX),有些系统把它作为一个单独的字段或后缀携带。
一张合约,好几种拼法
| 来源 | 拼法 | 它标识什么 |
|---|---|---|
| Rithmic(代码 + 交易所) | CME 上的 MNQM6 | 一张合约 |
| NinjaTrader | MNQ 06-26 | 一张合约 |
| Quantower | MNQM6 | 一张合约 |
| Databento 原始代码 | MNQM6 | 一张合约 |
| Databento 连续代码 | MNQ.v.0 | 每一天按移仓规则排在第一的那张合约 |
| Databento 父级代码 | MNQ.FUT | MNQ 的每一个工具,包括价差 |
连续代码与父级代码
一个连续代码命名的是一条规则,而不是一张合约。在 Databento 的约定里,中间那个字母是移仓规则(c 日历、n 未平仓量、v 成交量),而那个数字是排名,0 是第一。MNQ.v.0 背后的工具在移仓时会变,所以单凭这个代码并不告诉你一笔成交属于哪一个到期日。一个父级代码把这个产品的每一个工具都归到一起,单腿和价差都算,这对批量下载很方便,而对画图很危险。
在 Senzoukria 里
本机缓存里的 K 线,键是 品种代码 + 月份字母 + 年份数字 + 「.」 + 交易所。Rithmic 本来就构造成那个形式;而桥接代码在被保存时会被归一到它,所以来自 NinjaTrader 的「MNQ 06-26」和来自 Quantower 的 MNQM6,都落到 MNQM6.CME 之下。没有这一步,同一张合约就会占着三组彼此看不见的行,而换一个连接器看起来就会像是缓存空了。一个品种代码不在目录里的代码,保留它原始的键,而不是被丢掉。
Databento 的导入器逐个工具地读那份代码映射:一个原始代码映射到一张目录里的合约;一条连续序列被存成 MNQ-I 后面跟着那个工具编号、归在 MNQ 这个品种代码之下,因为这条序列并不命名那张合约;而一个像 MNQ.FUT 这样的父级代码不被导入,因为它的映射里包含价差,而在没有工具定义的情况下,那些价差无法和合约区分开来。
一个算例
「MNQ 06-26」被解析为品种代码 MNQ、月份 06、年份 26。月份 06 转成 M,年份 26 转成数字 6,而目录把 MNQ 映射到 CME,于是给出键 MNQM6.CME。一张把 06 变成 U 的错误月份表,会产生 MNQU6.CME,也就是九月那张合约,并且悄悄地把两个到期日混在一起。
常见错误
- 比较存在同一张合约两种拼法之下的 K 线,然后得出历史缺失的结论。
- 在一个连续代码上下委托;委托总是去到一个具体的到期日。
- 下载一个父级代码,并把价差当作单腿价格来画图。
相关内容
同一栏目
其他语言版本
常见问题
- MNQ.v.0 是一张我能交易的合约吗?
- 不是。它是一条连续序列,跟随每一天按成交量排在第一的那张 MNQ 合约。它对跨移仓的研究有用,但委托总是下在一张具体的合约上,比如 MNQU6。
- 我从一个桥接切到 Rithmic 之后,历史为什么看起来空了?
- 因为用一种拼法写进去的数据,用另一种拼法去查是看不见的。Senzoukria 在保存时会把已知的桥接拼法归一到一个键上;而一个品种代码不在它目录里的合约保留它原始的拼法,而以那种方式存下来的 K 线,也只能在那种拼法之下被找到。