34 lines
1.0 KiB
Matlab
34 lines
1.0 KiB
Matlab
function [maxDD maxDDD]=calculateMaxDD(cumret)
|
|
% [maxDD maxDDD]=calculateMaxDD(cumret)
|
|
% calculation of maximum drawdown and maximum drawdown duration based on
|
|
% cumulative COMPOUNDED returns. cumret must be a compounded cumulative return.
|
|
% Same as calculateMaxDD_cpd for backward compatibility.
|
|
% written by:
|
|
% Ernest Chan
|
|
%
|
|
% Author of “Quantitative Trading:
|
|
% How to Start Your Own Algorithmic Trading Business”
|
|
%
|
|
% ernest@epchan.com
|
|
% www.epchan.com
|
|
|
|
highwatermark=zeros(size(cumret)); % initialize high watermarks to zero.
|
|
|
|
drawdown=zeros(size(cumret)); % initialize drawdowns to zero.
|
|
|
|
drawdownduration=zeros(size(cumret)); % initialize drawdown duration to zero.
|
|
|
|
for t=2:length(cumret)
|
|
highwatermark(t)=max(highwatermark(t-1), cumret(t));
|
|
drawdown(t)=(1+cumret(t))./(1+highwatermark(t))-1; % drawdown on each day
|
|
if (drawdown(t)==0)
|
|
drawdownduration(t)=0;
|
|
else
|
|
drawdownduration(t)=drawdownduration(t-1)+1;
|
|
end
|
|
end
|
|
|
|
maxDD=min(drawdown); % maximum drawdown
|
|
|
|
maxDDD=max(drawdownduration); % maximum drawdown duration
|