加载中…

加载中...

个人资料
faruto
faruto 新浪个人认证
  • 博客等级:
  • 博客积分:0
  • 博客访问:1,144,096
  • 关注人气:2,115
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
正文 字体大小:

基于MATLAB的量化数据回测工具箱FQuantToolBox V1.0 by faruto

(2014-12-15 08:57:19)
标签:

股票

matlab

quant

程序化交易

量化投资

分类: 量化投资:以MATLAB为工具
原帖地址:
量化数据回测工具箱FQuantToolBox V1.0 by faruto
http://www.matlabsky.com/thread-45540-1-1.html
===============================================
接着之前发过的一个帖子
再议股票行情和基本面财务数据的获取-FQuantToolBox
http://www.matlabsky.com/thread-45453-1-1.html

今儿发布FQuantToolBox V1.0版本。抽空写了个比较粗糙的Mannual,看官您就对付着看吧。

FQuantToolBox Mannual byLY_faruto

By LiYang(faruto)

FQuantToolBox: A Data and Backtesting Quant Tool Box based on MATLAB by faruto.

Version:V1.0

Last Modified 2014.12.14

=================================

History:

 

2014.12.12 V1.0

=================================

 

1.         FQuantToolBox是做什么用的?

FQuantToolBox定位是个数据和回测工具箱,没有实盘交易相关接口的实现(但未来不排除增加相关功能)。

数据方面,FQuantToolBox数据获取函数完全基于网络的免费数据源(主要为新浪财经、雅虎财经等金融网站),不但可以积累历史数据,也可以进行动态更新,现已实现的数据获取为A股市场的全部股票名称和对应代码(包含已退市股票)A股市场的股票日线除权数据以及复权因子A股市场的股票的除权除息信息、A股市场的股票每日交易明细数据(Tick数据)、A股市场的的股票财务指标数据、A股市场的股票的三张表(资产负债表、现金流量表、利润表)数据,未来数据方面会增加更多的数据,包括期货数据以及其他金融标的的数据,整体的思想还是完全基于网络获取和更新,完全免费。

         基于网络的数据获取的实现方式大体过程就是网络数据网址寻找——> 网址分析——> urlread+正则表达式 数据提取。进行网络数据的抓取,正则表达式是一定会遇到的,MATLAB中有相应的正则表达式函数,有关正则表达式的东西这里不做展开,各位看官需要自行做些功课,FQuantToolBox工具箱Doc文件夹内有个我重新整理过的《MATALB正则表达式零基础起步教程.doc》文档,可以帮助您学习正则表达式相关的东西。

回测方面,FQuantToolBox工具箱当下提供了一个“如何构建基于MATLAB的回测系统”的demo样例,此部分内容来自我出版的《量化投资:以MATLAB为工具》的相关章节,未来回测方面会增添更多的辅助函数和插件,方便您使用MATLAB进行股票以及期货相关策略的回测。

         未来FQuantToolBox工具箱每次发布都会提供两个版本,无历史数据版本有历史数据版本。无历史数据版本仅提供相关函数,你可以在自己本地运行相关脚本来批量获取历史数据;有历史数据版本不但提供相关函数,还提供已经获取好的历史数据(A股市场全部股票股票名称和代码、日线数据、每日交易明细数据、除权除息信息、财务指标数据、三张变数据),节省您获取历史数据的时间,但相应的下载文件也会比较大(尤其股票每日交易明细数据),新的数据更新只需运行相应脚本函数就可以进行全市场最新数据的更新。

 

2.         FQuantToolBox工具箱内容简介

FQuantToolBox工具箱内容截图:

基于MATLAB的量化数据回测工具箱FQuantToolBox <wbr>V1.0 <wbr>by <wbr>faruto

其中

上面截图中的一些函数文件就是用来实现获取数据、批量保存数据至本地.mat文件、前后复权数据计算、K线图展示、回测等功能的。各个子文件夹存放的内容如下:

DataBase文件夹,主要用来存贮批量下载的历史数据。

Doc文件夹,主要用来存放一些简历教程和资料,比如我重新整理过的《MATALB正则表达式零基础起步教程.doc》文档,就存放在Doc文件夹内。

