广告
广告
广告
广告
广告
广告
广告
广告
广告
广告
广告
广告
广告

您的位置: 零点财经>股票知识>量化交易> 回测一月效应策略的回测代码

回测一月效应策略的回测代码

2017-11-20 08:28:32  来源:量化交易  本篇文章有2871字,看完大约需要10分钟的时间

回测一月效应策略的回测代码

时间:2017-11-20 08:28:32  来源:量化交易

回测一月效应

回测一月效应策略的回测代码

这里给出了在标准普尔600小盘股上运用一月效应策略计算收益率的MATLAB代码。(源代码和数据可以从epchan. com/book/ example7_6. m下载。)

clear

load(’IJ R 20080131’);

onewaytcost=0. 0005;% 5bp one way transaction cost

years=.。

year(cellstr(datestr(datenum(cellstr(..

num2str(tday)),'yyyymmdd'))));

months=二

month( cellstr(datestr( datenum (cellstr(..

num2str(tday)),'yyyymmdd'))));

nextdayyear=f wdshif t (1, years);

nextdaymonth=fwdshift(1,months);

lastdayofDec=find (months==12&nextdaymonth==1);

lastdayofJan=find( months==1&nextdaymonth ==2 );

%lastdayofDec从2004年开始,

%所以将2004从lastdayofJan中删掉

IastdayofJan(1) = []; 0 o确定每个IastdayofDec后的lastdayofJan

assert (all(tday(lastdayofJan)> tday(lastdayofDec)));

eoy=find(years? =nextdayyear);%年末指数

eoy(end) _ [] ;%上一个指数不是年末的

%确保eoy日期与lastdayofDec日期匹配

assert (all(tday(eoy)==tday(lastdayofDec)));

annret=.。

(cl(eoy(2:end),:)-cl(eoy(1:end-1),:))./..

cl(eoy(1:end-1),:);%年收益率

]anret=..

(cl(lastdayofJan(2:end),:)-

cl(lastdayofDec(2: end).:))./cl(lastdayofDec(2:end),:);

% ]月收益率

for y=1:size(annret,1)

%选取年收益率可观的股票

hasData=..

find( isf inite(annret( y,:)));

%根据前一年的收益率排序

[foo sortidx]=sort (annret (y . hasData ),fascend');

%买入十分位数(decile)收益率最低的股票,卖出十分位数收益率最高的股票

topN = round (length (hasData)/10);

%组合收益率

portRet=..

(smart mean (janret(y. hasData(sortidx(I:topN))))—..

smart mean (j anret (y, hasData(..

sortidx(end一topN+1 :end)))))/2-2*onewaytcost;

fprintf(1,'Last holding date%i:Portfolio

return=% 7. 4f\n’.tday(lastdayofDec(y+1)).portRet));

end

%这里应该是输出

%最后持有期20051230:组合收益率=-0.0244

%最后持有期20061229:组合收益率=-0.0068

%最后持有期20071231:组合收益率=0.0881

这一程序用到了大量的工具函数。第一个是assert函数,用于确保程序是正确的。

function assert( pred,str)

写若前提条件非真,ASSERT会报错.

%assert (pred, string)

if nargin<2,str=’;end

if ^~ pred

s=sprintf ('assertion violated:% s,str);

error(s);

end

第二个函数足fwdshift函数,与lag1函数相反,是将时间序列函数向前移动一步。

function y=fwdshift(day, x)

assert(day>=0);

y=[x(day+1:end,:,:);..

NaN*ones(day, size(x,2),size(x,3))];


来源:量化交易 编辑:零点财经

阅读了该文章的用户还阅读了

热门关键词

相关阅读

为您推荐

移动平均线
股票知识
MACD
老丁说股
热点题材
KDJ指标
读懂上市公司
成交量
股票技术指标
股票大盘
分时图
股市名家
概念股
缠中说禅
强势股
波段操作
股票盘口
短线炒股
股票趋势
涨停板
股票投资
长线炒股
股票问答
股票术语
财务分析
炒股软件
上证早知道
经济学术语
期货
股票黑马
股票震荡市场
理财
炒股知识
散户炒股
外汇
炒股战术
港股
基金
黄金








































































































































































































































































































































































































































































































































































































































































相关栏目推荐

栏目导航

友情链接

网站首页
老丁说股
李大霄
严为民
股票问答
股票术语
视频教学
网站地图

copyright 2016-2019 零点财经保留所有权 鲁ICP备16025527号-1 免责声明:网站部分内容转载至网络,如有侵权请告知删除

联系QQ:253161086

零点财经保留所有权 鲁ICP备16025527号-1

免责声明:网站部分内容转载至网络,如有侵权请告知删除

联系QQ:253161086