我有13只ETF基金的回报率时间序列。我检索了yfinance从2017年1月31日到2023年3月31日的月度历史回报- 5.25年的月度回报。
import yfinance as yf
tickers_list = ['IVV', 'SPY', 'VOO', 'IWM', 'VTWO', 'VUG', 'MGK', 'IYW', 'SMH','SOXL', 'TECL', 'QQQ', 'IWP']
# Fetch the data
data = yf.download(tickers_list,'2016-12-31', '2023-03-31')['Adj Close'].resample('M').ffill().pct_change()*100
print(data)
[*********************100%***********************] 13 of 13 completed
IVV IWM IWP IYW MGK QQQ \
Date
2018-01-31 NaN NaN NaN NaN NaN NaN
2018-02-28 -3.804348 -3.843673 -3.147805 0.406958 -2.802898 -1.292810
2018-03-31 -2.477626 1.217483 -0.132897 -3.782773 -3.168533 -4.078817
2018-04-30 0.354223 0.981397 -0.992279 -0.118908 0.409860 0.505834
2018-05-31 2.410717 6.163581 3.770650 7.499553 4.649504 5.672917
... ... ... ... ... ... ...
2022-11-30 5.551971 2.203672 5.362622 6.584629 4.494448 5.544149
2022-12-31 -5.728810 -6.514127 -6.024389 -8.342131 -8.791930 -9.013667
2023-01-31 6.272610 9.818770 8.720104 11.008199 10.722378 10.642924
2023-02-28 -2.532388 -1.723420 -1.023219 0.737697 -1.459161 -0.359781
2023-03-31 2.290707 -6.564785 -0.550342 9.668837 7.127450 7.701563
SMH SOXL SPY TECL VOO VTWO \
Date
2018-01-31 NaN NaN NaN NaN NaN NaN
2018-02-28 0.028171 -2.869297 -3.636015 -4.143532 -3.726007 -3.846475
2018-03-31 -2.121285 -9.531145 -2.741069 -12.784944 -2.467635 1.133835
2018-04-30 -6.827767 -20.226410 0.516831 -1.433560 0.346994 1.057984
2018-05-31 10.323185 35.518003 2.430893 20.565807 2.416443 6.086664
... ... ... ... ... ... ...
2022-11-30 20.351965 54.932731 5.559164 14.424575 5.505000 2.146921
2022-12-31 -9.872508 -29.779331 -5.762832 -24.745740 -5.732450 -6.447269
2023-01-31 16.832563 50.155129 6.288740 27.737546 6.290209 9.776884
2023-02-28 0.970050 0.895312 -2.514271 -0.885582 -2.498403 -1.695793
2023-03-31 9.177110 22.710299 2.266375 27.753202 2.281491 -6.527044
VUG
Date
2018-01-31 NaN
2018-02-28 -2.921836
2018-03-31 -2.490675
2018-04-30 0.274836
2018-05-31 4.386032
... ...
2022-11-30 4.624219
2022-12-31 -8.363891
2023-01-31 10.384313
2023-02-28 -1.424080
2023-03-31 5.852608
[63 rows x 13 columns]
我想检索市场价值,并在资产ID列中计算ETF基金的3个月、1年和3年回报。我使用ETF价格计算的市场价值。ETF数据源,并希望输出如下所示:
这是我迄今为止的脚本,但只适用于一个ETF基金-我需要做所有13个基金,并像图中的输出一样布局它们。
enter code here import datetime
from datetime import datetime
import dateutil.relativedelta
from pandas.tseries.offsets import DateOffset
from dateutil.relativedelta import relativedelta
from datetime import date, timedelta
import pandas as pd
import numpy as np
#As of Date:
VME = '3/31/2023'
#3 Month Return
df_3m = df_data.loc[(df_data['SecurityID'] =='VOO') & (df_data['Date'] >= pd.to_datetime(VME)-pd.DateOffset(months= 2)) & (df_data['Date'] <= VME)]
df_3mror = (np.prod(df_3m['Return']/100+1)-1)*100
#1 Year Return
df_1yr = df_data.loc[(df_data['SecurityID'] =='VOO') & (df_data['Date'] >= pd.to_datetime(VME)-pd.DateOffset(months= 11)) & (df_data['Date'] <= VME)]
df_1ror = (np.prod(df_1yr['Return']/100+1)-1)*100
#3 Year Return
df_3yr = df_data.loc[(df_data['SecurityID'] =='VOO') & (df_data['Date'] >= pd.to_datetime(VME)-pd.DateOffset(months= 35)) & (df_data['Date'] <= VME)]
df_3ror = (np.prod(df_3yr['Return']/100+1)**(12/36)-1)*100
print(df_3mror)
print(df_1ror)
print(df_3ror)
我希望有人能指导我或能够弄清楚如何做所有的ETF基金在一个镜头,并奠定了它一样,在图片。再次感谢您为我们新学员提供的帮助。
1条答案
按热度按时间zf9nrax11#
我不能自己检查你在你的帖子中提供了什么,但我建议你重构你的代码:
results
,例如就像这样: