20.3 行情数据和基本面数据获取函数
1. 获取A股市场的全部股票名称和对应代码(包含己退市股票)
函数名称:GetStockList_Web.m。
函数作用:获取A股市场的全部股票名称和对应代码(包含己退市股票)。
函数句柄:[StockList,StockListFull]=GetStockList_Web。
函数说明:从http://quote.eastmoney.com/stocklist.html抓取最新的股票名称和代码列表,返回的StockList为股票名称和对应的代码。
测试样例:

运行结果(见图20-3)为:

2. 获取A股市场的全部股票个股公司基本信息、证监会分类、所属概念分类(包含己退市股票)
函数名称:GetStocklnfo_Web。
函数作获:取A股市场的全部股票个股公司基本信息、证监会分类、所属概念分类(包含己退市股票)。
函数句柄:[StockInfo]=GetStockInfo_Web(StockCode)。
函数说明:从公司简介(http://vip.stock.fìnance.sina.com.cn/corp/go.php/vCI_CorpOtherInfo/stockid/
600588/.phtml)和板块信息(http://vip.stock.finance.sina.com.cn/corp/go.php/vCI_CorpOtherlnfo/stockid/
600588/menu_num/2.phtml)中抓取个股公司基本信息、证监会分类、所属概念分类,返回的StockInfo为一个结构体,存储相关信息。

测试样例:

运行结果:
运行后返回的StockInfo为一个结构体,存储信息如图20-4所示。

其中, StockInfo.CompanyIntro中存储了各公司的基本介绍,如图20-5所示。

StockInfo.IPOdate、StockInfo.IPOprice是提取出来的上市日期和发行价格信息,用户也可以按照自己的需要从StockInfo.CompanyIntro中进行提取。
Stocklnfo.lndustrySector和StockInfo.ConceptSector_Sina 存储的是证监会的行业分类和个股所属的概念分类。
例如:


相应的批量数据获取和保存函数为:

首次运行后,会在本地DataBase\StockInfo_mat目录下保存全部A股得公司信息、证监会分类、概念分类,如图20-6所示。

3.获取上海证券交易所和深圳证券交易所相关指数代码和名称列表
函数名称:GetIndexList_Web。
函数作用:获取上海证券交易所和深圳证券交易所相关指数代码和名称列表。
函数句柄:【IndexList】=GetIndexList_Web。
函数说明:从相关网络上抓取相关数据。
测试样例:

运行结果:
运行后返回的IndexList相关指数代码和名称列表如图20-7所示。

4. 获取A股市场的股票日线除权数据及复权因子
(1) 获取单只股票的日线数据。
函数名称:GetStockTSDay_Web.m。
函数作用:获取单只股票的日线除权数据及复权因子(包含已退市股票)。
函数句柄[StockDataDouble,adjfactor]=GetStockTSDay_Web(StockCode, BeginDate,Endate)
函数说明:从http://vip.stock.finance.sina.com.cn/corp/go.php/vMS_FuQuanMarketHjstory/stockid/
000562.phtml?year=2014&jjdu=4抓取相应股票的后复权数据和复权因子,然后反推算出最新的除权价格。返回的StockDataDouble为股票除权后的日线数据,其每列的含义为:
日期开高低收量(股)额(元)复权因子
有关股票日线数据的获取,笔者也尝试了许多数据网址,最终决定从这个链接抓取的理由是:可获取所有A股的从上市至今的日线数据(包含己退市股票)且数据质量不错,其他链接要么可获取的日线的历史长度太短,要么数据质量不好。另外,从上面这个链接抓数据还有一个好处,就是可以直接得到复权因子,进而可以直接根据复权因子进行前后复权数据的生成,省时省力。
这里要说明的是,一般股票的回测,之所以要计算和生成前复权数据( 后面有相应函数实现),是因为在股票的回测中,一般使用前复权的数据进行回测,而非除权后的数据,因为除权后由于分红配股的影响,数据会有缺口,会影响相应指标的计算。
测试样例:

运行结果(见图20-8)为:

