【发布时间】:2016-07-27 19:52:57
【问题描述】:
对于给定的浮动时间序列,很容易在O(n) 时间计算不受约束的最大回撤,其中最大回撤定义为
\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
是否存在用于 max_drawdown 的 O(n) 算法,该算法被限制为窗口持续时间 > min_length?在这种情况下,我想要 \min_{i,j, (j-i) > min_length}(x_j - x_i)。
请注意,这不是Compute *rolling* maximum drawdown of pandas Series 中的“滚动回撤”计算。
【问题讨论】: