더북(TheBook)

다음과 같이 파이썬 라이브러리인 numpy를 이용해 MDD를 계산할 수 있다. 라이브러리를 사용하는 만큼 코드가 간결하다.

# numpy 라이브러리를 임포트한다
import numpy as np

# mdd 함수는 x를 매개변수로 받아 numpy의 array 객체로 변환한다. 이후 계산할 값을 가진 인덱스(위치)를 찾아 MDD를 계산한다
def mdd( x ):
    arr = np.array( x )
    idx_lower = np.argmin( arr - np.maximum.accumulate( arr ) )
    idx_upper = np.argmax( arr[ :idx_lower ] )
    return ( arr[ idx_lower ] - arr[ idx_upper ] ) / arr[ idx_upper ]

# 앞서 구한 values를 갖고 MDD를 계산한다
print( mdd( values ) )

np.argmin, np.argmax 함수는 array 내 가장 큰 값과 작은 값의 위치(인덱스)를 돌려주는 함수다.

가령 array에 5, 4, 3, 2, 1, 0이 순서대로 저장돼 있을 때, array 내 인덱스는 0, 1, 2, 3, 4, 5다. 이때 가장 큰 값은 5이고 인덱스는 0이다. np.argmax는 5의 인덱스인 0을 돌려준다. 마찬가지로 가장 작은 값은 0이고 인덱스는 5다. np.argmin은 가장 작은 값인 0의 인덱스 5를 돌려준다.

▲ 그림 2-8 np.argmin, np.argmax 함수

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.