8、计算最大回撤

本文介绍了如何使用Python的pandas和numpy库对股票数据进行排序和计算最大回撤率,通过自定义函数`getMaxDrawdown`和`applyMaxDrawdown`实现了针对数据集的回撤值计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

8、最大回撤

数据准备

import pandas as pd
import numpy as np
df=pd.DataFrame({'pd_cd':['A','A','A','A','B','B','B','B'],
'trd_dt':[20170101,20170102,20170103,20170104,20170101,20170102,20170103,20170104],
'adj':[1.06,1.04,1.03,1.04,1.02,1.03,1.04,1.05]})

1.使用数组计算

自定义计算方法:

def getMaxDrawdown(x):
    '''
    :param x: 一组已经按照日期排好序的数组
    :return: 最大回撤
    '''
    j = np.argmax((np.maximum.accumulate(x) - x) / x)#最大回撤率
    # j = np.argmax(np.maximum.accumulate(x) - x)  # 最大回撤
    if j == 0:
        return 0
    i = np.argmax(x[:j])
    d = (x[i] - x[j]) / x[i]
    # d = (x[i] - x[j])
    return float(-d)


def applyMaxDrawdown(x):
    '''
    :param x: 一个已经按照日期排好序的数据集
    :return: 最大回撤值
    '''
    f = x.reset_index()
    array = pd.Series(f['adj'])##此处要填写计算的列名
    return getMaxDrawdown(array)

调用以上方法计算数据集的最大回撤:

#注意要先按日期排好序,否则计算的值不对
df=df.sort_values(by=['pd_cd','trd_dt'],ascending=True)
#以下两种方法调用均可
# df=df.groupby(by=['pd_cd'],as_index=False).agg({'adj':applyMaxDrawdown})
df=df.groupby(by=['pd_cd'],as_index=False).apply(lambda x:applyMaxDrawdown(x))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值