Skip to content

Commit

Permalink
更新文档
Browse files Browse the repository at this point in the history
  • Loading branch information
shinny-yangyang committed Jun 8, 2018
1 parent 59851ea commit 15f8ebd
Show file tree
Hide file tree
Showing 16 changed files with 367 additions and 725 deletions.
2 changes: 1 addition & 1 deletion README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ DIFF (Differential Information Flow for Finance) 是一个基于websocket和json

* 使用统一易扩展的结构, 易于编程实现,典型的客户端代码仅需数十行即可处理行情/交易/历史数据等全部业务需求
* 对于各平台和编程语言均有良好支持
* 开发及测试工具完备
* 开发及测试工具完备
* 支持标准的 SSL 传输加密
* 支持传输压缩
* 为移动网络环境特别优化,避免延迟累积效应
Expand Down
95 changes: 89 additions & 6 deletions funcset/mdhis.rst
Original file line number Diff line number Diff line change
@@ -1,13 +1,96 @@
.. _wsapi_general:
.. _mdhis:

K线数据及历史tick数据
图表数据(K线数据及历史tick数据
==================================================

获取K线及Tick线数据
请求订阅图表数据
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
扩展进程可以发送 :ref:`set_chart` 来请求订阅图表数据, 需要注意几点:
终端通过发送 set_chart 包实现订阅图表数据

.. code-block:: javascript
* 合约代码必须带交易所代码, 合约代码及交易所代码都是大小写敏感的
* 主进程给扩展进程推送的数据, 不保证只含有订阅的合约
{
"aid": "set_chart", // 必填, 请求图表数据
"chart_id": "abcd123", // 必填, 图表id, 服务器只会维护每个id收到的最后一个请求的数据
"ins_list": "SHFE.cu1701", // 必填, 填空表示删除该图表,多个合约以逗号分割,第一个合约是主合约,所有id都是以主合约为准
"duration": 180000000000, // 必填, 周期,单位ns, tick:0, 日线: 3600 * 24 * 1000 * 1000 * 1000
"view_width": 500, // 必填, 图表宽度, 请求最新N个数据,并保持滚动(新K线生成会移动图表)
}
需要注意几点:

* chart_id 为一个任意字符串,当多次发送的set_chart包中的chart_id重复时,后一次的请求将覆盖前一次。chart_id不相同则视为不同的订阅
* 历史数据服务是订阅式而非查询式的。只要发送过一次 set_chart 请求,每当行情变化时,都会通过 rtn_data 包推送新的K线,不需要多次发送 set_chart 包


图表数据同步
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
图表数据通过 `rtn_data` 包的 klines 字段和 ticks 字段进行差分发送, 如下所示:

.. code-block:: javascript
{
"aid": "rtn_data", //数据推送
"data": [ //diff数据数组, 一次推送中可能含有多个数据包
{
"klines": { //K线数据
"SHFE.cu1601": { //合约代码
180000000000: { //K线周期, 单位为纳秒, 180000000000纳秒 = 3分钟
"last_id": 3435, //整个序列最后一个记录的序号
"data": {
3384: {
"datetime": 192837400000000, //UnixNano 北京时间,如果是日线,则是交易日的 UnixNano
"open": 3432.33, //
"high": 3432.33, //
"low": 3432.33, //
"close": 3432.33, //
"volume": 2, //成交量
"open_oi": 1632, //起始持仓量
"close_oi": 1621, //结束持仓量
},
3385: {
...
},
...
},
"binding": {
"SHFE.cu1709": {
3384: 2900, //本合约K线所对应的另一个合约的K线号
3385: 2950,
...
}
}
},
...
},
...
},
"ticks": {
"SHFE.cu1601": {
"last_id": 3550, //整个序列最后一个元素的编号
"data": {
3384: {
"datetime": 1928374000000000, //UnixNano 北京时间
"trading_day": 1928374000000000, //交易日的UnixNano 北京时间
"last_price": 3432.33, //最新价
"highest": 3452.33, //最高价
"lowest": 3402.33, //最低价
"bid_price1": 3432.2, //买一价
"ask_price1": 3432.4, //卖一价
"bid_volume1": 1, //买一量
"ask_volume1": 2, //卖一量
"volume": 200, //成交量
"open_interest": 1621, //持仓量
},
3385: {
...
},
...
}
},
...
},
]
}
}
74 changes: 60 additions & 14 deletions funcset/quote.rst
Original file line number Diff line number Diff line change
@@ -1,26 +1,72 @@
.. _wsapi_general:
.. _quote:

行情报价数据
==================================================

请求订阅行情报价
--------------------------------------------------
终端通过发送 subscribe_quote 包实现订阅行情报价

.. code-block:: javascript
从主进程接收业务数据
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
当从主进程向扩展进程发送数据时, 与其它很多协议不同, 天勤的通讯协议并不会按照 "类别" 或 "请求", 将数据分解为多个包发送.
相反, 天勤只使用一种包 :ref:`rtn_data`, 来将主程序内存中的全部数据 (实时行情, 历史行情, 交易数据等) 送往扩展进程.
为减少数据量, 主程序每次发送 :ref:`rtn_data` 时, 通常只包含与前次相比有差异的数据. ( **注意: 协议并不承诺无差异的数据一定不会发送** )
{
"aid": "subscribe_quote", //必填, 请求订阅实时报价数据
"ins_list": "SHFE.cu1612,CFFEX.IF1701", //必填, 需要订阅的合约列表,以逗号分隔
}
基于这一协议, 我们强烈建议 **扩展进程应设法维护一个完整的业务信息存储区** (在内存,数据库或文件中), 并在每次收到 :ref:`rtn_data` 时更新此存储区中的内容.
扩展进程中的业务代码, 应从这一存储区中获取业务信息, 而 **不要直接让业务逻辑处理接收到的每个:ref:`rtn_data`包**


请求实时行情数据
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
扩展进程可以发送 :ref:`subscribe_quote` 来请求订阅行情数据, 需要注意几点:
需要注意几点:

* 合约代码必须带交易所代码, 例如cu1801应该写作 SHFE.cu1801. 目前支持的交易所为 CFFEX, SHFE, DCE, CZCE, INE
* 用户自定义的组合, 交易所代码都为 USER
* 合约代码及交易所代码都是大小写敏感的
* 主进程给扩展进程推送的实时行情, 不保证只含有订阅的合约, 未订阅合约的行情也可能在数据包中出现
* 每次发送 subscribe_quote 时,应在 ins_list 中列出所有需要订阅的合约代码。多次发送 subscribe_quote,后一次的订阅列表会覆盖前一次的


行情报价数据同步
--------------------------------------------------
行情报价数据通过 `rtn_data` 包的 quotes 字段进行差分发送, 如下所示:

.. code-block:: javascript
{
"aid": "rtn_data", //数据推送
"data": [ //diff数据数组, 一次推送中可能含有多个数据包
{
"quotes": { //实时行情数据
"SHFE.cu1612": {
"instrument_id": "SHFE.cu1612", //合约代码
"volume_multiple": 300, //合约乘数
"price_tick": 0.2, //合约价格单位
"price_decs": 1, //合约价格小数位数
"max_market_order_volume": 1000, //市价单最大下单手数
"min_market_order_volume": 1, //市价单最小下单手数
"max_limit_order_volume": 1000, //限价单最大下单手数
"min_limit_order_volume": 1, //限价单最小下单手数
"margin": 4480.0, //每手保证金
"commission": 2.5, //每手手续费
"datetime": "2016-12-30 13:21:32.500000", //时间
"ask_price1": 36590.0, //卖价
"ask_volume1": 121, //卖量
"bid_price1": 36580.0, //买价
"bid_volume1": 3, //买量
"last_price": 36580.0, //最新价
"highest": 36580.0, //最高价
"lowest": 36580.0, //最低价
"amount": 213445312.5, //成交额
"volume": 23344, //成交量
"open_interest": 23344, //持仓量
"pre_open_interest": 23344, //昨持
"pre_close": 36170.0, //昨收
"open": 36270.0, //今开
"close": 36270.0, //收盘
"lower_limit": 34160.0, //跌停
"upper_limit": 38530.0, //涨停
"average": 36270.1, //均价
"pre_settlement": 36270.0, //昨结
"settlement": 36270.0, //结算价
},
},
]
}
}
Loading

0 comments on commit 15f8ebd

Please sign in to comment.