查找股票代码
如果您知道在哪里查找,找到股票代码、证券标识符、行业和其他元数据是很容易的。本指南旨在介绍一些搜索、筛选和发现的方法。
备注
为了获得最大的覆盖范围和功能,请使用 [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代码 | 纳斯达克代码 | 下一股份 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | AMJB | JPMorgan Chase & Co. Alerian MLP Index ETNs due January 28, 2044 | Y | P | Y | 100 | N | AMJB | AMJB | N | ||
1 | BBAG | JPMorgan BetaBuilders U.S. Aggregate Bond ETF | Y | P | Y | 100 | N | BBAG | BBAG | N | ||
2 | BBAX | JPMorgan BetaBuilders Developed Asia Pacific-ex Japan ETF | Y | Z | Y | 100 | N | BBAX | BBAX | N |
搜索芝加哥期权交易所 (Cboe)
Details
# 搜索 SPX 相关指数
result = obb.index.search("SPX", provider="cboe")
df = result.to_dataframe()
print(df.tail(5))
序号 | 代码 | 名称 | 描述 | 数据延迟 | 货币 | 时区 | 开盘时间 | 收盘时间 | 交易日 | 报价频率 | 报价周期 |
---|---|---|---|---|---|---|---|---|---|---|---|
32 | SPXVIV | PROSHARES S&P 500 EX-HEALTH CARE ETF | PROSHARES S&P 500 EX-HEALTH CARE ETF | 15 | USD | America/Chicago | 08:00:00 | 16:00:00 | MonToFri | C | Regular |
33 | VIX1D | Cboe 1-Day Volatility Index® | 通过汇总各种执行价格的 S&P 500 指数看跌和看涨期权的加权价格来估计预期波动率 | 15 | USD | America/Chicago | 08:00:00 | 16:00:00 | MonToFri | C | Regular |
搜索 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")
最佳实践
- 使用具体关键词:更具体的搜索词通常产生更相关的结果
- 验证结果:始终检查搜索结果的质量和相关性
- 多源验证:使用多个数据源验证重要信息
- 数据清理:清理和标准化搜索结果
- 缓存结果:对于重复搜索,考虑缓存结果
# 完整的搜索工作流示例
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)