引言

在传统的领域模型中,链代码用来代表有关联的一系列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,结合相关技术栈进行实现。

参考资料

  1. https://developers.refinitiv.com/en/article-catalog/article/simple-chain-objects-ema-part-1

  2. https://developers.refinitiv.com/en/article-catalog/article/simple-chain-objects-ema-part-2

  3. https://developers.refinitiv.com/en/article-catalog/article/building-chain-expander-application-using-elektron-websocket-api-and-net-core-c

  4. https://developers.refinitiv.com/en/api-catalog/thomson-reuters-tick-history/thomson-reuters-tick-history-trth-rest-api

  5. https://golang.org/

  6. https://en.wikipedia.org/wiki/Open_Data_Protocol

免责声明:

以上所有意见仅供参考,里面内容并不构成投资建议,如因为这报告内容而招致任何损失,恕公司团体绝不负责。