微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用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

解决方法:

df_returns被假定为返回的数据框,其中每列是单独的策略/经理/安全性,并且每行是新的日期(例如,每月或每天).

cum_returns = (1 + df_returns).cumprod()
drawdown =  1 - cum_returns.div(cum_returns.cummax())

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