python - Pandas 缩编持续时间

标签 python 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

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

最佳答案

我是这样解决问题的:

def drawdown_group(df,index_list):
    group_max,dd_date = index_list
    ddGroup = df[df['modMax'] == group_max]
    group_length = len(ddGroup)
    group_dd = ddGroup['dd'].max()
    group_dd_length = len(ddGroup[ddGroup.index <= dd_date])
    group_start = ddGroup[0:1].index[0]
    group_end = ddGroup.tail(1).index[0]
    group_rec = group_length - group_dd_length
    #print (group_start,group_end,group_dd,dd_date,group_dd_length,group_rec,group_length)
    return group_start,group_end,group_max,group_dd,dd_date,group_dd_length,group_rec,group_length

dd_col = ('start','end','peak', 'dd','dd_date','dd_length','dd_rec','tot_length')
df_dd = pd.DataFrame(columns = dd_col)
for i in range(1,10):
    index_list = top10dd[i-1:i].index.tolist()[0]
    #print(index_list)
    start,end,peak,dd,dd_date,dd_length,dd_rec,tot_length = drawdown_group(df,index_list)
    #print(start,end,dd,dd_date,dd_length,dd_rec,tot_length)
    df_dd.loc[i-1] = drawdown_group(df,index_list)

生成此表: enter image description here

关于python - Pandas 缩编持续时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39058034/

相关文章:

python - 由于 pip freeze(包括所有 anaconda 软件包)导致 Heroku 部署出现问题

python - 工作副本 checkin 时出现运行时错误(超出最大递归深度)

python - 使用 mock.patch 和 mock_open 模拟包含 JSON 数据的文件

python - 使用 matplotlib.pyplot.plot_date 的子图

python - 在pandas的分组数据中插入值为0的缺失记录

python - 使用 pandas group by 从最大到最小的顺序排序

python - 从对象到字符串的 pandas dtype 转换

python - Python 中二维图像的非均匀采样

python - 从一组文档中找到最相似的文档(最近的邻居)

python - 如何动态创建列名?当我们分组并对多列求和时?