企业微信

数据源选择

获取所有股票的当日交易数据,数据源是核心。免费API如Yahoo Finance、Alpha Vantage提供每日数据,但请求频率和覆盖范围有限。付费数据源如Bloomberg、Wind、Quandl(现为Nasdaq Data Link)提供完整、实时的数据,但成本高。交易所官方接口如纳斯达克、纽交所的DIP(Data Insights Platform)提供权威数据,但需要认证和费用。

免费API获取方式

使用Yahoo Finance的yfinance库(Python)可获取历史日线数据,但当日数据需等待收盘后更新。示例代码:


import yfinance as yf

# 获取所有股票代码列表

symbols = ['AAPL', 'MSFT']  # 替换为实际列表

data = yf.download(symbols, period='1d', group_by='ticker')

Alpha Vantage提供每日调整数据,但免费版限制每分钟5次请求,不适合批量获取。

付费数据源接口

付费数据源提供稳定、高速的接口。Quandl(Nasdaq Data Link)有多个股票数据表,如WIKI Prices(已停止),现用其他数据。Wind金融终端提供Python API,可获取所有A股数据,但需要机构账号。Bloomberg的API通过xbbg库调用,但成本高昂。

如何获取所有股票的当日交易数据?

交易平台接口

券商和交易平台如Interactive Brokers(IB)提供API,可以获取实时和当日交易数据。IB的ib_insync库支持获取所有股票的数据:


from ib_insync import *

ib = IB()

ib.connect('127.0.0.1', 7497, clientId=1)

# 获取所有股票合约(需提前获取列表)

contracts = [Stock(symbol, 'SMART', 'USD') for symbol in symbols]

# 请求实时或历史数据

注意IB的API需要账户权限和费用。

数据获取策略

批量获取所有股票数据时,分批次拉取避免限流。股票代码列表可从交易所官网或数据提供商获取。定时抓取:在收盘后定时任务运行,获取当日数据。增量更新:只获取新增或变更的数据,减少请求量。

数据清洗与存储

原始数据往往包含缺失值、格式化问题。清洗步骤包括:

  • 去重:根据股票代码和日期去重。

  • 填充缺失值:或删除无效行。

  • 一致化字段:统一日期格式、调整复权因子。

  • 存储:使用数据库如SQLite、PostgreSQL或云存储(如S3)。

合规与数据质量

使用数据需遵守数据提供方的条款。数据质量包括准确性、完整性、及时性。验证方法:与交易所官方数据对比。实时性:当日交易数据在收盘后30分钟内获取较佳。

常见问题及处理

  1. 限流问题:使用代理IP、降低请求频率、采用异步请求。

  2. 代码变更:定期更新股票代码列表,处理退市和上市股票。

  3. 数据延迟:使用WebSocket或API推送而非轮询。

  4. 数据存储量:每日数据量约几千条,可考虑压缩存储。

实际案例

使用yfinance获取上证50成分股当日数据:


import yfinance as yf

import pandas as pd

# 假设有成分股列表

symbols = ['000001.SS', '600036.SS']  # 实际代码需带后缀

data = yf.download(symbols, period='1d', group_by='ticker')

data.to_csv('daily_data.csv')

对于A股,可使用akshare库获取所有股票的最新行情:


import akshare as ak

# 获取沪深京A股实时行情

df = ak.stock_zh_a_spot_em()

df.to_csv('all_stocks.csv')

akshare基于东方财富接口,免费且数据全面。

进阶:构建数据管道

使用Airflow调度任务,每日自动获取数据,写入数据库,通过SQL查询分析。步骤

  • 定时触发:每天15:30(收盘后)

  • 拉取数据:调用API或库

  • 清洗验证:检查行数、缺失值

  • 存储:写回数据库

  • 监控:失败重试和告警

获取所有股票的当日交易数据,方法各异,需根据预算、数据需求选择。免费方案适合个人学习,付费方案适合机构。核心是数据质量和合规。通过合理的管道设计,可以高效地获取和存储数据,支持后续的量化分析和投资决策。