10.1 DataHouse平台MATLAB接口介绍
10.1.1 DataHouse平台简介
恒生聚源DataHouse(以下简称DataHouse)是上海恒生聚源数据服务有限公司开发的一款量化投资工具。DataHouse以恒生聚源丰富和完整的数据库为依托,基于业界通用的MATLAB为平台,为用户提供全面、准确、及时的金融资讯数据。结合MATLAB自带的金融工具箱,用户可以构建自己的专业量化研究平台。
恒生聚源DataHouse的数据包括交易所的行情数据、券商的研究报告和财务数据以及其他机构的各种数据。DataHouse提供的数据经过专业人员的采集、加工和校对,具有广泛的采集范围和报告深度,能为用户提供高质量的金融领域全息数据。
用户可以通过DataHouse客户端查阅所关心的各类金融数据,包括日行情、高频行情、财务报告、研究报告、盈利预测、宏观行业等数据。恒生聚源DataHouse客户端提供数据的指标查询、指标说明和参数说明,并能生成可直接在MATLAB中使用的表达式。可以将该语句直接在MATLAB命令窗口中运行,也可以嵌入到M文件中,实现一站式开发。
整个过程只需MATLAB语言,不需要了解底层数据库结构,也不需要学习SQL语法,可以让用户专注于金融分析本身。
DataHouse具有以下优点。
1. 数据全面、便捷、灵活
研究人员使用MATLAB即可对提源数据库中的饵类数据进行提取使用,包括高频行情数据、公司财务数据、盈利预测数据等。如表10-1所列。


2. 紧密结合MATLAB分析工具,命名规范,无缝连接MATLAB运算环境
DataHouse的指标以MATLAB的语法风格编写, 可以看作MATLAB 的系统函数来使用。以下代码中的函数DH_E _S_CSRC、DH_Q_DQ_Stock 和S_SHARE_LIQA均为DataHouse提供的指标函数,可以直接编写在M文件中。

3. 界面操作方便
操作界而更符合使用需求,DataHouse客户端特别设计了扣标目录,通过指标目录可以快速查询指标函数,利用参数定义对话框生成MATLAB表达式,该表达式可以直接在MATLAB命令窗口运行,也可以嵌入到M文件中。该目录放金融信息的业务特点,展示了聚源的丰富指标体系。
4. 应用案例丰富
在DataHouse平台中,聚源的金融工程团队提供大量应用案例及其原始代码,帮助使用人员更快地熟悉产品。
5. 全面和实时的高频数据
聚源的高频数据来自交易所,经过严格的清洗处理,数据格式整齐。DataHouse平台提供沪深、股指期货、商品期货的高频分笔数据及高频分时数据。
10.1.2 MATLAB接口介绍
1. DataHouse指标概况
安装DataHouse并登录成功后,可以输入DHhelp,弹出恒生聚源DataHouse客户端。在弹出的客户端面板中, 可以单击展开多级目录,如图10-1所示。


为了方便用户找到需要的指标函数,DataHouse客户端特别设计了指标目录。该日录按照金融信息的业务特点,分门别类地展示聚源丰富的指标函数。目录按照信息种类、证券品种等标准呈现多级展开的结构。
基础数据DH按照使用业务市求分若干分支,包括行情Q、代码E、日期D、股票S和聚源数据全库,全面覆盖金融数据, 如图10-2所示。