MatlabGame文件夹,主要存放一些基于MATLAB的游戏,用来休闲娱乐,现在主要有俄罗斯方块(mtetris.m)、贪吃蛇(snake.m)、数独(sudokue.m)。

ToolBox文件夹,主要存放一些其他常用的工具箱,主要有:

基于MATLAB的量化数据回测工具箱FQuantToolBox <wbr>V1.0 <wbr>by <wbr>faruto

Utilities文件夹,主要存放一些常用工具函数和辅助函数。

<</span>如何构建基于MATLAB的回测系统>文件夹,提供了一个“如何构建基于MATLAB的回测系统”的demo样例,此部分内容来自我出版的《量化投资:以MATLAB为工具》的相关章节。

下面来介绍一下相关的函数和测试样例。

 

3.         行情数据和基本面数据获取函数

 

     (1)     获取A股市场的全部股票名称和对应代码(包含已退市股票)

 

函数名称:GetStockList_Web.m

函数作用:获取A股市场的全部股票名称和对应代码(包含已退市股票)

函数句柄:[StockList,StockListFull] = GetStockList_Web

函数说明:从http://quote.eastmoney.com/stocklist.html抓取最新的股票名称和代码列表,返回的StockList为股票名称和对应的代码

测试样例:

[code]

%% 获取股票代码列表测试

[StockList,StockListFull] = GetStockList_Web;

StockCodeDouble = cell2mat( StockList(:,3) );

save('StockList','StockList');

[/code]

运行结果:

StockList

基于MATLAB的量化数据回测工具箱FQuantToolBox <wbr>V1.0 <wbr>by <wbr>faruto

 

     (2)     获取A股市场的股票日线除权数据以及复权因子

获取单只股票的日线数据

函数名称:GetStockTSDay_Web.m

函数作用:获取单只股票的日线数据除权数据以及复权因子(包含已退市股票)

函数句柄:[StockDataDouble,adjfactor] = GetStockTSDay_Web(StockCode,BeginDate,EndDate)

函数说明:从

http://vip.stock.finance.sina.com.cn/corp/go.php/vMS_FuQuanMarketHistory/stockid/000562.phtml?year=2014&jidu=4

抓取相应股票的后复权数据和复权因子,然后反推算出最新的除权价格。

返回的StockDataDouble为股票除权后的日线数据,其每列的含义为:

日期 () () 复权因子

 

有关股票日线数据的获取,我也尝试了许多数据网址,最终决定从这个链接抓的理由是:可获取所有的A股的从上市至今的日线数据(包含已退市股票)且数据质量不错,其他的链接要么可获取的日线的历史长度太短,要么数据质量不好,从上面这个链接抓数据还有一个好处就是可以直接得到复权因子,进而可以直接根据复权因子进行前后复权数据的生成,非常省事,尽管我们可以抓取股票分红配股的信息(下面有函数获取股票的除权除息信息数据),然后再自己计算复权因子,进而计算前后复权数据。

有关复权因子的定义,以及前后复权数据的计算方法,这里不做展开,您需要自己做些功课,只有亲自研究过、coding过,您才会发现,一个简单的前后复权弄彻底搞清楚并实现并不是特别简单。

这里要说明的是一般股票的回测,之所以要计算和生成前复权数据(后面有相应函数实现),是因为在股票的回测中,我们一般会使用前复权的数据进行回测,而非除权后的数据,因为除权后的数据由于分红配股的影响数据有缺口不够连续,会影响相应指标的计算。

测试样例:

[code]

%% 参数设置

StockCode_G = '000562'

 

str = ['全局参数设置完毕!'];

disp(str);

%% 获取股票日线(除权除息)数据测试

StockCode = StockCode_G;

 

BeginDate = '20140101';

EndDate = '20150101';

 

[StockDataDouble,adjfactor] = GetStockTSDay_Web(StockCode,BeginDate,EndDate);

[/code]

运行结果:

StockDataDouble

基于MATLAB的量化数据回测工具箱FQuantToolBox <wbr>V1.0 <wbr>by <wbr>faruto

 

