
获取实时数据的常用库
获取股票实时数据的途径多样,python生态中tushare和akshare是主流选择。tushare提供稳定接口,积分制限制部分功能,但基础实时行情可用。akshare完全开源免费,数据源来自公开网络,实时性稍差但覆盖面广。其他库如yfinance针对美股,baostock偏历史数据,实时性不足。选择库时需权衡稳定性、数据源和接口限制。
安装与环境配置
安装库通过pip直接执行:pip install tushare akshare。若使用tushare,需注册获取token,设置环境变量或代码中直接传入。akshare无需注册,直接调用函数。建议使用虚拟环境管理依赖,避免冲突。代码中导入模块:import tushare as ts,import akshare as ak。注意版本更新,接口可能变动,定期查看官方文档。

tushare获取实时行情
使用tushare的get_realtime_quotes接口,传入股票代码列表,返回DataFrame包含最新价、涨跌幅、成交量等。代码示例:
import tushare as ts
pro = ts.pro_api('你的token')
df = ts.get_realtime_quotes(['000001', '600000'])
print(df[['code', 'price', 'volume']])
该接口无需积分,但数据延迟约几秒。若需更精细的盘口数据,可用pro.realtime_quote,需一定积分。注意沪深代码前缀区分,深市需加sz前缀,沪市sh。tushare的实时数据适合个人研究,高频交易不推荐。
akshare获取实时数据
aakshare提供stock_zh_a_spot_em函数,获取沪深京A股实时行情,返回全市场数据。代码示例:
import akshare as ak
df = ak.stock_zh_a_spot_em()
print(df[['代码', '最新价', '涨跌幅']])
该函数数据源自东方财富,延迟约30秒。其他接口如stock_zh_a_spot(新浪源)也类似。akshare直接返回DataFrame,便于处理。若需特定股票,可筛选:df[df['代码']=='000001']。注意列名可能变化,根据实际版本调整。
数据清洗与实时监控
原始数据含缺失值、非数值类型,需清洗。使用pd.to_numeric转换价格列,dropna删除空行。监控循环可每隔几秒拉取数据,计算涨跌幅,触发条件时发送预警。代码片段:
import time
import pandas as pd
while True:
df = ak.stock_zh_a_spot_em()
target = df[df['代码']=='000001']
price = float(target['最新价'])
print(f"时间: {time.strftime('%H:%M:%S')} 价格: {price}")
time.sleep(5)
实时监控需注意接口调用频率,避免被封IP。加权随机延时或使用代理。数据处理时,将时间戳转为标准格式,便于存储。
实时数据应用到策略
将实时数据用于简单均线策略,计算5日均线,当价格上穿时买入信号。需维护历史数据窗口,使用deque存储最近价格。示例:
from collections import deque
history = deque(maxlen=5)
while True:
price = get_price()
history.append(price)
if len(history) == 5:
ma5 = sum(history)/5
if price > ma5 and history[-2] <= ma5:
print("买入信号")
time.sleep(60)
实时策略需考虑交易成本、滑点,回测验证。数据延迟影响信号准确性,高频交易需更低延迟接口,如websocket流。
数据存储与日志记录
将实时数据存储到SQLite或CSV,便于回测。使用pandas.to_csv追加模式。日志记录用logging模块,记录时间、价格、异常。示例:
import logging
logging.basicConfig(level=logging.INFO, filename='realtime.log')
df.to_csv('realtime.csv', mode='a', header=not os.path.exists('realtime.csv'))
存储数据时注意字段一致性,避免重复。定期清理历史数据,防止磁盘占用。
常见问题与解决
网络超时导致数据获取失败,增加重试机制:
def fetch_with_retry(func, retries=3):
for i in range(retries):
try:
return func()
except Exception as e:
time.sleep(2**i)
raise e
接口变更导致列名不符,用inspect.signature查看参数。数据频率限制,查阅官方文档。实时性不足,考虑付费API或自行爬取。
注意事项与最佳实践
尊重数据源版权,遵守使用条款。实时数据存在延迟,不用于实盘大额交易。测试时使用模拟盘。代码模块化,便于维护。定期更新库版本。监控程序异常退出,使用守护进程。数据缓存减少请求次数。
通过tushare和akshare可轻松获取股票实时数据,清洗后应用于监控和策略。选择合适库,注意接口限制,数据延迟,并做好异常处理。实时数据是量化交易的基础,掌握读取方法至关重要。后续可扩展至多股票、技术指标计算,构建完整系统。