(2) 批量获取股票除权日线数据并存储至本地.mat数据
函数名称:SaveStockTSDay.m
函数作用:批量获取股票除权日线数据并存储至本地.mat数据(包含已退市股票)。
函数句柄:[SaveLog,ProbList]=SaveStockTSDay(StockList, AdjFlag,XRDFlag)。
函数说明:基于GetStockTSDay_Web函数,批量获取StockList指定的代码列表的日线数据并存储至工具箱下的DateBase\Stock\Day_ExDividend_mat文件夹内。首次获取全市市场所有的股票数据会比较费时;若已经有历史数据,运行SaveStockTSDay会进行本地数据的更新。
测试样例:

运行结果:
首次运行后,会在本地DateBase\Stock\Day_ExDividend_mat目录下保存全部A股市场的除权数据,如图20-9所示。

5. 获取上海证券交易所和深圳证券交易所相关指数日线数据
函数名称:GetlndexTSDay_Web。
函数作用:获取上海证券交易所和深圳证券交易所相关指数日线数据。
函数句柄:[Data]=GetlndexTSDay_Web(StockCode,BeginDate,EndDate)。
函数说明:从相关网络上抓取相关数据。
测试样例:

运行后返回的Data为StockCode指定的指数的日线数据(抬头为日期、开、高、低、收、盘、额),如图20-10所示。

相应的批量数据获取和保存函数为:

首次运行后,会在本地DateBase\Stock\Index\Day_mat目录下保存全部上海证券交易所和深圳证券交易所相关指数日线数据,如图20-11所示。

6.获取股票交易明细数据
(1) 获取单只股票某日交易明细。
函数名称:GetStockTick_Web.m。
函数作用:获取单只股票某日交易明细。
函数句柄:[StockTick,Header,StatusStr]=GetStockTick_Web(StockCode,BeginDate,EndDate,SaveFlag)。
函数说明:从http://vip.stock.finance.sina.com.cn/quotes_service/view/vMS_tragehistory.php?symbol=sz000562&date=2014-12-05抓取单只股票某日交易明细数据,返回的StockTick为股票交易明细数据,每列的含义为:


(2) 批量获取股票每日交易明细数据并存储至本地.mat数据。
函数名称:SaveStockTick.m。
函数作用:批量获取股票每日交易明细数据并存储至本地.mat数据。
函数句柄:[SaveLog,ProbList,NewList]=SaveStockTick(StockList,DateList,PList,CheckFlag)。
函数说明:基于GetStockTick_Web函数,批量获取StockList和DateList指定的代码列表、日期列表的交易明细数据并存储至工具箱下的DataBase\Stock\Tick_mat文件夹内。首次获取全市场所有的股票数据会非常费时; 若己经有历史数据,运行SaveStockTick会进行本地数据的更新。
测试样例:

首次运行后,会在本地DateBase\Stock\Tick_mat目录下保存全部A股市场的交易明细数据,如图20-13和图20-14所示。

7. 获取股票分红配股信息数据
函数名称: GetStockXRD_Web.m.
函数作用:获取股票分红配股信息数据。
函数句柄: [Web_XRD_Data, Web_XRD_CeIl_1, Web_XRD_CeIl_2]=GetStockXRD_Web(StockCode) 。
函数说明: 从http://vip.stock.tinance.sina.com.cn/corp/go.php/vISSUE_ShareBonus/stockid/000562.phtml抓取最新的股票名称和代码列表,返回的Web_XRD_Data、Web_XRD_Cell_1, Web_XRD_Cell_2为股票的分红配股信息数据。此函数是在Chandeman(MATLAB技术论坛ID:fosu_cdm)编写过的一个函数的基础上修改而成的。
测试样例:

相应的批量数据获取和保存函数为:

此时,需令XRDFlag=1,即可批量获取除权除系信息。
首次运行后,会在本地DateBase\Stock\XRDdate_mat目录下保存全部A股除权除息信息数据,如图20-16所示。


8.获取上市公司公告文件列表数据并保存相应文件至本地
函数名称:GetStockNotice_Web。
函数作用:获取上市公司公告文件列表
函数句柄: [NoticeDateCell]=GetStockNotice_Web(StockCode,BeginDate,EndDate)。
函数说明:从相关网络上抓取相关数据。
测试样例:

运行结果:
运行后返回的NoticeDateCell为StockCode指定的股票的公司公告文件列表,保存的内容抬头为股票代码、日期时间、文件名称、公告类型、文件URL、文件大小,如图20-17所示。

相应的批量数据获取和保存函数为:

首次运行后,会在本地DateBase\Stock\StockNotice_file\目录下保存全部A股的公司公告文件,每只股票单独一个文件夹,如图20-18和20-19所示。


