相关疑难解决方法(0)

使用python中的矢量化解决方案计算最大下拉量

最大亏损是量化融资中常用的风险指标,用于评估经历的最大负回报.

最近,我对使用循环方法计算最大缩幅的时间变得不耐烦了.

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
Run Code Online (Sandbox Code Playgroud)

我很熟悉矢量化解决方案会更好的普遍看法.

问题是:

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

编辑

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

def max_dd(returns):
    """Assumes returns is a pandas Series"""
    r = …
Run Code Online (Sandbox Code Playgroud)

python numpy quantitative-finance pandas

13
推荐指数
1
解决办法
5111
查看次数

Pandas 回撤持续时间

我正在尝试计算股票系列的下跌持续时间和恢复时间。我可以计算回撤,但很难确定每次回撤的持续时间和恢复时间。到目前为止我有这个代码:

import pandas as pd
import pickle
import xlrd
import numpy as np

np.random.seed(0)
df = pd.Series(np.random.randn(2500)*0.7+0.05, index=pd.date_range('1/1/2000', periods=2500, freq='D'))
df= 100*(1+df/100).cumprod()
df=pd.DataFrame(df)
df.columns = ['close']
df['ret'] = df.close/df.close[0]
df['modMax'] = df.ret.cummax()
df['modDD'] = 1-df.ret.div(df['modMax'])
groups = df.groupby(df['modMax'])
dd = groups['modMax','modDD'].apply(lambda g: g[g['modDD'] == g['modDD'].max()])
top10dd = dd.sort_values('modDD', ascending=False).head(10)
top10dd
Run Code Online (Sandbox Code Playgroud)

这给出了该系列中 10 个最高的回撤,但我还想知道回撤的持续时间和恢复时间。

python pandas

5
推荐指数
1
解决办法
2356
查看次数

标签 统计

pandas ×2

python ×2

numpy ×1

quantitative-finance ×1