You need to enable JavaScript to run this app. Pandas计算个股阶段收益率 筛选指定时段收益率最高的10支股票
优惠活动
大模型
产品
解决方案
定价
更多

Pandas计算个股阶段收益率 筛选指定时段收益率最高的10支股票

股票收益率Top10计算代码修正方案

原有代码核心问题

  • 变量命名不符合Python规范:变量不能以%开头,同时存在拼写错误,Gain_Loss和后续调用的Gain_Lost不一致
  • 遍历逻辑错误:循环遍历股票代码时硬编码下载IBM的行情数据,没有将下载的收盘价赋值给变量存储,也没有关联对应股票代码
  • 缺少异常处理:没有兼容股票代码无效、历史数据不足的场景,容易触发索引报错
  • 排序逻辑错误:仅对收益率数值排序,没有关联对应股票代码,且默认升序不符合从高到低的需求

修正后完整代码

import numpy as np
import pandas as pd
import yfinance as yf

# 读取股票列表
stock_list = pd.read_excel("Stocks.xlsx")
# 如需返回股票名称,可在此处建立代码和名称的映射关系
# stock_name_map = dict(zip(stock_list["Stock code"], stock_list["Stock name"]))
stock_code_List = stock_list["Stock code"]
start_date = "2019-01-01"

def top_10_stocks(start_date, stock_code_list):
    # 存储股票代码和对应收益率
    stock_return_list = []
    for code in stock_code_list:
        try:
            # 下载对应股票从起始日到当前的收盘价
            close_series = yf.download(code, start=start_date)["Close"]
            # 过滤数据不足的股票
            if len(close_series) < 2:
                continue
            # 计算区间收益率
            gain_loss = ((close_series.iloc[-1] - close_series.iloc[0]) / close_series.iloc[0]) * 100
            stock_return_list.append((code, gain_loss))
        except Exception:
            # 跳过下载失败的股票
            continue
    # 按收益率降序排序
    stock_return_list.sort(key=lambda x: x[1], reverse=True)
    # 取前10支股票代码,如需返回名称可替换为 stock_name_map[item[0]]
    top_10 = [item[0] for item in stock_return_list[:10]]
    return top_10

# 调用函数输出结果
print(top_10_stocks(start_date, stock_code_List))

代码核心逻辑说明

  • 遍历每支股票代码下载历史收盘价,兼容异常场景跳过无效股票
  • 计算每支股票从起始日到最新收盘的区间涨跌幅
  • 按涨跌幅从高到低排序后提取前10支股票信息返回

内容的提问来源于stack exchange,提问作者alexlaw888

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 20:36:03