这里需要说明的是,基于上市公司的公告数据,可做的东西还是很多的,主要用来开发事件驱动类策略,大体分为两个方面: 一方面,根据公告的粗略分类和发布曰期,进行简单的事件驱动类策略开发(某只股票发布某种定义下的"重要公告"后就持有N天,每T天进行组合调整);另一方面,如果想要做得更细致,由于己经保存了上市公司公告的全文,则可以进行上市公司公告全文的文本挖掘,将公告的分类进行细致划分,并对公告进行分词处理,进而开发精细化的基于上市公司公告的事件驱动类策略。
9. 获取上市公司投资者关系信息(lnvestor Relations Info)列表数据并保存相应文件至本地
函数名称:GetStockInvestRInfo_Web。
函数作用:获取上市公司投资者关系信息(Investor Relations Info)列表。
函数句柄: [IRDataCell]=GetStockInvestRInfo_Web(StockCode,BeginDate,EndDate) 。
函数说明:从相关网络上抓取相关数据。
测试样例:


运行结果:
运行后返回的IRDataCell为StockCode指定的股票的公司投资者关系信息(Investor Relations Info)列表,保存的内容抬头为股票代码、日期时间、文件名称、公告类型、文件URL、文件大小,如图20-20所示。

相应的批量数据获取和保存函数为:

首次运行后,会在本地DateBase\Stock\StockInvestorRlationsInfo_file\文件夹内保存上市公司投资者关系列表(Investor Relations Info)文件,每只股票单独一个文件夹,如图20-21和图20-22所示。


同样,基于上市公司投资者关系信息(Investor Relations Info)数据,与上市公司公告数据一样,可以用来研发事件驱动类策略,可做粗、可做细。
10. 财务数据和三张表数据获取
GetStockFinIndicators_Web.m函数和GetStock3Sheet_Web.m函数可以分别获取单只股票的财务数据和三张表数据。

数据获取后用cell矩阵承装,如图20-23所示。

相应的批量数据获取函数为:

财务数据存储位置为(见图20-24):

11.获取百度高级搜索相关内容
函数名称:BasduSearchAdvancedNews。
函数作用:获取百度高级搜索相关内容,可以任意指定个股相关关键词,获取搜索之后的相关词条的时间、来源、URL链接等内容,并且可以指定搜索时间段。
函散句柄:[NewsDateCell]=BaiduSearchAdvancedwNews(StringIncludeAll,StringIncludeAny,BeginDate,EndDate)。
函数说明:从相关网络上抓取相关数据.
测试样例:

运行结果:
运行后返回的NewsDataCell为StockCode指定的股票的百度全文搜索词条,保存的内容抬头为日期时间、Title、来源、URL,如图20-26所示。

基于这部分数据,可以开发舆情类策略,可以从两方面入手:一方面,可以基于某一时间段的搜索量的总量和增量的统计,找到相应的热门和冷门股,进行相应策略的构建,另一方面,如果想做得细致一些,由于保存了词条的URL,可以通过词条的URL获取搜索内容的全文内容,然后进行分词处理,给出正负面的打分,进而构建更加精细化的舆情策略。
事实上,BaiduSearchAdvancedNews函数可以输入任意的关键词进行搜索,而不一定是股票代码。
12. 获取新浪高级搜索相关内容
函数名称:SinaSearchAdvanced。
函数作用: 获取新浪高级搜索相关内容,可以任意指定个股相关关键词,获取搜索之后的相关词条的时间、来源、URL链接等内容,并且可以指定搜索时间段。
函数句柄:[NewsDataCell]=SinaSearchAdvanced(StringIncludeAll,BeginDate,EndDate)。
函数说明:从相关网络上抓取相关数据。
测试样例:

运行结果:
运行后返回的NewsDataCell为StockCode指定的股票的新浪全文搜索词条,保存的内容抬头为日期时间、Title 、来源、URL ,如图20-27所示。

