计算最大回撤

计算最大回撤

1. 累积计算统计特征函数

PANDAS库中累积计算统计特征函数:
1、CUMSUM()
依次给出前1,2,…,n个数的和
2、CUMPROD()
依次给出前1,2,…,n个数的积
3、CUMMAX()
依次给出前1,2,…,n个数的最大值
4、CUMMIN()
依次给出前1,2,…,n个数的最小值

2. 示例

构造一个时间序列的dataframe

df = pd.DataFrame(abs(np.random.randn(10, 4)), index=pd.date_range('1/1/2023', periods=10), 
                  columns=list('ABCD')) 
df.index.name='date'
# 测试cummax
print(df)
df.cummax()

df的数值如下:

                   A         B         C         D
date                                              
2023-01-01  0.846219  0.885561  0.928451  1.079576
2023-01-02  1.050537  0.481874  0.399358  0.699084
2023-01-03  1.185733  0.999028  0.343530  0.552860
2023-01-04  0.895051  0.293099  0.753992  1.930219
2023-01-05  1.596002  0.810764  1.824537  0.137422
2023-01-06  0.861021  0.850009  0.672150  0.915488
2023-01-07  0.620457  0.511714  0.360230  0.224636
2023-01-08  0.762900  0.240447  0.243201  1.005045
2023-01-09  1.101702  1.663476  0.425403  1.497425
2023-01-10  1.448837  1.288810  1.061639  1.234628

cummax() ,累计最大值如下:

                   A         B         C         D
date                                              
2023-01-01  0.709423  0.490958  0.056300  0.329100
2023-01-02  0.709423  1.122827  0.114792  1.275127
2023-01-03  1.944903  1.122827  0.114792  1.275127
2023-01-04  1.944903  1.122827  0.114792  1.275127
2023-01-05  1.944903  1.452571  0.114792  1.644606
2023-01-06  1.944903  1.452571  1.775677  1.644606
2023-01-07  1.944903  1.452571  1.775677  1.644606
2023-01-08  1.944903  1.452571  1.775677  1.644606
2023-01-09  1.944903  1.452571  2.300825  1.644606
2023-01-10  1.944903  1.452571  2.300825  1.644606

计算最大回撤:

# 计算每天的最大回撤率
drawdown_daily = (df.cummax() - df) / df.cummax()
print('drawdown_daily:')
print(drawdown_daily)
#取最大回撤率
total_drawdown = drawdown_daily.max()
print('total_drawdown:')
print(total_drawdown)

结果如下:

drawdown_daily:
                   A         B         C         D
date                                              
2023-01-01  0.000000  0.000000  0.000000  0.000000
2023-01-02  0.000000  0.455854  0.569866  0.352446
2023-01-03  0.000000  0.000000  0.629997  0.487892
2023-01-04  0.245150  0.706616  0.187903  0.000000
2023-01-05  0.000000  0.188447  0.000000  0.928805
2023-01-06  0.460514  0.149164  0.631605  0.525708
2023-01-07  0.611243  0.487789  0.802564  0.883622
2023-01-08  0.521993  0.759320  0.866705  0.479310
2023-01-09  0.309711  0.000000  0.766843  0.224220
2023-01-10  0.092209  0.225231  0.418132  0.360369
total_drawdown:
A    0.611243
B    0.759320
C    0.866705
D    0.928805
dtype: float64

从图示上检验:

df['A'].plot(legend=True)
df['D'].plot(legend=True)
print(drawdown_daily.loc[drawdown_daily['A']==total_drawdown['A']])
print(drawdown_daily.loc[drawdown_daily['D']==total_drawdown['D']])

查询到A和D的最大回撤日期:

                   A         B         C         D
date                                              
2023-01-07  0.611243  0.487789  0.802564  0.883622
              A         B    C         D
date                                    
2023-01-05  0.0  0.188447  0.0  0.928805

A和D的最大回撤图示:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值