批量获取股票除权日线数据并存贮至本地.mat数据

函数名称:SaveStockTSDay.m

函数作用:批量获取股票除权日线数据并存贮至本地.mat数据(包含已退市股票)

函数句柄:[SaveLog,ProbList,NewList] = SaveStockTSDay(StockList,AdjFlag,XRDFlag)

函数说明:基于GetStockTSDay_Web函数,批量获取StockList指定的代码列表的日线数据并存贮至工具箱下的DataBase\Stock\Day_ExDividend_mat文件夹内,首次获取全市场所有的股票数据会比较费时,若已经有历史数据,运行SaveStockTSDay会进行本地数据的更新至最新交易日数据。

测试样例:

[code]

%% 获取股票代码列表测试

[StockList,StockListFull] = GetStockList_Web;

StockCodeDouble = cell2mat( StockList(:,3) );

save('StockList','StockList');

%% 股票数据更新-除权除息数据-无并行操作

AdjFlag = 0;

XRDFlag = 0;

[SaveLog,ProbList,NewList] = SaveStockTSDay(StockList,AdjFlag,XRDFlag);

[/code]

运行结果:

首次运行后就会在本地DataBase\Stock\Day_ExDividend_mat保存全部A股市场的除权数据:

基于MATLAB的量化数据回测工具箱FQuantToolBox <wbr>V1.0 <wbr>by <wbr>faruto

 

     (3)     获取股票交易明细数据

 

获取单只股票某日交易明细数据

函数名称:GetStockTick_Web.m

函数作用:获取单只股票某日交易明细数据

函数句柄:[StockTick,Header,StatusStr] = GetStockTick_Web(StockCode,BeginDate,SaveFlag)函数说明:从

http://vip.stock.finance.sina.com.cn/quotes_service/view/vMS_tradehistory.php?symbol=sz000562&date=2014-12-05

抓取单只股票某日交易明细数据,返回的StockTick为股票交易明细数据,每列的含义为:

