# cummax라는 이름의 함수를 선언한다. 이 함수는 nums 매개변수를 받는다
def cummax( nums ):
# 역대 최고값을 저장하기 위한 리스트 cum과 초기 최고값 max를 설정한다
cum = [ ]
max = 0
# nums를 순회하면서 item을 현재 최고값과 비교한다. item>max이면 최고값 max를 업데이트한다. 그리고 if문의 결과와 상관없이 최고값을 cum에 추가한다
for item in nums:
if item > max:
max = item
cum.append( max )
return cum
# 자산 A 가치를 리스트에 저장한다
values = [ 100, 120, 130, 100, 65, 80, 100, 120, 140, 160 ]
# 자산 A 가치(values)에서 for 루프로 반복하면서 cummax( )로 구한 최고값을 뺀다(x-y). zip 함수는 3장에서 자세히 설명하지만 두 개의 변수를 묶어서(zip), 마치 하나의 변수처럼 사용하는 방법이다
drawdown = [ x - y for x, y in zip( values, cummax( values ) ) ]
# drawdown에서 최솟값이 저장된 인덱스(즉, 위치)를 구한다
idx_lower = drawdown.index( min( drawdown ) )
# 자산 A 가치(values)의 인덱스 0부터 idx_lower까지 데이터 중 가장 큰 값이 저장된 위치를 구한다
idx_upper = values.index( max( values[ :idx_lower ] ) )
# MDD 공식에 따라 계산해 출력한다
print( ( values[ idx_lower ] - values[ idx_upper ] ) / values[ idx_upper ] )