引言
在传统的领域模型中,链代码用来代表有关联的一系列RIC代码。链代码本身并不提供价格或者市场变动信息,然而它提供了特定市场的成分列表,比如一个特定期权合约的成交价格列表。
下图展示了道琼斯工业平均指数的链代码0#.DJI的结构
[1]
:
这个链式结构可以使用Elektron SDK的EMA API通过适当的算法
[1][2][3]
跟随指针,进行扁平化展开。
另一种更为简单的做法是借助于 Refinitiv Tick History (RTH) REST API
[4]
的 historical chain resolution 方法,获得一个时间点或者时间区间内的链代码成分全集。除了 REST API 方式外,Tick History 历史数据也可以通过 Google Cloud Platform 的 BigQuery 来进行查询。
下面我们使用业内流行的 Go 语言实现 historical chain resolution 方法调用,方便采用 Go 语言实现的后端进行集成。
预备知识
-
RTH基本使用方法
[4]
-
Go语言基本知识
[5]
JSON 编解码
接下来,我们以美股ETF的链代码 0#US-ALLETF 为例,获取2020年9月20日的成分。如果通过测试工具直接调用 API,请求和相应的返回结果是这样的:
在返回结果中,我们可以看到 @odata.context 这个 json key,它的 value 指明了使用的 service metadata。RTH 使用的是 OData
[6]
JSON 格式。采用 EDMX 表示的 service metadata 可以通过登录RTH访问到。例如,上面例子中的请求使用的 metadata:
这段 metadata 表明 HistoricalChainResolution 请求需要指定被解析的链代码和时间段。
Go 语言用来进行 JSON 编解码的常见方式有三种:
-
直接字符串
简单但是不够灵活,容易产生错误。
-
使用map
编码:
解码:
这种方法的问题是字段的顺序无法保证一致。
-
使用自定义类型
这是本文所采用的方式,定义便于后续处理的请求和返回类型以及编码器(marshaller)
请求类型
注意到这里的 Metadata 字段,定义了两个tag,第一个 json tag 表明这个 struct 字段对应于 json 的 @odata.type 字段,而 odata 这个 tag 是自定义的,后面的自定义编码器会用到,提取这个长字符串 value 作为 @odata.type 这个 json 字段的值。
返回类型
分别定义了获取 token 的返回,以及chain resolution请求的返回。
自定义编码器
这里使用 Go 语言的反射机制获取 struct 的 odata tag 的值赋给 Metadata 字段。
编码
解码
请求调用返回流程
1.
获取鉴权 token
2.
使用 token 进行 chain resolution POST 调用
3.
解析结果到自定义类型中
实测
以调试模式运行程序,获得程序运行时内部结构表示:
对比之前使用测试工具得到的文本结果可知,解析得到了关注的字段(不需要是全字段),也即在结构体 中定义了的字段,便于后续程序处理。
小结
本文讨论了采用 Go 语言结合 RTH 接口实现链代码解析的方法。在此基础上,我们可以充分挖掘接口提供的能力,从具体用例出发在以下方面进行改进:
-
在下载文件的场合,打开接口的 AWS 下载开关,结合使用并发 Goroutine 提高下载速度。
-
在需要做查询的场合,可以使用 GCP BigQuery,结合相关技术栈进行实现。
参考资料
-
https://developers.refinitiv.com/en/article-catalog/article/simple-chain-objects-ema-part-1
-
https://developers.refinitiv.com/en/article-catalog/article/simple-chain-objects-ema-part-2
-
https://developers.refinitiv.com/en/article-catalog/article/building-chain-expander-application-using-elektron-websocket-api-and-net-core-c
-
https://developers.refinitiv.com/en/api-catalog/thomson-reuters-tick-history/thomson-reuters-tick-history-trth-rest-api
-
https://golang.org/
-
https://en.wikipedia.org/wiki/Open_Data_Protocol
免责声明:
以上所有意见仅供参考,里面内容并不构成投资建议,如因为这报告内容而招致任何损失,恕公司团体绝不负责。