跳到主要内容

查找股票代码

如果您知道在哪里查找,找到股票代码、证券标识符、行业和其他元数据是很容易的。本指南旨在介绍一些搜索、筛选和发现的方法。

备注

为了获得最大的覆盖范围和功能,请使用 [all] 包安装 OpenBB。

本页面的示例假设已安装 OpenBB 平台,环境处于活动状态,并已导入到 Python 会话中。

from openbb import obb

如果安装是全新的,或者刚刚安装了扩展,则需要重建 Python 接口。这只需要几分钟即可完成。

查找股票代码的最简单方法是使用基本文本查询。

搜索纳斯达克

Details
# 搜索摩根大通相关股票
result = obb.equity.search("JPMorgan", provider="nasdaq")
df = result.to_dataframe()
print(df.head(3))
序号代码名称纳斯达克交易交易所市场类别ETF交易单位测试发行财务状态CQS代码纳斯达克代码下一股份
0AMJBJPMorgan Chase & Co. Alerian MLP Index ETNs due January 28, 2044YPY100NAMJBAMJBN
1BBAGJPMorgan BetaBuilders U.S. Aggregate Bond ETFYPY100NBBAGBBAGN
2BBAXJPMorgan BetaBuilders Developed Asia Pacific-ex Japan ETFYZY100NBBAXBBAXN

搜索芝加哥期权交易所 (Cboe)

Details
# 搜索 SPX 相关指数
result = obb.index.search("SPX", provider="cboe")
df = result.to_dataframe()
print(df.tail(5))
序号代码名称描述数据延迟货币时区开盘时间收盘时间交易日报价频率报价周期
32SPXVIVPROSHARES S&P 500 EX-HEALTH CARE ETFPROSHARES S&P 500 EX-HEALTH CARE ETF15USDAmerica/Chicago08:00:0016:00:00MonToFriCRegular
33VIX1DCboe 1-Day Volatility Index®通过汇总各种执行价格的 S&P 500 指数看跌和看涨期权的加权价格来估计预期波动率15USDAmerica/Chicago08:00:0016:00:00MonToFriCRegular

搜索 ETF

Details
# 搜索黄金相关 ETF
result = obb.etf.search("gold", provider="tmx")
df = result.to_dataframe()
print(df.tail(5))

按行业搜索

# 搜索科技行业股票
tech_stocks = obb.equity.search("technology", provider="nasdaq")
df = tech_stocks.to_dataframe()

# 筛选科技公司
tech_companies = df[df['name'].str.contains('Technology|Tech|Software', case=False, na=False)]
print(f"找到 {len(tech_companies)} 家科技公司")
print(tech_companies[['symbol', 'name']].head(10))

按国家/地区搜索

# 搜索中国相关股票
china_stocks = obb.equity.search("China", provider="nasdaq")
df = china_stocks.to_dataframe()

# 显示中国相关公司
print("中国相关股票:")
print(df[['symbol', 'name']].head(10))

高级搜索示例

def search_stocks_by_keyword(keyword, max_results=20):
"""
根据关键词搜索股票
"""
try:
result = obb.equity.search(keyword, provider="nasdaq")
df = result.to_dataframe()

if df.empty:
print(f"未找到包含 '{keyword}' 的股票")
return None

# 限制结果数量
df = df.head(max_results)

# 清理和格式化数据
df_clean = df[['symbol', 'name', 'exchange', 'etf']].copy()
df_clean['is_etf'] = df_clean['etf'] == 'Y'

return df_clean

except Exception as e:
print(f"搜索出错: {e}")
return None

# 使用示例
keywords = ['Apple', 'Microsoft', 'Tesla', 'Amazon']
for keyword in keywords:
print(f"\n搜索关键词: {keyword}")
results = search_stocks_by_keyword(keyword, 5)
if results is not None:
print(results)

筛选和过滤

def filter_stocks(search_term, exchange_filter=None, exclude_etf=True):
"""
搜索并筛选股票
"""
result = obb.equity.search(search_term, provider="nasdaq")
df = result.to_dataframe()