13. 获取期货合约日线数据
当下仅仅完成了中金所TF、TF的数据获取。
函数名称:GetFutureDay_Web 。
函数作用:获取某日期货合约日线数据。
函数句柄:[DataCell,StatusOut]=GetFutureDay_Web(DateStr,MarketCode,FuturesCode)。
函数说明:从各期货交易所,比如中金所(http://www.cfIex.com.cnJfzjy/mrhq/) 获取某日期货合约日线数据。
其中, DateStr为输入的日期,比如DateStr='20141215';; MarketCode为交易所代码,比如MarketCode='CFFEX';; FuturesCode为期货品种代码,比如FuturesCode='IF';;DataCell为返回的数据。
测试样例:

运行结果:
运行后DataCell返回当日IF的所有合约的日数据,如图20-28所示。

相应的批量数据获取和保存函数为:

首次运行后,会在本地DataBase\Futures下的相应合约代码下的文件夹(如DataBase\Futures\IF\Day_mat) 存储一个IF_Day.mat 文件,保存IF从上市日至今所有合约的日线数据,如图20-29所示。
14. 获取期货合约每日结算会员成交持仓排名数据
当下仅仅完成了中金所町、TF 的数据获取。
函数名称:GetFutureVolOIRanking_Web.m。
函数作用:获取期货合约每日结算会员成交持仓排名数据。
函数句柄:[DataCell,StatusOut]=GetFutureVolOIRanking_Web(DateStr" FutureCode) 。
函数说明:从各期货交易所,比如中金所( http://www.cffex.com.cn/fzjy/ccprn/)获取期货合约每日结算会员成交持仓排名数据。

测试样例:

运行结果:
运行后DataCell返回当日相关品种各个合约的结算会员成交持仓排名。如图20-30所示。


相应的批量数据获取和保存函数为:

首次运行后,会在本地DataBase\Futures下的相应合约代码下的文件夹(如DataBase\Futures\IFlOIRanking) 存储一个IF从上市日至今所有合约的结算会员的美日成交持仓排名数据,如图20-31所示。

对于策略开发,或对这部分数据(期货合约每日结算会员成交持仓排名数据)可做的事情还是很多的,比较有想象空间。使用这部分数据,可以构造某种意义上的投资者情绪指标,一则可以构造开发CTA类策略(IF策略),二则可以用来开发对于HS300的时策略。
基于这部分数据开发的IF策略会与普通的使用价量开发的策略有异构性,方便提升CTA大组合策略的异构性,平滑整体资金,图20-2是笔者基于这部分数据构建的IF策略的一个Demo。

基于这部分数据开发HS300择时策略的前提假设是,期货合约每日结算会员成交持仓排名数据带有某些机构对于未来IF走势的某些预判信息, 进而在某种程度上影响HS300,也是有一定文章可做的,在此不过多展开。
15. 其他函数
CalculateStockXRD.m:由除权数据生成前后复权数据。
测试样例:


运行结果如图20-33所示。

16. 其他说明
FQuantToolBox工具箱里面共有4个MATLAB脚本文件:

其中, Main_GetStockDataTest.m文件用来测试FQuantToolBox工具箱里面所有以Get开头的和股票相关的函数。每个测试代码段在Main_GetStockDataTest.m代码中的一个代码小节里面(MATLAB编辑器中的cell编程模式可以将代码进行分节),方便查看相关函数的输入/输出。样例如图20-34所示。
Main_GetFuturesDataTest.m文件用来测试FQuantToolBox工具箱里面所有以Get开头的和期货相关的函数,每个测试代码段在Main_GetFuturesDataTest.m代码中的一个代码小节里面,方便查看相关函数的输入/输出。样例如图20-35所示。
Main_ SaveStockData2LocaITest.m文件用来测试FQuantToolBox工具箱里面所有以Save开头的和股票相关的函数,用来把网络上相关的数据存储到本地。每个测试代码段在Main_SaveStockData2LocalTest.m代码中的一个代码小节里面,方便查看相关函数的输入/输出。由于全部运行会很耗时,所以每个cell设置了一个run变量,只需把run设置为1,该cell模块即可运行: 当run=0时,相应的cell模块不会运行。样例如图20-36所示。

读者或许会在Main_SaveStockData2LocalTest.m文件中看到一些spmd并行操作模块,如果读者对MATLAB并行有所了解,那么可以井行批量下载相关数据,否则忽略该部分代码即可。
Main_SaveFuturesData2Local.m与Main_SaveStockData2LocalTest.m的作用类似,只不过Main_SaveFuturesData2Loca l.m用来测试FQuantToolliox工具箱里面所有以Save开头的和期货相关的函数,并把网络上相关的数据存储到本地。