基于MATLAB的量化数据回测工具箱FQuantToolBox V1.0 by faruto
标签:
股票matlabquant程序化交易量化投资 |
分类: 量化投资:以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数据获取函数完全基于网络的免费数据源(主要为新浪财经、雅虎财经等金融网站),不但可以积累历史数据,也可以进行动态更新,现已实现的数据获取为A股市场的全部股票名称和对应代码(包含已退市股票)、A股市场的股票日线除权数据以及复权因子、A股市场的股票的除权除息信息、A股市场的股票每日交易明细数据(Tick数据)、A股市场的的股票财务指标数据、A股市场的股票的三张表(资产负债表、现金流量表、利润表)数据,未来数据方面会增加更多的数据,包括期货数据以及其他金融标的的数据,整体的思想还是完全基于网络获取和更新,完全免费。
回测方面,FQuantToolBox工具箱当下提供了一个“如何构建基于MATLAB的回测系统”的demo样例,此部分内容来自我出版的《量化投资:以MATLAB为工具》的相关章节,未来回测方面会增添更多的辅助函数和插件,方便您使用MATLAB进行股票以及期货相关策略的回测。
2.
FQuantToolBox工具箱内容截图:
其中
上面截图中的一些函数文件就是用来实现获取数据、批量保存数据至本地.mat文件、前后复权数据计算、K线图展示、回测等功能的。各个子文件夹存放的内容如下:
DataBase文件夹,主要用来存贮批量下载的历史数据。
Doc文件夹,主要用来存放一些简历教程和资料,比如我重新整理过的《MATALB正则表达式零基础起步教程.doc》文档,就存放在Doc文件夹内。
MatlabGame文件夹,主要存放一些基于MATLAB的游戏,用来休闲娱乐,现在主要有俄罗斯方块(mtetris.m)、贪吃蛇(snake.m)、数独(sudokue.m)。
ToolBox文件夹,主要存放一些其他常用的工具箱,主要有:
Utilities文件夹,主要存放一些常用工具函数和辅助函数。
<</span>如何构建基于MATLAB的回测系统>文件夹,提供了一个“如何构建基于MATLAB的回测系统”的demo样例,此部分内容来自我出版的《量化投资:以MATLAB为工具》的相关章节。
下面来介绍一下相关的函数和测试样例。
3.
函数作用:获取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:
函数作用:获取单只股票的日线数据除权数据以及复权因子(包含已退市股票)
函数句柄:[StockDataDouble,adjfactor] = GetStockTSDay_Web(StockCode,BeginDate,EndDate)
函数说明:从
抓取相应股票的后复权数据和复权因子,然后反推算出最新的除权价格。
返回的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:
函数名称: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股市场的除权数据:
函数名称:GetStockTick_Web.m
函数作用:获取单只股票某日交易明细数据
函数句柄:[StockTick,Header,StatusStr] = GetStockTick_Web(StockCode,BeginDate,SaveFlag)函数说明:从
抓取单只股票某日交易明细数据,返回的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:
函数名称:SaveStockTick.m
函数作用:批量获取股票每日交易明细数据并存贮至本地.mat数据
函数句柄:[SaveLog,ProbList,NewList] = SaveStockTick(StockList,DateList,PList,CheckFlag)
函数说明:基于GetStockTick_Web函数,批量获取StockList和DateList指定的代码列表、日期列表的交易明细数据并存贮至工具箱下的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股市场的交易明细数据,每个股票一个文件夹。
函数名称: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]
运行结果:
相应的批量数据获取和保存函数为
[SaveLog,ProbList,NewList] = SaveStockTSDay(StockList,AdjFlag,XRDFlag)
此时需令XRDFlag = 1即可批量获取获取除权除息信息。
首次运行后就会在本地DataBase\Stock\XRDdata_mat保存全部A股的除权除息信息数据:
GetStockFinIndicators_Web.m函数和GetStock3Sheet_Web.m函数可以获取单只股票的财务数据和三张表数据
[FIndCell,YearList] = GetStockFinIndicators_Web(StockCode,Year)
[BalanceSheet,ProfitSheet,CashFlowSheet,YearList] = GetStock3Sheet_Web(StockCode,Year)
数据获取后用cell矩阵承装
相应的批量数据获取函数为
[SaveLog,ProbList,NewList] = SaveStockFD(StockList,Opt)
% Opt 0:获取财务指标 1:获取3张表
财务数据存贮位置:
FQuantToolBox\DataBase\Stock\FinancialIndicators_mat
三张表数据存贮位置:
FQuantToolBox\DataBase\Stock\Sheet3_mat
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]
运行结果:
4.
<</span>如何构建基于MATLAB的回测系统>文件夹,提供了一个“如何构建基于MATLAB的回测系统”的demo样例,提供了一个均线回测样例和一个回测模板,此部分内容来自《量化投资:以MATLAB为工具》的相关章节。具体可参看《量化投资:以MATLAB为工具》相关章节。
5.
FQuantToolBox工具箱的更新周期,现在暂无明确时间表。未来更新的大致方向就是增添更多金融标的的免费数据获取方式,增添更多的回测辅助函数和样例。
6.
《量化投资:以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
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

加载中…