1
對於給定的時間序列浮體,它是很容易在O(n)
時間,其中max縮編被定義爲最大虧損與最小窗口長度
\min_{i,j, i<j}(x_j - x_i)
在Python計算不受約束的最大壓降,我們的計算是min(x - numpy.expanding_max(x))
,但要獲得O(n)
算法中寫明確:
def max_drawdown(s):
drawdn = 0
m,M = s[0],s[0]
t1,t2 = 0,0
T1,T2 = 0,0
for i,v in enumerate(s):
if (v < m):
if (v-m) < drawdn:
drawdn = v-m
t2 = i
T1,T2 = t1,t2
else:
m = v
t1 = i
return T1,T2,drawdn
是否有O(n)
算法被限制爲具有窗口持續時間> MIN_LENGTH一個max_drawdown?在這種情況下,我想\ min_ {i,j,(j-i)> min_length}(x_j - x_i)。
注意,這不是一個「滾動縮編」的計算如在Compute *rolling* maximum drawdown of pandas Series。相比,你max_drawdown
功能
是 - 這在概念上稍有不同,從最大值向前看,而不是從當前迭代向後。它工作,比我沒有發佈的解決方案更簡單。謝謝! –