1 回答
TA贡献1878条经验 获得超4个赞
我正在使用 yfinance 的数据:
import yfnance as yf
df = yf.download('aapl', start='2020-01-01')[['Close']]
df['Chg'] = df['Close'].pct_change()
Close
Date
2019-12-31 73.412498
2020-01-02 75.087502
2020-01-03 74.357498
2020-01-06 74.949997
2020-01-07 74.597504
... ...
2020-09-03 120.879997
2020-09-04 120.959999
2020-09-08 112.820000
2020-09-09 117.320000
2020-09-10 118.930000
计算累积回报、滚动最大峰值以及尾随峰值的回撤:
df['Cum_ret'] = (1+ df['Chg']).cumprod() # cumulative return
df['Peaks'] = df['Cum_ret'].cummax() # cumulative peaks
df['Drawdown'] = (df['Cum_ret'] - df['Peaks']) / df['Peaks'] # drawdown from trailing peak
累积回报和峰值:
回撤:
编辑:刚刚注意到您正在处理 2 个投资组合回报,所以这并没有真正回答您的问题......
我认为这会做你想要的:
df['Drawdown'] = df.groupby('portfolio')['performance'].apply(drawdown_2)
portfolio period performance Drawdown
0 port1 201501 0.003718 0.000000
1 port1 201502 -0.004890 -0.004890
2 port1 201503 -0.004171 -0.009041
3 port1 201504 -0.006922 -0.015900
4 port1 201505 0.003545 -0.012411
5 port1 201506 0.003545 -0.008910
6 port1 201507 0.006901 -0.002071
7 port1 201508 0.000101 -0.001970
8 port1 201509 0.009081 0.000000
9 port1 201510 0.003062 0.000000
10 port1 201511 -0.008425 -0.008425
11 port1 201512 0.002580 -0.005867
12 port2 201501 0.009135 0.000000
13 port2 201502 0.009149 0.000000
14 port2 201503 -0.004252 -0.004252
15 port2 201504 -0.008788 -0.013003
16 port2 201505 -0.006210 -0.019132
17 port2 201506 0.006020 -0.013227
18 port2 201507 0.002983 -0.010284
19 port2 201508 0.008498 -0.001873
20 port2 201509 0.008080 0.000000
21 port2 201510 0.000138 0.000000
22 port2 201511 -0.008425 -0.008425
23 port2 201512 0.002580 -0.005867
添加回答
举报