You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 13:45:31