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

40 lines
1.2 KiB
Python

import numpy as np
def calculateMaxDD(cumret):
"""
Python implementation of the MATLAB calculateMaxDD function.
Calculates maximum drawdown and maximum drawdown duration
based on cumulative COMPOUNDED returns.
Parameters:
cumret (ndarray): Cumulative compounded returns
Returns:
tuple: (maxDD, maxDDD) Maximum drawdown and maximum drawdown duration
"""
if isinstance(cumret, list):
cumret = np.array(cumret)
# Initialize high watermarks, drawdowns, and drawdown durations
highwatermark = np.zeros_like(cumret)
drawdown = np.zeros_like(cumret)
drawdownduration = np.zeros_like(cumret)
# Calculate drawdowns and durations
for t in range(1, len(cumret)):
highwatermark[t] = max(highwatermark[t-1], cumret[t])
# Drawdown on each day
drawdown[t] = (1 + cumret[t]) / (1 + highwatermark[t]) - 1
if drawdown[t] == 0:
drawdownduration[t] = 0
else:
drawdownduration[t] = drawdownduration[t-1] + 1
# Maximum drawdown
maxDD = np.min(drawdown)
# Maximum drawdown duration
maxDDD = np.max(drawdownduration)
return maxDD, maxDDD