QDII转换机工作汇总
1 概述
目前,我主要负责QDII的报盘,涉及证券代码的资讯、行情、交易报盘等任务。
操作手册《QDII操作手册-转换机部分.docx》 1 、设计文档 2。清单如下:
- qdii_archivehq (
境外行情归档
,境外业务日期自动切换
) - qdii_baseinfo (一系列
彭博行情文件转换任务
) - qdii_fix (
FIX转换任务
) - qdii_futhsfix (
境外FIX期货报盘
) - qdii_hsfix (
恒生FIX转换任务
) - qdii_realhq (
彭博实时行情任务
,聚源行情转换任务
) - qdii_reuterhq (
路透Xtra3000行情转换
) - qdii_spfut (
境外统一期货委托
、境外统一期货成交
、境外统一期货行情
)
下面有
√
的任务需要代码走读。
2 转换任务逻辑
境外行情归档/ 境外业务日期自动切换
境外行情归档
首次启动检查境外非期货市场是否有历史行情(tstockinfo每个市场只保留一天的行情数据),有历史行情则进行行情填充(sp_qdii_makeup_stockinfo)。
然后任务一直检查是否有市场闭市,然后执行行情归档操作(sp_qdii_market_store)
境外业务日期自动切换
线程1 负责循环调用存储过程:sp_qdii_marketbusintrance(根据市场和品种进行业务日期的切换)
线程2 负责循环调用存储过程:sp_qdii_businentrancefuture(期货基金业务初始化)
FIX转换任务 √
功能:
(1) 负责进行境外股票、期货的委托报送,确认和成交
(2) 支持合笔与分笔委托报单
参考文档:《FIX转换机详细设计.docx》
恒生FIX转换任务
逻辑与《FIX转换任务》类似。
区别:FIX转换任务调用的是appia.dll收发FIX报文,恒生FIX转换机采用的是HSFIX引擎。
注意:HSFIX执行路径不能含中文,否则启动会报错,报错截图详见QDII操作手册1
境外FIX期货报盘
逻辑和《HSFIX转换机》类似,只是调用的后台服务不同。
境外统一期货报盘(含委托、成交、行情) √
目前支持香港SP柜台。
详见《SharpPoint报盘详细设计.docx》2
彭博资讯文件导入(10个)√
逻辑:IniVar(Load)→Parse→CheckData→Import,主要更新的表:tstockinfo,tstockmarketinfo,thisstockinfo
(1)加载基础数据,初始化数据库连接;
(2)Parse从csv文件中读取一行数据;
(3)CheckData对该行记录做合法性检查(长度、类型等),然后进行数据处理;
(4)Import拼接SQL并执行。
下面仅以“彭博期货信息”导入任务为例展开。
Task | 导入的表 |
---|---|
境外证券信息导入 | tstockinfo,tstockmarketinfo,thisstockinfo,treutersstockinfo |
境外收盘行情导入 | tstockinfo,tstockmarketinfo |
境外外汇信息导入 | tcurrencyrate(币种汇率表) |
境外股本信息导入 | tstockinfo,tstockmarketinfo |
tbondproperty | |
彭博债券信息导入 | tstockinfo,tstockmarketinfo,thisstockinfo,tbondproperty |
境外期货信息导入 | treutersstockinfo,tstockinfo,thisstockinfo, tstockmarketinfo,TFUTURESINFO,TQDIIFUTURESINFO |
路透DSS公司行为数据导入 | treuterscorpactioninfo |
彭博公司行为数据导入 | tbloombergcorpactioninfo |
实时行情任务(3个)√
彭博实时行情任务:
主要通过Bloomberg DesktopAPI的库,向彭博终端订阅实时行情。
回调接口SessionProcessEvent来接收事件消息、实时行情,并放入行情队列hqMemoData。
行情刷新线程调用服务svc_qdiirealhq,刷新后台实时行情。
接口文档:Documents\D9.接口文档\01.QDII基础数据接口\bloomberg\B1.彭博 Desktop API
路透Xtra3000行情转换:
主要通过Reuter的rtx实时行情库,先查询stockinfo中境外市场的代码,然后按照代码订阅路透的实时行情AdxRtList.RegisterItems(stockcode)
,同样调用svc_qdiirealhq服务来刷新实时行情。
接口文档:Documents\D9.接口文档\01.QDII基础数据接口\Reuters\R2.路透Xtra3000行情
聚源行情转换任务:
通过读取dbf来获取实时行情,目前仅支持港股的实时行情。同样调用svc_qdiirealhq
服务来刷新后台实时行情。
导入样例文件:
HKQuotes.dbf
后台服务 (svc_qdiirealhq、svc_qdii_blcoaction) √
**实时行情服务:**svc_qdiirealhq
逻辑:前台传入 |
分隔的批量行情数据包,服务每次解析一条,根据前台传入标志isSaveToDB=0, 则把行情写入共享内存ChangeStockHq();
否则调用RefreshDBStkInfo()更新数据库行情(更新停牌标志和涨跌停价格),主要更新的表:tstockinfo,tstockmarketinfo。
**公司行为:**svc_qdii_blcoaction svc_qdii_singlecoac
svc_qdii_blcoaction: 支持导入的彭博公司行为数据类型:配股、红利、红股、股份拆分。
逻辑:该服务每次处理一条公司行为数据,然后插入(或更新)到tcorpactioninfo表中。
svc_qdii_singlecoac: 支持的Reuter公司行为数据类型:红股、红利、红利选择、资本回报、股份拆分、股份合并、派送红股、配股。
逻辑:和svc_qdii_blcoaction类似。
3 小工具
FIX回报重演工具(Fixrep)
Description:
一个模拟券商:主要通过读取 Appia Engine 的日志数据,然后接收appia engine 发送的委托数据,和日志中的委托数据进行对比,匹配成功则发送对应的执行报告。
实现逻辑:
参考文档:《FIX回报重演设计方案.docx》2
SVN: \QDII\trunk\developtools\Fixrep
Doc: \QDII\trunk\developtools\Fixrep\FIX回报重演工具使用说明.pdf
FixSimulator模拟成交工具
Description:
FIX模拟成交工具:支持恒生FIX转换机、FIX转换机。
SVN: \QDII\trunk\developtools\FixSimulator
Doc: \QDII\trunk\developtools\FixSimulator\README.pdf
FIX日志解析工具
彭博SAPI行情下载工具(or XLSX模板获取)
彭博SAPI行情工具需要客户购买彭博的SAPI接口才能使用;如果没有购买,就采用Excel模板通过彭博Excel插件来获取资讯和行情数据。
彭博SAPI行情使用请参考《彭博取数工具操作手册.docx》3
XLSX模板
svn路径:Install\BloombergExcel导出模板
4 UFX/EI交易
EI交易服务
EI作用是在ASAR外面再封装一层,给HS内部其他系统,可以用功能号的方式调用。
UFX交易服务
5 问题分析
以下是我解决或遇到的几个问题,个人觉得比较有意思,和大家分享一下,希望能有帮助。
(1)头文件未引用(source:lizp
)
问题分析:
能够正常编译和运行(编译时会有警告)
|
|
如果不包含头文件,会生成缺省的定义
|
|
如果在64位的机器上运行,当函数返回一个大于32位的指针时,高位就会被截断,从而导致程序崩溃。
建议:正确包含头文件,且不要有头文件的循环引用。
(2)关于文件编码的问题(source:wangpx
)
我们后台服务源代码统一编码是gb2312,如果不统一,编译的时候,会报一些结构体成员不存在等一些奇怪的问题。
(3)变量多次定义的问题(source:sunquan
)
sqlca头文件里面使用了一个全局变量,当工程加入cpp文件时,编译时就会报重复定义。
C语言里面:同一个变量多处(同一个文件或多个文件)允许重复声明,但是最多只能有一次定义。
C++同一个文件有多处声明,在编译期报错;声明分散在多个文件,每个文件最多一个,则链接为SO时报错。
解决办法:CPP头文件引用前定义一个宏,当在cpp文件编译的时候,该全局变量在宏展开的时候会加上extern。
6 其他
NYFIX对接相关
NYFIX网络的对接、券商的测试流程,参考文档《NYFIX对接分享.pptx》4
开发自测可采用上面提到的 FIX模拟成交
使用引擎的启动参考脚本如下:(内含手册)
自测引擎Bat启动脚本在:svn:developtools\Appia引擎-模拟成交配置
和nyfix上的券商做测试bat: Install\NYFIX\Nyfix公司券商测试
测试用例模板:
Broker FIX Test scripts(Template2016).xlsx svn路径:Documents\QDII券商测试-2016
ASAR相关问题排查思路
一般中间件的常见问题是: 比如AS服务起不来?
检查:一般升级完AS服务,需要用asar用户执行命令:
fundcfgtool ~/bin/ ~/workspace/
一般思路:
A 如果是所有服务都启动超时
一般是环境配置的问题,查看日志具体分析: trade.log
/as_fund_n.log
(n表示具体的数字)
注意: 首次安装完系统,需要用集成工具更新hstrade.ini中的加密串。
加密串获取: select * from hsuserpassword where l_user_type=5 (l_user_type=5 供后台服务使用)
B 如果是个别服务起不来
检查消息中心是否已经成功启动。如果已启动,再根据对应的日志,看是什么错误。
经常出现Oracle库下面的xxx.so找不到,但是locate又能查到这个so,这时候检查asar用户是否有访问该so的权限即可。
其他
如果后续有新增转换任务,请同步在文档**《QDII操作手册-转换机部分.docx》**中补充对应的操作文档。
本次培训的所有文档将上传至svn:Documents\D6.培训资料\07.QDII功能\转换机_交接内容[孙权]
参考文档
《QDII报盘详细设计.docx》
《SharpPoint报盘详细设计.docx》
……
svn:Documents\D2.Designs\05.模块设计\01.转换机(报盘&行情)\02.报盘\