QuantFans/quantdigger

关于 max_drawdown(networth) 的疑问

Closed this issue · 0 comments

在这个函数中,我注意到 duration[t] = 0 if drawdown[t] <= 0 else duration[t-1] + 1,这计算出来的是新高到下一个新高中的天数,而不是“最大回撤”的天数,不知是我理解有误还是特意为之?

def max_drawdown(networth):
    """ 统计最大回测和相应的回测周期。
    networth: 历史净值
    """
    hwm = [0]  # 历史最大值序列变量
    eq_idx = networth.index
    drawdown = pd.Series(index=eq_idx)
    duration = pd.Series(index=eq_idx)

    for t in range(1, len(eq_idx)):
        cur_hwm = max(hwm[t-1], networth[t])
        hwm.append(cur_hwm)
        drawdown[t] = hwm[t] - networth[t]
        # <=0 新高,计数0
        duration[t] = 0 if drawdown[t] <= 0 else duration[t-1] + 1
    return drawdown.max(), duration.max()