(1) 行情Q提供金融工程研究所需的最基本的数据,包括下辖高频行情HF、日行情DQ、区间行情PR、区间高频行情序列HFP和技术分析TA。行情中的指标对数据做了清洗处理。根据业务需求,部分指标支持向量化的证券代码输入,以及向量化的日期输入和向量化的参数输入。
高频行情是指证券交易所和期货交易所发布的、频率高于每日一笔的数据。常见的高频数据有逐笔交易数据,1min 、5min、10min、15min、30min和60min的分时数据,以及提供任意频率的分时行情。聚源的高频数据接收自交易所,经过严格的清洗处理,具有较高的质量。
日行情是指每个交易曰的某种证券的概要数据,包括开盘价、最高价、最低价和收盘价等。聚源金融数据库结合上市公司的股权变动信息,向用户提供包括复权价格在内的日行情数据。
区间行情是提供证券在一段时期内的数据,比如股票的区间整体数据,或区间最高价、区间最低价等。还有区间的数据序列,比如收益率序列、股权因子序列。
区间高频行情是提供证券在一段时期的高频数据,包括level-1的分笔数据和分时数据,并对股票高频行情中的价格类指标提供复权选项,如前收盘价、开盘价、收盘价、最高最低价、买一价和卖一价等。
技术分析目录中包含目前常用的技术分析指标,基于日行情数据制作。该目录下的指标有趋向指标TR、反趋向指标AT、量价指标VP、压力支撑指标PR、能量指标EN、超买超卖指标TM、摆动指标OSC、统计指标ST、特色指标CH和成交量指标VOL。
(2) 代码E部分提供市场上符合某种特征的证券代码,并批量提取证券代码,如行业成分股、指数成分股、股指期货的连续合约代码和主力合约代码等。返回的证券代码含有扩展,能够避免不同市场的代码冲突。
(3) 日期D部分获取的是证券的交易日、上市日和财务报表披露的日期。这对获取证券的研究分析非常有利。
(4) 股票S部分提供股票投资分析所需要的财务数据FA。财务数据目录下包含财务指标I、单季财务财务指标Q和财务报表R。财务指标I又包含每股指标PS、盈利能力EA、偿债能力DB、成长能力GR、营运能力OP、资本结构CS、收益质量EQ 、现金流量CF等。
(5) 聚源数据全库部分提供更加丰富的指标函数,业务范围包括股票、港股、中概股、基金、理财、债券、可转债、期货、板块、指数、行业、宏观和权证的数据。
2. 使用DataHouse获取行情数据
1) 高频数据获取(包括实时)
DataHouse中的高频行情来源于上海证券交易所、深圳证券交易所、上海期货交易所、郑州商品交易所、大连商品交易所和中国金融期货交易所,涵盖5大交易所所有证券品种。各个品种的数据时间区间如表10-2所列。

提取高频数据的函数分高频行情和区间高频行情两部分。这两者的区别在于高频行情提取单日的高频数据, 而区间内频行情可以提取一段时间内的高频数据。提取高频数据的主要函数如表10-3所列。




①股票分笔的函数语法如下:
Data=DH_Q_HF_Stock(SecuCode, Date, ColumnName);
参数输入如图10-3所示。

【例10-1】提取恒生电子(600570.SH)2013年4月24日所有分笔交易时间和最新价(收盘价)的数据。
MATLAB实现代码如下:
Data=DH_Q_HF_Stock('600570.SH' , '2013-04-24' , {'BargainTime';'ClosePrice'});
Data=[cellstr(datestr(Data(: , 1) , 31)) , num2cell(Data(: , 2))];
运行结果如图10-4所示。
②股票分时的函数语法为:
Data=DH_Q_HF_StockSlice(SecuCode, Date, ColumnName, Slice);
参数输入的操作与股票分笔相同。
【例10-2】提取平安银行(000001.SZ)2013年4月22日所有5分钟的分时交易时间和最新价(收盘价)的数据。

MATLAB实现代码如下:
Data=DH_Q_HF_StockSice('000001.SZ ' , '2013-04-22 ' , {'BargainTime';'C1osePrice'} , 5);
运行结果如图10-5所示。

③股票时点的函数语法为:
Data=DH_Q_HF_StockTime(SecuCode, DateTime, Co1umnName) ;
参数输入的操作与股票分笔相同。
【例10-3】提取上证指数(00000l.SH)和深证成指2013年4月22日上午11:12 的最新交易时间和最新价(收盘价)数据。
MATLAB实现代码如下:
Data=DH_Q_HF_StockTime({'00000l , SH'; ' 399001.SZ ' }, ' 2013-04-22 11:12:00' ,( 'BargainTime'; ' C1osePrice ' }) ;
运行结果如图10-6所示。

④期货分笔的函数语法为:
Data=DH_Q _HF_Future(SecuCode, DateTime, ColumnName);
参数输入的操作与股票分笔相同。
【例10-4】提取IF0Y00(当月连续合约)2013年4月24日所有分笔交易时间和最高价数据。
MATLAB实现代码如下:
Data=DH_Q_HF_Future('IF0Y00 , ' 2013 - 04 - 24 ' , ( 'B argainTime 勺' HighPrice ' });
Data=[cellstr(datestr(Data( : , 1) , 31)) , num2cell(Data(: , 2ll];
运行结果如图10-7所示。

⑤期货分时的函数语法为:
Data=DH_Q_HF_FutureSlice (SecuCode, Date, ColumnName, Slice);
参数输入的操作与股票分笔相同。
【例10-5】提取股指期货IF1306合约2013年4月23日所有10分钟分时交易时间和最高价数据。
MATLAB实现代码如下:
Data=DH_Q_HF_FutureSlice('IF1306 ' , ' 2013-04-23 ' , { ' BargainTime ';' HighPrice ' }, l0);
运行结果如图10-8所示。

⑥期货时点的函数语法为:
Data=DH_Q_HF_FutureTime(SecuCode, DateTime, ColumnName);
参数输入的操作与股票分笔相同。
【例10-6】获取商品期货CU1401合约2013年4月23日上午10点最新交易时间和最低价数据。
MATLAB实现代码如下:
Data=DH_Q_HF_FutureTime('CU1401' , '2013-04-23 10 : 00 : 00 ' , { ' BargainTime';'LowPrice' }};
运行结果如图10-9所示。

区间行情函数DH_Q_HFP_Stock、DH_ Q_HFP_StockSlice、DH_Q_HFP_Future 、DH_Q_HFP FutureSlice的输入输出操作与DH_Q_HFStock、DH_Q_HF_StockSlice、DH_Q_HF_Future、DH_Q_HF_FutureSlice的输入输出类同,读者可查看相关函数说明, 这里不再一一列举。
2) 日行情数据获取
DataHouse可以获取到的日行情数据包括股票、指数、债券、可转债、基金、期货和港股。日行情中使用的主要函数如表10-4所示。

①股票日行情的函数语法为
Data=DH_Q_DQ_Stock(SecuCode, Date, ColumnName, IR);
参数输入的相关操作如图10-10所示。

【例10-7】获取浦发银行600000,SH)2013年4月23日的向前复权收盘价数据。
MATLAB实现代码如下:
Data=DH_Q_DQ_Stock('600000.SH',' 2013-04-23','Close');
运行结果如图10-11所示。

②指数日行情的函数语法为:
Data=DH_Q_DQ _index(SecuCode,Date,ColumnName);
参数输入的操作参见股票日行情的操作。
【例10-8】获取申万农林牧渔指数(801010.SI)2013年4月23日的收盘价数据。
MATLAB实现代码如下:
Data=DH_Q_DQ_index('801010.S1',' 2013-04-23','C1ose');
运行结果如图10-12所示。

③普通债券日行情的函数语法为:
Data=DH_Q_DQ_Bond(SecuCode,Date,ColumnName, PriceType);
参数输入如图10-13所示。

【例10-9】获取上证国债(OI0213.SH)2012年3月1日的全价收盘价数据。
MATLAB实现代码如下:
Data=DH_Q_DQ_Bond('010213.SH','2012-03-01',' Close', 1);
运行结果如图10-14所示。

④可转债日行情的函数语法为:
Data=DH_Q_DQ_Conbond(SecuCode,Date,ColumnName,PriceType);
参数输入的操作参见债券日行情的参数输入。
【例10-10】获取新钢转债(110003,SH )2012年3月1日的全价收盘价数据。
MATLAB实现代码如下:
Data=DH_Q_DQ_Conbond('110003.SH',' 2012-3-1','Close',1);
运行结果如图10-15所示。

⑤基金日行情的函数语法为:
Data=DH_Q_DQ_Fund(SecuCode,DateTime,Co1umnName,IR);
参数输入的操作参见股票日行情的参数输入。选择开放式基金字段均返回nan。
【例10-11】获取华夏成长(000001.OF)2013年4 月23日的单位净值数据。
MATLAB实现代码如下:
Data = DH_ _DQ_FundFund('00000l,OF','2013-04-23','Unit');
运行结果如图10-16所示。

⑥期货日行情的函数语法为:
Data=DH_Q_DQ_Future(SecuCode, Date, ColumnName);
参数输入的操作参见指数日行情的参数输入。
【例10-12】获取商品期货Cu1308 合约2013年4月23日的收盘价和结算价数据。
MATLAB实现代码如下:
Data=DH_Q_DQ_Future('Cu1308','2013-04-23',('Close';'Settle'});
运行结果如图10-17所示。

⑦港股日行情的函数语法为:
Data=DH_Q_DQ_HKStock(SecuCode, DateTime, ColumnName, IR, PriceType);
参数输入的操作如图10-18所示。

