本文是「量投研习社」Day 2的资深实战篇,适合已掌握基础安装的开发者。我们将深入天勤SDK行情API核心,构建一个专业的实时行情监控系统。
引言:行情数据是量化交易的基石
在量化交易中,准确、及时的行情数据直接决定策略的成败。天勤SDK提供了业界领先的行情API体系,具备以下特点:
通过本文,你将掌握天勤SDK行情API的核心使用方法,并能构建适用于实盘交易的行情监控系统。
一、天勤SDK行情API架构概览
天勤SDK的行情体系采用分层设计:
┌─────────────────────────────────────┐│ 应用层:策略逻辑 │├─────────────────────────────────────┤│ 接口层:TqApi、get_quote()等 │├─────────────────────────────────────┤│ 协议层:Diff协议、WebSocket │├─────────────────────────────────────┤│ 网关层:天勤行情网关服务器 │├─────────────────────────────────────┤│ 交易所:上期所、大商所、中金所等 │└─────────────────────────────────────┘
核心对象:
二、实时行情订阅:从单合约到多合约
基础:单合约行情获取
from tqsdk import TqApi, TqAuthapi = TqApi(auth=TqAuth("您的快期账户","您的密码"))quote = api.get_quote("SHFE.rb2510")# 螺纹钢主力合约# 等待数据更新await api.wait_update()print(f"合约: {quote.instrument_name}")print(f"最新价: {quote.last_price}")print(f"买一价: {quote.bid_price1}, 买一量: {quote.bid_volume1}")print(f"卖一价: {quote.ask_price1}, 卖一量: {quote.ask_volume1}")
进阶:多合约并行监控
实际交易中,我们通常需要同时监控多个相关品种:
# 定义监控合约列表symbols =["SHFE.rb2510",# 螺纹钢"SHFE.hc2510",# 热卷"SHFE.ss2510",# 不锈钢"DCE.i2510",# 铁矿石]# 批量订阅quotes ={symbol: api.get_quote(symbol)for symbol in symbols}
专业:完整的多合约监控系统
我们已为你准备了一个完整的实时行情监控系统,保存在 src/tq_realtime_quotes.py:
核心功能:
✅ 多合约并行订阅
✅ 实时行情显示
✅ K线数据获取
✅ 风控参数监控
✅ 性能统计记录
运行方式:
# 基础监控(默认合约)python src/tq_realtime_quotes.py# 指定监控合约python src/tq_realtime_quotes.py --symbols SHFE.rb2510 DCE.m2510 CFFEX.IF2510# 启用图形界面python src/tq_realtime_quotes.py --gui
系统架构核心代码:
classRealTimeQuotesMonitor:"""实时行情监控器"""asyncdefinitialize(self):"""初始化数据订阅"""# 订阅合约行情for symbol in self.symbols: self.quotes[symbol]= self.api.get_quote(symbol)# 同时订阅1分钟K线 self.klines[symbol]= self.api.get_kline_serial(symbol,60)print(f"✅ 已订阅: {symbol}")# 等待第一次数据更新await self.api.wait_update()asyncdefrun_monitor(self, duration:int=3600):"""运行行情监控"""while self.running:# 等待数据更新await self.api.wait_update()# 显示最新行情for symbol in self.symbols: quote = self.quotes.get(symbol)if quote:# 格式化显示 self.display_quote(symbol, quote)
三、深度数据获取:Tick与K线高级用法
Tick数据:微观市场结构
Tick数据包含每一笔成交的详细信息,是高频策略的基础:
# 获取Tick序列ticks = api.get_tick_serial("SHFE.rb2510")# 分析Tick数据iflen(ticks)>0: latest_tick = ticks.iloc[-1]print(f"时间: {latest_tick.datetime}")print(f"成交价: {latest_tick.last_price}")print(f"成交量: {latest_tick.volume}")print(f"成交额: {latest_tick.amount}")print(f"持仓量: {latest_tick.open_interest}")
K线数据:多周期策略支持
天勤SDK支持从Tick到日线的全周期K线:
# 不同周期的K线获取kline_1min = api.get_kline_serial("SHFE.rb2510",60)# 1分钟kline_5min = api.get_kline_serial("SHFE.rb2510",300)# 5分钟kline_15min = api.get_kline_serial("SHFE.rb2510",900)# 15分钟kline_1hour = api.get_kline_serial("SHFE.rb2510",3600)# 1小时kline_1day = api.get_kline_serial("SHFE.rb2510",86400)# 日线# K线数据字段print(f"时间: {kline_1min.datetime.iloc[-1]}")print(f"开盘: {kline_1min.open.iloc[-1]}")print(f"最高: {kline_1min.high.iloc[-1]}")print(f"最低: {kline_1min.low.iloc[-1]}")print(f"收盘: {kline_1min.close.iloc[-1]}")print(f"成交量: {kline_1min.volume.iloc[-1]:,}")print(f"持仓量: {kline_1min.open_interest.iloc[-1]:,}")
四、行情监控系统设计要点
1. 数据更新机制
asyncdefdata_update_loop(self):"""数据更新主循环"""whileTrue:# 等待新数据await self.api.wait_update()# 处理行情更新await self.process_quote_updates()# 处理K线更新await self.process_kline_updates()# 更新显示await self.refresh_display()
2. 性能优化策略
3. 风控集成方案
在行情监控中集成实时风控:
classQuoteMonitorWithRiskControl:"""带风控的行情监控器"""asyncdefcheck_risk(self, symbol, quote):"""风控检查"""# 价格波动检查if self.check_price_volatility(quote):print(f"⚠️ {symbol} 价格波动超限")# 成交量异常检查if self.check_volume_abnormal(quote):print(f"⚠️ {symbol} 成交量异常")# 买卖盘失衡检查if self.check_order_imbalance(quote):print(f"⚠️ {symbol} 买卖盘失衡")
五、实战案例:螺纹钢产业链监控系统
系统设计目标
- 同时监控螺纹钢(rb)、热卷(hc)、铁矿石(i)、焦炭(j)等品种
核心实现代码
classSteelIndustryMonitor:"""钢铁产业链监控系统"""def__init__(self, api): self.api = api self.symbols ={"rb":"SHFE.rb2510",# 螺纹钢"hc":"SHFE.hc2510",# 热卷"i":"DCE.i2510",# 铁矿石"j":"DCE.j2510",# 焦炭} self.quotes ={} self.spreads ={}# 价差记录asyncdefmonitor_spreads(self):"""监控品种间价差"""# 螺纹钢-热卷价差 rb_price = self.quotes["rb"].last_price hc_price = self.quotes["hc"].last_price spread = rb_price - hc_price# 记录和分析 self.spreads["rb-hc"]= spreadifabs(spread)>100:# 价差过大预警print(f"⚠️ 螺纹钢-热卷价差异常: {spread:.2f}")
运行效果展示
钢铁产业链监控系统启动========================================✅ 已订阅: SHFE.rb2510 (螺纹钢2510)✅ 已订阅: SHFE.hc2510 (热卷2510)✅ 已订阅: DCE.i2510 (铁矿石2510)✅ 已订阅: DCE.j2510 (焦炭2510)实时行情:螺纹钢: 3850.50 (+25.50) 成交量: 125,430热卷: 3875.20 (+18.70) 成交量: 98,560铁矿石: 850.30 (+12.40) 成交量: 250,890焦炭: 2450.80 (+32.10) 成交量: 85,430价差监控:螺纹钢-热卷: -24.70 (正常)
六、高级话题:行情数据的合规使用
穿透式监管要求
- 交易行为记录
- 策略逻辑备案
- 风险控制前置
天勤SDK合规支持
最佳实践建议
# 合规的数据处理流程classCompliantQuoteHandler:"""合规的行情处理器"""asyncdefprocess_with_compliance(self, quote):"""带合规检查的数据处理"""# 1. 数据验证ifnot self.validate_quote(quote):return# 2. 风控检查ifnot self.risk_check(quote):print("风控检查未通过")return# 3. 记录日志(合规要求) self.log_quote_data(quote)# 4. 业务处理await self.business_logic(quote)
七、总结与进阶思考
技术要点总结
- API分层设计
- 多合约管理
- 深度数据应用
- 系统性能优化
- 合规实践
思考题
- 在监控100个合约时,如何设计数据结构以最小化内存占用?
- Tick数据与K线数据在策略开发中各有哪些应用场景?
实践任务
- 运行
src/tq_realtime_quotes.py,监控至少5个相关品种
下一篇预告:明天我们将带来《第一个天勤SDK策略:双均线交叉策略完整实现》,从理论到代码,手把手教你构建完整的量化策略。记得关注「量投研习社」,不错过每篇实战干货!
本文为Day 2资深实战系列第二篇,适合有一定Python基础和技术追求的交易者。市场有风险,数据需谨慎。实盘前请充分测试。