投资者B采用的投资策略是“定投策略”,即从2020年首个交易日在每个交易日均按照当日收盘价对每只股票各购买100股,计算每个交易日投资者B持有每只股票市值的盈亏情况并可视化,再计算每个交易日投资者B投资组合的整体市值盈亏情况并可视化,对数据分析结果进行解释阐述。
现在已经得到了5只股票的每日收盘价数据框,每日以收盘价数据买入100股,然后根据当天收盘价数据表示出股票每日市值,盈亏情况就是今日收盘价减去上一日收盘价乘以股数,总手数是360手。
jqr ndsd lcxx zggj zwzx
Date
2020-01-02 14.31 107.52 28.44 9.88 4.26
2020-01-03 14.36 109.55 29.28 9.83 4.26
2020-01-06 14.63 109.09 29.03 9.75 4.38
2020-01-07 14.74 108.50 28.97 9.79 4.50
2020-01-08 14.60 109.60 27.68 9.56 4.26
... ... ... ... ...
2021-06-24 10.22 467.30 28.21 6.38 6.23
2021-06-25 10.55 476.23 28.38 6.45 6.25
2021-06-28 10.51 493.90 28.47 6.38 6.28
2021-06-29 10.54 508.51 28.02 6.38 6.22
2021-06-30 10.67 534.80 28.13 6.37 6.14
#已经有了5只股票收盘价数据库
shares=pd.DataFrame(0, index=data.index,columns=data.columns)#这是AI给的代码,运行了之后报AttributeError: 'DataFrame' object has no attribute 'DataFrame'错误
portfolio_value=pd.Series()
for date, prices in data.iterrows():
shares.loc[date] += 100
value = (shares * prices).sum(axis=1)
pnl=value-(shares * data.iloc[0]).sum(axis=1)
portfolio_value[date] = value.sum()
daily_returns = pnl.sum() / (shares * data.iloc[0]).sum().sum()
print(portfolio_value)
print(daily_returns)
引用chatGPT作答,根据代码的第一行shares=pd.DataFrame(0, index=data.index,columns=data.columns),看起来data应该是另一个DataFrame对象。但是在给出的问题描述中没有提供data的定义,因此我们无法确定是否存在这个DataFrame对象。根据错误信息,很可能是在data.iterrows()这一行的代码中出现了问题。
另外,对于这种错误,通常需要查看完整的错误信息,以确定错误发生的确切位置。因此建议您提供完整的错误信息,以便更好地排查问题。
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
缺少一个变量data
来存储5只股票的每日收盘价数据,可以先将数据导入到DataFrame中,然后运行以下代码:
import pandas as pd
data = pd.read_csv('path/to/file.csv', index_col='Date') # 假设数据保存在CSV文件中,用read_csv读取
shares = pd.DataFrame(0, index=data.index, columns=data.columns)
portfolio_value = pd.Series()
for date, prices in data.iterrows():
shares.loc[date] += 100
value = (shares * prices).sum(axis=1)
pnl = value - (shares * data.iloc[0]).sum(axis=1)
portfolio_value[date] = value.sum()
daily_returns = portfolio_value.pct_change()
代码解释:
shares
:初始化持仓数量的DataFrame,所有值都为0,行索引和列标签与股票价格DataFrame (data
) 一致;portfolio_value
:初始化投资组合价值 (即所有股票的市值之和) 的Series;for
循环:对于每个交易日,将所有股票的持仓数量增加100股,计算当日每个股票的市值,并累加得到投资组合价值。由于所有股票都是同时购买的,因此第一个交易日的持仓数量就是100股,可以使用 data.iloc[0]
获取第一天的股票价格;pnl
:计算当日投资组合的盈亏,即当日投资组合价值减去当日之前购买时的成本;daily_returns
:用 pct_change()
方法计算每日投资组合的收益率。注意,上述代码没有使用 shares * data.iloc[0]
来计算投资组合成本,在例子中当天买入的股票价格和第一天的价格是一样的,因此直接用第一天的价格计算成本就可以了。如果在实际的股票交易中有价格变动,就需要使用实际的成本来计算盈亏了。
如果我的回答解决了您的问题,请采纳!
答案:1/8