【例10-13】获取00001.HK 2012年3月1日的原始货币计量的向前复权收盘价数据。
MATLAB实现代码如下:
Data=DH_Q_DQ_HKStock('00001.HK','2012-3-1','Close',3,1);
运行结果如图10-19所示。

同高频行情一样,日行情也有相应的区间日行情函数,如DH_Q_PR_StockLow、DH_Q_PR_StockHigh、DH_Q_PR_StockPctChange、DH_Q_PR_StockAvgVolume、DH_Q_PR_StockRetumSerial、DH_Q_PR_StockSerial、DH_Q_PR_ StockFactorSerial、DH_Q_PR StockTotal、DH_ Q_ PR _FutureSerial、DH_Q_PR_FutureTotal等, 这里不一一详述。
3. 使用DataHouse获取基本面数据
1) 财务数据提取
DataHouse提供了全面的常用财务分析指标,目前己封装财务分析指标近200个,包含每股收益指标、盈利能力、偿债能力、运营能力、成长能力、资本结构等分析指标。指标目录树如图10-20所示。

【例10-14】获取沪深300成分股最近8个年度所有的每股收益。
MATLAB实现代码如下:

EPS=DH_S_FA_I_PS_FaEPSBasic(SecuCode, ReportDate);
运行结果如图10-21所示。

【例10-15】获取从2005年到2013年申万房地产和黑色金属行业ROE中位数数据, 其代码如下:
在批量取出沪深300最新的300只成分股代码并存入SecuCode 变量中
SecuCode meta1=DH_E_S_SW('230000' , ' 2005-03-31' , 1) ;
SecuCode estate=DH_E_S_SW( ' 430000 ' , ' 2005- 03-31' , 1) ;
在批量取出2004-12-31 日至2013-4-19之间的年度报告日期并存入ReportDate变量
ReportDate=DH_D_RP ReportDay ( ' 2004-12-31 ' , ' 2013-04-19 ' , 4 ) ;
在沪深300最新成分股在2004年到2013年年度的每股收益
ROE_estate=DH-S-FA-I_EA_FaRoe ( SecuCode_estate , ReportDate ) ;
ROE_metal=DH_ S_ FA_ I _EA_ FaRoe(SecuCode_metal , ReportDate ) ;
在求两个行业ROE中值
M_metal =100* nanmedian(ROE_metal) ;
M_estate=100* nanmedian ( ROE_estate);
对以上结果作图:
在作图
plot(datenum(ReportDate) ,M_metal , ' - -', datenum(ReportDate) ,M_estate, ' - ' )
datetick ( 'x' , ' yyyy ' )
title ('沪深300成分股ROE中位数( 在)' )
legend ('有色金属中位数','房地产中位数') ;
运行结果如图10-22所示。

2) 宏观数据提取
DataHouse中提供了大量的宏观数据,包括重点宏观数据、宏观综合数据、海关贸易数据、行业财务数据和区域经济数据。在DataHouse中按照图10-23操作,可以浏览DataHouse 中提供的宏观数据。具体操作步骤有以下两步:
回选择聚源数据全库→宏观,选中指标数据并双击。
固在弹出的参数输入框中,单击指标代码,弹出"插入宏观行业代码"对话框。

【例10-16】提取从2005年到2013年4月的汇丰PMI初值数据。
MATLAB提取宏观数据的指标为HG_COMMON_DATAVALUE,调取方式为: fetch('HG_COMMON_DATAVALUE', HGCode, StartDate, EndDate) 。
参数说明如下。
● HGCode:宏观指标代码,每一项宏观指标数据都对应一个代码。
● StartDate:起始日期。
● EndDate:截止日期。
MATLAB实现代码如下:
在提取2005-12-29 至2013-04-19之间的汇丰PMI初值宏观数据
PMI=fetch('HG_COMMON_DATAVALUE' , 150000082, '2005-12-29' , '2013-04-19');
运行以上命令后,可以看到如图10-24所示的结果。

【例10-17】提取2005-1-1至2013-04-19之间的进出口额-同比增速宏观数据并作图。
MATLAB实现代码如下:
在提取2005-1-1至2013-04-19之间的迸出口额一同比增速宏观数据
Temp=fetch('HG_COMMON_DATAVALUE ' , 210032351, '2005-01-01' , '2013-04-25');
plot(datenum(Temp (;, 1)) , cel12mat(Temp (;, 2)));
datetick('x ' , 12);
运行结果如图10-25所示。