成交时间 成交价 价格变动 成交量() 成交额() 性质(买盘:1,卖盘:-1,中性盘:0

测试样例:

[code]

%% 参数设置

StockCode_G = '000562'

 

str = ['全局参数设置完毕!'];

disp(str);

%% 获取股票某日交易明细

StockCode = StockCode_G;

 

BeginDate = '20141205';

[StockTick,Header,StatusStr] = GetStockTick_Web(StockCode,BeginDate);

[/code]

运行结果:

StockTick

基于MATLAB的量化数据回测工具箱FQuantToolBox <wbr>V1.0 <wbr>by <wbr>faruto

 

批量获取股票每日交易明细数据并存贮至本地.mat数据

函数名称:SaveStockTick.m

函数作用:批量获取股票每日交易明细数据并存贮至本地.mat数据

函数句柄:[SaveLog,ProbList,NewList] = SaveStockTick(StockList,DateList,PList,CheckFlag)

函数说明:基于GetStockTick_Web函数,批量获取StockListDateList指定的代码列表、日期列表的交易明细数据并存贮至工具箱下的DataBase\Stock\Tick_mat文件夹内,首次获取全市场所有的股票数据会非常费时,若已经有历史数据,运行SaveStockTick会进行本地数据的更新至最新交易日数据。

测试样例:

[code]

%% 获取股票代码列表测试

[StockList,StockListFull] = GetStockList_Web;

StockCodeDouble = cell2mat( StockList(:,3) );

save('StockList','StockList');

%% 获取交易明细数据Tick-无并行操作

[SaveLog,ProbList,NewList] = SaveStockTick(StockList);

[/code]

运行结果:

首次运行后就会在本地DataBase\Stock\Tick_mat保存全部A股市场的交易明细数据,每个股票一个文件夹。

基于MATLAB的量化数据回测工具箱FQuantToolBox <wbr>V1.0 <wbr>by <wbr>faruto

基于MATLAB的量化数据回测工具箱FQuantToolBox <wbr>V1.0 <wbr>by <wbr>faruto

 


     (4)     获取股票分红配股信息数据

 

函数名称:GetStockList_Web.m

函数作用:获取股票分红配股信息数据

函数句柄:

[ Web_XRD_Data , Web_XRD_Cell_1 , Web_XRD_Cell_2 ] = GetStockXRD_Web(StockCode)

函数说明:从

http://vip.stock.finance.sina.com.cn/corp/go.php/vISSUE_ShareBonus/stockid/000562.phtml

抓取最新的股票名称和代码列表,返回的Web_XRD_Data , Web_XRD_Cell_1 , Web_XRD_Cell_2为股票的分红配股信息数据。

此函数是在Chandeman层编写过的一个函数基础修改而成。

测试样例:

[code]

%% 参数设置

StockCode_G = '000562'

 

str = ['全局参数设置完毕!'];

disp(str);

%% 获取股票除权除息数据

StockCodeInput = StockCode_G;

 

[ Web_XRD_Data , Web_XRD_Cell_1 , Web_XRD_Cell_2 ] = GetStockXRD_Web(StockCodeInput);

Web_XRD_Cell_1;

Web_XRD_Cell_2;

[/code]

运行结果:

基于MATLAB的量化数据回测工具箱FQuantToolBox <wbr>V1.0 <wbr>by <wbr>faruto

基于MATLAB的量化数据回测工具箱FQuantToolBox <wbr>V1.0 <wbr>by <wbr>faruto


 

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

[SaveLog,ProbList,NewList] = SaveStockTSDay(StockList,AdjFlag,XRDFlag)

此时需令XRDFlag = 1即可批量获取获取除权除息信息。

首次运行后就会在本地DataBase\Stock\XRDdata_mat保存全部A股的除权除息信息数据:

基于MATLAB的量化数据回测工具箱FQuantToolBox <wbr>V1.0 <wbr>by <wbr>faruto

 

     (5)     财务数据和三张表数据获取

GetStockFinIndicators_Web.m函数和GetStock3Sheet_Web.m函数可以获取单只股票的财务数据和三张表数据

[FIndCell,YearList] = GetStockFinIndicators_Web(StockCode,Year)

[BalanceSheet,ProfitSheet,CashFlowSheet,YearList] = GetStock3Sheet_Web(StockCode,Year)

数据获取后用cell矩阵承装

基于MATLAB的量化数据回测工具箱FQuantToolBox <wbr>V1.0 <wbr>by <wbr>faruto

基于MATLAB的量化数据回测工具箱FQuantToolBox <wbr>V1.0 <wbr>by <wbr>faruto

 

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

[SaveLog,ProbList,NewList] = SaveStockFD(StockList,Opt)

% Opt 0:获取财务指标 1:获取3张表

财务数据存贮位置:

FQuantToolBox\DataBase\Stock\FinancialIndicators_mat

基于MATLAB的量化数据回测工具箱FQuantToolBox <wbr>V1.0 <wbr>by <wbr>faruto

 

三张表数据存贮位置:

FQuantToolBox\DataBase\Stock\Sheet3_mat

基于MATLAB的量化数据回测工具箱FQuantToolBox <wbr>V1.0 <wbr>by <wbr>faruto

 

     (6)     其他函数

CalculateStockXRD.m由除权数据生成前后复权数据

测试样例:

[code]

%% 参数设置

StockCode_G = '000562'

 

str = ['全局参数设置完毕!'];

disp(str);

%% 获取股票日线(除权除息)数据测试

StockCode = StockCode_G;

 

BeginDate = '20140101';

EndDate = '20150101';

 

[StockDataDouble,adjfactor] = GetStockTSDay_Web(StockCode,BeginDate,EndDate);

%% 进行前复权数据生成

 

StockData = StockDataDouble(:,1:end);

XRD_Data = [];

AdjFlag = 1;

[StockDataXRD, factor] = CalculateStockXRD(StockData, XRD_Data, AdjFlag);

%% 复权价格plot

scrsz = get(0,'ScreenSize');

figure('Position',[scrsz(3)*1/4 scrsz(4)*1/6 scrsz(3)*4/5 scrsz(4)]*3/4);

 

AX1 = subplot(211);

OHLC = StockDataDouble(:,2:5);

KplotNew(OHLC);

Dates = StockDataDouble(:,1);

LabelSet(gca, Dates, [], [], 1);

ind = find( StockCodeDouble == str2double(StockCode) );

str = [StockList{ind,1},'-',StockList{ind,2},'除权价格'];

title(str,'FontWeight','Bold');

 

AX2 = subplot(212);

OHLC = StockDataXRD(:,2:5);

KplotNew(OHLC);

Dates = StockDataDouble(:,1);

LabelSet(gca, Dates, [], [], 1);

ind = find( StockCodeDouble == str2double(StockCode) );

str = [StockList{ind,1},'-',StockList{ind,2},'前复权价格'];

title(str,'FontWeight','Bold');

 

linkaxes([AX1, AX2], 'x');

[/code]

运行结果:

基于MATLAB的量化数据回测工具箱FQuantToolBox <wbr>V1.0 <wbr>by <wbr>faruto

 

 

4.         如何构建基于MATLAB的回测系统

<</span>如何构建基于MATLAB的回测系统>文件夹,提供了一个“如何构建基于MATLAB的回测系统”的demo样例,提供了一个均线回测样例和一个回测模板,此部分内容来自《量化投资:以MATLAB为工具》的相关章节。具体可参看《量化投资:以MATLAB为工具》相关章节。

 

5.         其他说明

FQuantToolBox工具箱的更新周期,现在暂无明确时间表。未来更新的大致方向就是增添更多金融标的的免费数据获取方式,增添更多的回测辅助函数和样例。

 

6.         《量化投资:以MATLAB为工具》书籍介绍

《量化投资:以MATLAB为工具》分为基础篇和高级篇两大部分。基础篇部分通过Q&A的方式介绍了MATLAB的主要功能、基本命令、数据处理等内容,使读者对MATLAB有基本的了解。高级篇部分分为14章,包括MATLAB处理优化问题和数据交互、绘制交易图形、构建行情软件和交易模型等内容,通过丰富实例和图形帮助读者理解和运用MATLAB作为量化投资的工具。《量化投资:以MATLAB为工具》的特色在于不仅仅满足理论学习的需要,更帮助读者边学边练,将理论和实践并重。

《量化投资:以MATLAB为工具》适合金融机构的研究人员和从业人员、进行量化投资的交易员、具有统计背景的科研工作者、高等院校相关专业的教师和学生以及对量化投资和MATLAB感兴趣的人士阅读。

《量化投资:以MATLAB为工具》书籍相关网址:

书籍交流论坛(源码、数据下载):http://www.matlabsky.com/forum-112-1.html

书籍目录:http://www.matlabsky.com/thread-45265-1-1.html

连载介绍目录:http://www.matlabsky.com/thread-43937-1-1.html

其中《量化投资:以MATLAB为工具》基础篇部分已经免费公开(包含所有文档、源码、测试数据),您可以进行下载、阅读、查看、测试。

下载地址:

N分钟学会MATLAB(60

http://www.matlabsky.com/thread-42808-1-1.html

希望可以让刚刚接触MATLAB的朋友能快速有效地了解MATLAB

download:

FQuantToolBox V1.0无历史数据库版本 下载

FQuantToolBox V1.0[NoHistData] byLY_faruto.rar 36.7M

链接:http://pan.baidu.com/s/1o6umWn4 密码:p4bt 

FQuantToolBox V1.0历史数据库版本 下载

FQuantToolBox V1.0[PlusHistData] byLY_faruto.rar 

Update: FQuantToolBox V1.0历史数据库版本(A股市场的全部股票[包含已退市股票]从上市日至今 日线除权数据以及复权因子、分红配股信息、财务指标数据、三张表数据)下载 FQuantToolBox V1.0[PlusHistData] byLY_faruto.rar (RAR1.04G,解压后13G) 百度网盘下载链接:http://pan.baidu.com/s/1o6mf2SM



另外欢迎大家关注,我最近开通的微信公众号

FQuantStudio

基于MATLAB的量化数据回测工具箱FQuantToolBox <wbr>V1.0 <wbr>by <wbr>faruto



0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有