%接上文的例MATLAB代码
%累积收益率
cumret= cumprod(1+netRet)-l;plot(cumret);
[maxDrawdown maxDrawdownDuration]=…
calculateMaxDD(cumret);
[maxDrawdownmaxDrawdownDuration]=…
calculateMaxDD(cumret);
%最大挫跌,输出结果应该是0.1053
maxDrawdown
%最长挫跌期,输出结果应该为497
maxDrawdownDuration
注意,上述代码调用了子程序“calculateMaxDrawdown”,内容所示:
function [maxDDmaxDDD]=calculateMaxDD(cumret)
%[maxDD maxDDD]=calculateMaxDD(cumret)
%在累积收益率的基础上计算最大挫跌和最长挫跌期
%将高水位线初始化为0.
highwatermark=zeros( size(cumret));
%将挫跌初始化为0.
drawdown = zeros(size(cumret));
%将最长挫跌期初始化为0.
drawdownduration=zeros(size(cumret));
for t=2:length(cumret)
high watermark(t)=max(highwatermark(t-1),cumret(t));
%计算每日挫映(相对于高水位)
drawdown(t)=(1+highwatermark(t))/(1 +cumret(t))一1;
if(drawdown(t)==0)
drawdownduration(t)=0;
else
drawdownduration(t) =drawdownduration(t一1)+1;
end
end
maxDD=max(drawdown);%最大挫跌
maxDDD=max(drawdownduration);%最长挫跌期
这个程序文件可在epchan.com/book/calculateMaxDD.m下载。图
3-1中的这段累积收益率曲线显示了最大挫跌和最长挫跌期。
图3-1 例3.4的最大挫跌和最长挫跌期