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

29 lines
1.1 KiB
Python

# -*- coding: utf-8 -*-
"""
Created on Fri Sep 21 17:08:58 2018
@author: Ernest
"""
import numpy as np
def calculateMaxDD(cumret):
# =============================================================================
# calculation of maximum drawdown and maximum drawdown duration based on
# cumulative COMPOUNDED returns. cumret must be a compounded cumulative return.
# i is the index of the day with maxDD.
# =============================================================================
highwatermark=np.zeros(cumret.shape)
drawdown=np.zeros(cumret.shape)
drawdownduration=np.zeros(cumret.shape)
for t in np.arange(1, cumret.shape[0]):
highwatermark[t]=np.maximum(highwatermark[t-1], cumret[t])
drawdown[t]=(1+cumret[t])/(1+highwatermark[t])-1
if drawdown[t]==0:
drawdownduration[t]=0
else:
drawdownduration[t]=drawdownduration[t-1]+1
maxDD, i=np.min(drawdown), np.argmin(drawdown) # drawdown < 0 always
maxDDD=np.max(drawdownduration)
return maxDD, maxDDD, i