用python中的矢量化解决方案计算max draw down

2024-04-29 09:58:22 发布

您现在位置:Python中文网/ 问答频道 /正文

Maximum Drawdown是量化金融中常用的一种风险度量,用于评估所经历的最大负收益。

最近,我变得不耐烦的时间来计算最大下降使用我的循环方法。

def max_dd_loop(returns):
    """returns is assumed to be a pandas series"""
    max_so_far = None
    start, end = None, None
    r = returns.add(1).cumprod()
    for r_start in r.index:
        for r_end in r.index:
            if r_start < r_end:
                current = r.ix[r_end] / r.ix[r_start] - 1
                if (max_so_far is None) or (current < max_so_far):
                    max_so_far = current
                    start, end = r_start, r_end
    return max_so_far, start, end

我熟悉一种常见的看法,即矢量化的解决方案会更好。

问题是:

  • 我能把这个问题矢量化吗?
  • 这个解决方案是什么样子的?
  • 有多大好处?

编辑

我把Alexander的答案改为以下函数:

def max_dd(returns):
    """Assumes returns is a pandas Series"""
    r = returns.add(1).cumprod()
    dd = r.div(r.cummax()).sub(1)
    mdd = dd.min()
    end = dd.argmin()
    start = r.loc[:end].argmax()
    return mdd, start, end

Tags: noneaddpandasforsoisdefcurrent