期权因为合约众多而且合约存续期短,换合约快,所以大家处理起来比较麻烦,加上内部存储是以10000873.XSHG这样的名字进行存储,而我们实际处理的都是1810C2500(18年10月看涨期权,行权价2500),所以需要建立一个两者之间一一对应的关系,方便检索。在这里,提供一个小思路。
第一步,遍历10000001.XSHG到10010000.XSHG,搜寻失败则跳出循环(失败相当于没有更多合约可以搜索到)。假设现在是10000873.XSHG,下一步寻找到对应的trading_code(格式为510050C1810M02800),然后重新拼接字符串,编成1810C28000873的新格式(实际存储时以1代替C,2代替P),前半段是我们通常理解的期权合约编号,后半段实际上就是系统内的合约编号,两个被联系到了一起
第二步,对该编号系统进行排序,排序完的结果,相当于先按照1810即年份进行排序,然后是C,再次是行权价格,这样就形成了一个我们熟悉的期权列表
结果如下图所示
每串数字的前半段是我们通常理解的期权合约编码方法(合约月份 看涨1看跌2 行权价格,后半段对应的就是XSHG编码的系统内编号,稍加处理成10000873.XSHG的格式就能从系统内读到期权数据了)
需要注意一点的是,50ETF期权优于年底有分红机制(最近三年时间分别是2016.11.29 2017.11.28 2018.12.03),所以在这三个时间点前后,会存在同一个期权合约编码对应两个系统内编号的情况,比如18122220001412和18122220001624,即18年12月行权价2200的看跌期权,有两个系统内的合约对应,分别是10001412.XSHG和10001624.XSHG,前者应用于2018年12月3日以前的行情,后者应用于2018年12月3日及之后的行情,这是由于ETF标的分红造成的情况,因此,在读取期权数据时,需要判断一下是否有这类敏感情况。