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

如何获取Yahoo Finance支持的全部股票代码列表?

如何获取Yahoo Finance支持的完整股票代码并验证用户输入

问题背景

开发股票交易程序时,需要验证用户输入的股票代码是否被Yahoo Finance支持。之前尝试整合NYSE、NASDAQ和S&P500的代码到本地列表,但存在代码缺失或失效的问题;用yahooquery仅能获取少量代码,从维基百科抓取的S&P500代码也不够全面,希望找到获取Yahoo Finance支持的全量股票代码的方案,并优化验证逻辑。

当前使用的Tkinter验证代码如下:

from tkinter import Tk, Label, Entry, Button
import sys
root = Tk()
root.title("Enter Ticker Symbol")
root.geometry("500x400")

message_label = Label(root, text="Enter NASDAQ ticker symbol:")
message_label.pack()
ticker_input = Entry(root)
ticker_input.pack()
ticker = None
names = open('ticker.names')
read = names.read()

def set_ticker(input):
    global ticker
    print(f"Setting ticker to {input}")
    ticker = input
    
def validate_ticker(input):
    if input in read:
        print(input)
        set_ticker(input)
        print(f"{input} is set to the ticker.")
        root.destroy()
    else:   
        set_ticker(input)     
        print(f"Error: {ticker} is not vaild in YAHOO database.")
        sys.exit(1)
    

ok_button = Button(root, text="OK", command=lambda: validate_ticker(ticker_input.get()))
ok_button.pack()

root.mainloop()

解决方案

1. 实时验证代码有效性(推荐,无需预存全量列表)

预存本地代码列表的最大问题是无法实时同步Yahoo Finance的代码更新(比如新增、退市代码),直接通过API实时验证更可靠。可以使用yfinance库尝试获取股票的基本信息,若请求失败则判定为无效代码。

修改后的验证代码示例:

from tkinter import Tk, Label, Entry, Button, messagebox
import yfinance as yf

root = Tk()
root.title("Enter Ticker Symbol")
root.geometry("500x400")

message_label = Label(root, text="Enter ticker symbol:")
message_label.pack()
ticker_input = Entry(root)
ticker_input.pack()
ticker = None

def set_ticker(input):
    global ticker
    print(f"Setting ticker to {input}")
    ticker = input
    
def validate_ticker(input):
    if not input.strip():
        messagebox.showerror("Error", "Please enter a ticker symbol")
        return
    
    try:
        # 尝试获取股票信息,若失败会抛出异常
        stock = yf.Ticker(input)
        # 检查是否有基本信息(避免无效但不报错的情况)
        if stock.info.get('longName') or stock.info.get('symbol'):
            set_ticker(input)
            print(f"{input} is a valid Yahoo Finance ticker.")
            root.destroy()
        else:
            messagebox.showerror("Error", f"{input} is not a valid Yahoo Finance ticker.")
    except Exception as e:
        messagebox.showerror("Error", f"{input} is not a valid Yahoo Finance ticker.")
    

ok_button = Button(root, text="OK", command=lambda: validate_ticker(ticker_input.get()))
ok_button.pack()

root.mainloop()

2. 获取更全面的预存股票代码列表

如果必须使用本地列表,可以通过yahooquery获取主流交易所的成分股代码并合并去重,覆盖NYSE、NASDAQ、S&P500的大部分有效代码:

from yahooquery import Ticker
import pandas as pd

# 获取各交易所成分股代码
nasdaq_tickers = Ticker('^IXIC').components['symbol'].tolist()
sp500_tickers = Ticker('^GSPC').components['symbol'].tolist()
nyse_tickers = Ticker('^NYA').components['symbol'].tolist()

# 合并去重
all_tickers = list(set(nasdaq_tickers + sp500_tickers + nyse_tickers))

# 保存到本地文件
with open('ticker.names', 'w') as f:
    f.write('\n'.join(all_tickers))

print(f"已保存{len(all_tickers)}个有效股票代码到ticker.names")

注意事项

  • Yahoo Finance的API存在访问频率限制,频繁请求可能会被限制,建议添加请求间隔或使用代理。
  • 部分场外交易代码带有后缀(如.PK、.OB),验证时需考虑用户是否输入完整后缀。
  • 本地列表需要定期更新,避免因退市、新增代码导致验证失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 23:36:05