最大回撤计算--基于python

一、指标介绍

最大回撤率:是指在选定周期内任一历史时点往后推,产品净值走到最低点时的收益率回撤幅度的最大值。最大回撤用来描述买入产品后可能出现的最糟糕的情况。最大回撤是一个重要的风险指标,对于对冲基金和数量化策略交易,该指标比波动率还重要。

.回撤用来衡量该私募产品的抗风险能力。
回撤的意思,是指在某一段时期内产品净值从最高点开始回落到最低点的幅度
最大回撤率,不一定是(最高点净值-最低点净值)/最高点时的净值,也许它会出现在其中某一段的回落。
公式可以这样表达:
D为某一天的净值,i为某一天,j为i后的某一天,Di为第i天的产品净值,Dj则是Di后面某一天的净值
drawdown就是最大回撤率
drawdown=max((Di-Dj)/Di),其实就是对每一个净值进行回撤率求值,然后找出最大的。可以使用程序实现。
二、程序实现:
导入数据:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.style.use("seaborn") #图形网格效果
data = pd.read_excel("aaa.xlsx",index_col=[0],parse_dates=[0])
data 

结果:

 

收盘价走势 绘图:

plt.figure(figsize=(11,5))
plt.plot(data['close'])

 

 最大回撤计算方法:

i = np.argmax((np.maximum.accumulate(data['close']) - data['close'])) # 最大回撤结束的位置 最低的那个位置 np.argmax作用:取出数组中最大值对应的索引
if i == 0:
    j = 0
else:
    j = np.argmax(data['close'][:i])  # 回撤开始的位置 最高的那个点
maxdrawdown = data['close'][j] - data['close'][i] # 最大回撤
maxdrawdown_rate = (data['close'][j] - data['close'][i]) / data['close'][j] # 最大回撤率
drawdown_days = i - j # 回撤持续天数

 

 三、最大回撤可视化:

plt.rcParams['font.sans-serif']=['SimHei']  #显示汉字
start_DAY = data.index[i] #开始回撤的日期
end_DAY = data.index[j] #结束回撤的日期
start_net_value = data[data.index == start_DAY]['close'].values[0] #开始回撤的净值
end_net_value = data[data.index == end_DAY]['close'].values[0] #结束回撤的净值
plt.figure(figsize=(11,5))
plt.plot(data['close'],color='b')
plt.plot([start_DAY, end_DAY], [start_net_value, end_net_value], linestyle='--', label="最大回撤",color='r')
plt.legend()

 

 

 

 

 

 

 

 

 

 
posted @ 2023-03-06 15:17  方木--数据分析与挖掘  阅读(980)  评论(0编辑  收藏  举报