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

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

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

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

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

学会这个方法,抓10倍大牛股的概率提升10倍>>

回测一月效应

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

这里给出了在标准普尔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-2024 零点财经保留所有权 免责声明:网站部分内容转载至网络,如有侵权请告知删除 友链,商务链接,投稿,广告请联系qq:253161086

零点财经保留所有权

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