# 排除 ETF
if exclude_etf:
df = df[df['etf'] != 'Y']

# 按交易所筛选
if exchange_filter:
df = df[df['exchange'].isin(exchange_filter)]

return df[['symbol', 'name', 'exchange', 'market_category']]

# 示例:搜索银行股,排除 ETF,只显示主要交易所
bank_stocks = filter_stocks(
"bank",
exchange_filter=['Q', 'N'], # NASDAQ 和 NYSE
exclude_etf=True
)
print("银行股票:")
print(bank_stocks.head(10))

多数据源搜索

def multi_source_search(query):
"""
使用多个数据源搜索
"""
results = {}
providers = ['nasdaq'] # 可以添加更多提供商

for provider in providers:
try:
result = obb.equity.search(query, provider=provider)
df = result.to_dataframe()
results[provider] = len(df)
print(f"{provider}: 找到 {len(df)} 个结果")
except Exception as e:
print(f"{provider}: 搜索失败 - {e}")

return results

# 使用示例
search_results = multi_source_search("energy")

搜索验证和清理

def validate_and_clean_search(query, min_results=1):
"""
验证搜索结果并清理数据
"""
try:
result = obb.equity.search(query, provider="nasdaq")
df = result.to_dataframe()

if len(df) < min_results:
print(f"搜索结果太少: 只找到 {len(df)} 个结果")
return None

# 数据清理
df_clean = df.copy()

# 移除重复项
df_clean = df_clean.drop_duplicates(subset=['symbol'])

# 清理名称字段
df_clean['name'] = df_clean['name'].str.strip()

# 添加有用的标志
df_clean['is_etf'] = df_clean['etf'] == 'Y'
df_clean['is_nasdaq'] = df_clean['nasdaq_traded'] == 'Y'

return df_clean[['symbol', 'name', 'exchange', 'is_etf', 'is_nasdaq']]

except Exception as e:
print(f"搜索验证失败: {e}")
return None

# 使用示例
clean_results = validate_and_clean_search("renewable energy", min_results=5)
if clean_results is not None:
print("清理后的搜索结果:")
print(clean_results.head())

保存搜索结果

def save_search_results(query, filename=None):
"""
搜索并保存结果到文件
"""
result = obb.equity.search(query, provider="nasdaq")
df = result.to_dataframe()

if filename is None:
filename = f"search_{query.replace(' ', '_')}.csv"

# 保存到 CSV
df.to_csv(filename, index=False)
print(f"搜索结果已保存到: {filename}")
print(f"总共 {len(df)} 条记录")

return df

# 使用示例
healthcare_stocks = save_search_results("healthcare")

最佳实践

  1. 使用具体关键词:更具体的搜索词通常产生更相关的结果
  2. 验证结果:始终检查搜索结果的质量和相关性
  3. 多源验证:使用多个数据源验证重要信息
  4. 数据清理:清理和标准化搜索结果
  5. 缓存结果:对于重复搜索,考虑缓存结果
# 完整的搜索工作流示例
def comprehensive_stock_search(query):
"""
综合股票搜索工作流
"""
print(f"搜索: {query}")
print("-" * 50)

# 1. 基本搜索
result = obb.equity.search(query, provider="nasdaq")
df = result.to_dataframe()

if df.empty:
print("未找到结果")
return None

# 2. 基本统计
print(f"总结果数: {len(df)}")
print(f"ETF 数量: {len(df[df['etf'] == 'Y'])}")
print(f"股票数量: {len(df[df['etf'] == 'N'])}")

# 3. 按交易所分组
exchange_counts = df['exchange'].value_counts()
print(f"\n按交易所分布:")
print(exchange_counts.head())

# 4. 返回清理后的结果
return df[['symbol', 'name', 'exchange', 'etf']].head(20)

# 使用示例
results = comprehensive_stock_search("artificial intelligence")
if results is not None:
print("\n前20个结果:")
print(results)