使用np.dot计算组合年化收益未得预期结果的问题排查
问题排查与解决
核心错误原因
你犯了一个基础语法错误:把np.dot当成变量做赋值操作,而非调用这个点积计算函数。你的代码里写的是:
np.dot = (annual_returns, weights)
这行代码没有执行点积计算,而是把np.dot这个函数名重新赋值成了包含annual_returns和weights的元组,所以输出的就是这个元组的内容,自然得不到预期的加权平均结果。
正确写法
要计算点积,必须用函数调用的语法,将两个数组作为参数传入np.dot:
portfolio_return = np.dot(annual_returns, weights) print(portfolio_return)
完整修正后的代码
import numpy as np import pandas as pd from pandas_datareader import data as pdr import matplotlib.pyplot as plt import yfinance as yf yf.pdr_override() y_symbols = ['PG','MSFT', 'F', 'GE'] from datetime import datetime startdate = datetime(1995,1,3) enddate = datetime(2017,3,24) data = pdr.get_data_yahoo(y_symbols, start =startdate, end =enddate)['Adj Close'] returns = (data/data.shift(1)) - 1 annual_returns = returns.mean() * 252 print(annual_returns) weights = np.array([0.4, 0.4, 0.15, 0.05]) # 正确调用np.dot计算组合年化收益 portfolio_return = np.dot(annual_returns, weights) print("组合年化收益率:", portfolio_return)
额外说明
annual_returns是pandas的Series对象,np.dot可以直接和numpy数组计算点积,Series会自动转换为兼容的数组格式。- 执行修正后的代码后,会得到一个单个浮点数,也就是投资组合的加权平均年化收益率。
内容的提问来源于stack exchange,提问作者OT2022
相关产品推荐
相关产品推荐

