在量化交易的世界里,数据是燃料,行情是基础。没有准确、及时的实时行情数据,再精妙的策略也只是空中楼阁。对于刚入门量化交易的朋友来说,如何获取实时行情往往是第一个需要解决的技术问题。今天,我就来详细介绍几种常用的实时行情获取方法,帮助你迈出量化交易的第一步。
方法一:AkShare(A 股免费数据首选)
AkShare 是一个开源的 Python 财经数据接口库,由国内开发者维护,专门针对 A 股市场设计。它的最大优势是完全免费、无需注册、数据覆盖面广。
import akshare as ak
# 获取 A 股实时行情
df = ak.stock_zh_a_spot_em()
print(df[["代码", "名称", "最新价", "涨跌幅", "成交量"]].head(10))
# 获取个股实时行情
df = ak.stock_zh_a_spot_em(symbol="sz000001")
print(df)
AkShare 的数据来源主要是东方财富、新浪财经等公开数据源,通过爬虫技术获取。它可以获取 A 股、港股、美股、期货、期权、基金等多种金融数据。
优点:
- 完全免费,无需注册 API Key
- 数据种类丰富,覆盖多个市场
- 社区活跃,更新频繁
缺点:
- 数据稳定性依赖源网站,可能偶尔失效
- 有调用频率限制,不适合高频交易
- 数据有 15 分钟左右延迟
方法二:Tushare(专业量化数据平台)
Tushare 是国内老牌的财经数据平台,提供稳定、规范的金融数据接口。它有免费版和付费版,免费版可以满足基本需求,付费版提供更高质量的数据。
import tushare as ts
# 初始化(需要注册获取 token)
ts.set_token('your_token_here')
pro = ts.pro_api()
# 获取实时行情
df = ts.get_realtime_quotes("000001")
print(df[["code", "name", "price", "change", "volume"]])
# Pro 版本接口
df = pro.daily(ts_code="000001.SZ", start_date="20240101")
print(df.head())
使用 Tushare 需要先在其官网注册账号,获取 API Token。免费版每天有固定的积分额度,付费版可以享受更多数据和服务。
优点:
- 数据稳定可靠,适合生产环境
- 文档完善,示例丰富
- 支持多种数据格式和历史数据
缺点:
- 免费版有限制,高频使用需要付费
- 需要注册获取 Token
- 实时数据精度有限
方法三:Yahoo Finance(港股美股数据)
如果你交易港股或美股,Yahoo Finance 是一个非常不错的选择。它通过 yfinance 库提供免费的全球市场数据。
import yfinance as yf
# 获取美股实时数据
aapl = yf.Ticker("AAPL")
print(aapl.history(period="1d"))
# 获取港股实时数据
hsbc = yf.Ticker("0005.HK")
print(hsbc.history(period="1d"))
# 获取多个股票数据
tickers = yf.download(["AAPL", "GOOGL", "MSFT"], period="1d")
print(tickers)
yfinance 库使用非常简单,无需注册即可使用。它支持美股、港股、外汇、加密货币等多种资产类别。
优点:
- 完全免费,无需注册
- 覆盖全球主要市场
- 支持历史数据和实时数据
缺点:
- A 股数据支持有限
- 数据延迟约 15-20 分钟
- 高频调用可能被限制
其他数据源
除了上述三种主流方法,还有一些其他数据源值得了解:
新浪财经接口:通过 HTTP 请求直接获取,速度快,但需要自己解析数据格式。
券商 API:部分券商提供量化交易接口,如华泰、中信等,可以获取实时行情并直接交易。
专业数据服务商:如 Wind、Choice、同花顺 iFinD 等,数据质量高,但价格昂贵,适合机构用户。
注意事项
使用免费数据源时,有几点需要特别注意:
免费数据有延迟(15 分钟左右)。这是免费数据的通病,因为交易所的实时行情是需要付费购买的。对于短线交易来说,15 分钟的延迟可能是致命的,但对于中长线策略影响不大。
高频交易需要付费数据源。如果你的策略依赖高频数据或需要快速执行,建议购买专业的付费数据服务。付费数据通常延迟在毫秒级别,稳定性也更有保障。
注意 API 调用频率限制。免费接口通常有调用次数限制,过于频繁的请求可能导致 IP 被封。建议做好数据缓存,避免重复请求。
数据质量需要验证。免费数据可能存在错误或缺失,使用前最好进行数据清洗和验证。特别是进行回测时,数据质量直接影响结果的可靠性。
实战建议
以下是几个实用建议:
-
多数据源备份。不要依赖单一数据源,可以配置多个数据源,当一个失效时自动切换到另一个。
-
做好数据缓存。获取的数据可以本地存储,避免重复请求。可以使用 SQLite、MySQL 或 HDF5 等格式存储。
-
异常处理要完善。网络请求可能失败,代码中要加入 try-except 处理,确保程序稳定运行。
-
遵守使用条款。使用免费数据时要遵守相关服务条款,不要用于商业用途或过度爬取。
完整示例
以下是一个完整的实时行情监控示例:
import akshare as ak
import pandas as pd
import time
def monitor_stocks(stock_codes, target_price):
"""监控股票价格,达到目标价时提醒"""
while True:
try:
df = ak.stock_zh_a_spot_em()
for code in stock_codes:
stock = df[df["代码"] == code]
if not stock.empty:
price = float(stock["最新价"].values[0])
if price >= target_price[code]:
print(f"⚠️ {code} 达到目标价 {price}")
time.sleep(60) # 每分钟检查一次
except Exception as e:
print(f"错误:{e}")
time.sleep(10)
# 使用示例
# monitor_stocks(["sz000001", "sh600000"], {"sz000001": 10.5})
免责说明:本文仅供技术分享,不构成任何投资建议。数据接口可能随时变化,请以官方文档为准。投资有风险,入市需谨慎。