2025-06-05 08:48:33 +02:00

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