Python计算固定日期股票相对涨跌幅及绘图代码修改方法
问题原因
- 现有代码的双层循环每次计算单个价格的涨跌幅后,都会直接覆盖
change变量,没有按股票维度存储完整的涨跌幅时间序列,循环跑完后change仅保留最后一只股票最后一个价格的计算结果,根本无法绘制多曲线对比图。 - 代码中绘图部分用到的
start_date变量没有提前定义,运行时会直接抛出变量不存在的报错。 - 手写逐行循环计算的逻辑完全冗余,pandas原生支持整列向量化运算,代码更简洁、计算效率更高,也不容易出现变量覆盖的问题。
修改后完整代码
import yfinance as yf import matplotlib.pyplot as plt tickers_list = ['AAPL', 'TSLA', 'AMD'] start_date = '2022-1-1' # 拉取指定时间段的调整后收盘价数据 price_df = yf.download(tickers_list, start_date)['Adj Close'] # 一次性计算所有标的相对基准日的累计涨跌幅,无需逐行循环 change_df = (price_df - price_df.iloc[0]) / price_df.iloc[0] * 100 # 绘制多标的涨跌幅对比图 plt.figure(figsize=(12, 6)) plt.plot(change_df) plt.xlabel('Date') plt.ylabel('% Change') plt.title("Price percentage change of {} from {} to today".format(", ".join(tickers_list), start_date)) plt.legend(change_df.columns) plt.grid(alpha=0.3) plt.show()
关键修改点说明
- 用
price_df.iloc[0]直接取所有标的2022年首个交易日的基准收盘价,通过pandas向量化运算一次性算出全时间段所有标的的涨跌幅,计算结果是结构化的DataFrame,每列对应一只股票的完整涨跌幅序列,不存在变量覆盖问题。 - 补全了缺失的
start_date变量定义,修复运行报错问题。 - 绘图时直接传入存储了所有标的涨跌幅的DataFrame,matplotlib会自动按列绘制多条独立曲线,配合列名生成图例,即可得到多标的涨跌幅对比效果。
内容的提问来源于stack exchange,提问作者user19427517
相关产品推荐
相关产品推荐

