title: 以AI量化为生:20.实时图表交易系统开发 cover: ./以AI量化为生:20.实时图表交易系统开发-cover.png
本文是《以AI量化为生》系列的第20篇,我们将在实时K线图表的基础上集成完整的交易功能。从ChartWizard到ChartTrader的改造,从交易面板到风控监控,从多合约Tab管理到快捷键操作,实现"所见即所得"的图表化交易体验。

写在前面
上一篇讲了多周期K线系统的完善,图表可以实时更新了,指标也能正常显示了。有朋友留言问,这些图表看起来挺专业的,但怎么在上面下单交易呢?总不能看着图表,再切到别的软件下单吧。
这个问题确实很实际。做日内交易,看到机会要马上下单,在图表和交易界面之间切来切去,效率太低。而且官方的ChartWizard虽然能看实时K线,但没有下单功能,只能看不能交易。
所以这篇就来讲讲怎么把ChartWizard改造成ChartTrader,直接在图表上集成交易功能。内容包括订单管理、持仓跟踪、风控监控、价格预警,持仓线、委托线这些可视化提示。
多合约Tab管理
系统支持同时打开多个品种的图表,用Tab页签进行切换。这个设计跟浏览器的多标签页很像------每个标签就是一个合约的图表,可以在rb2605(螺纹钢)和sn2602(沪锡)之间快速切换。

新建图表流程
点击工具栏的"新建图表"按钮(快捷键Ctrl+N),会弹出对话框:

输入合约代码(例如rb2605.SHFE),点击确定后,系统会:
- 创建新的Tab页签,输入合约代码
- 加载图表组件(EnhancedChartWidget)
- 查询历史K线数据(默认最近10000条分钟K线)
- 订阅实时tick数据
- 创建对应的交易面板和风控面板
- 延迟2秒后自动同步持仓数据
这样新标签就创建好了,可以开始交易了。Tab页签上会显示合约代码,点击就能切换到对应的图表。
三层架构设计
交易系统的复杂度较高,涉及订单管理、持仓跟踪、风控监控等多个模块。为了保证系统的可维护性和扩展性,采用了清晰的三层架构设计:

UI层负责界面展示和用户交互。包括TradingPanel(交易面板)、RiskControlPanel(风控面板)等组件。用户操作通过Qt信号传递给业务逻辑层,保持界面代码的简洁性。
业务逻辑层是系统的核心,包含四个核心管理器:
- TradingManager:处理交易订单的创建、发送和状态跟踪
- PositionManager:管理持仓数据并在图表上进行可视化
- RiskMonitor:监控止损止盈条件和价格预警
- AIAnalysisCoordinator:协调AI分析功能(下篇文章详细介绍)
vnpy框架层提供底层支持。MainEngine负责与CTP等交易网关通信,EventEngine负责事件分发。系统通过vnpy提供的标准API进行交互,不直接修改框架代码。
交易功能
交易面板设计
交易面板集成在图表顶部,提供完整的交易操作功能。界面采用紧凑的横向布局,包含以下核心元素:

交易类型切换:支持市价单和限价单两种模式。市价单直接使用当前tick价格快速成交,限价单可以指定价格挂单等待。
交易操作:
- 买开:买入开仓,建立多头持仓
- 卖开:卖出开仓,建立空头持仓
- 平多:卖出平仓,平掉多头持仓
- 平空:买入平仓,平掉空头持仓
- 全平:一键平掉所有持仓(多头和空头)
- 撤单:撤销该合约的所有活动委托
交易面板通过颜色区分不同操作:买开使用金黄色,卖开使用深粉色,平仓使用红色,方便快速识别,降低误操作风险。
交易操作指引
买入开仓流程:
-
选择交易类型:点击"市价"或"限价"单选按钮
- 市价单:系统自动使用当前最新价格,快速成交
- 限价单:可在价格输入框中指定挂单价格
-
设置交易数量:点击数量下拉框,选择开仓手数(默认1手)
-
点击买开按钮:点击金黄色的"买开"按钮发送订单
-
确认订单状态:
- 委托成功后,图表上会显示淡蓝色的买入委托线
- 成交后,委托线消失,显示金黄色的持仓线

卖出开仓流程:
操作步骤与买入开仓类似,只需点击深粉色的"卖开"按钮。成交后图表上会显示金黄色的空头持仓线。
平仓操作:
系统提供了平多和平空两个独立按钮,避免误操作:
- 平多:点击红色的"平多"按钮,发送卖出平仓单,平掉多头持仓,可设置交易手数
- 平空:点击红色的"平空"按钮,发送买入平仓单,平掉空头持仓,可设置交易手数
- 一键全平:点击红色"全平"按钮,自动平掉该合约的所有持仓(多头和空头)
撤单操作:
点击"撤单"按钮,系统会撤销该合约的所有未成交委托。委托撤销后,图表上的委托线会自动消失。
TradingManager核心逻辑
TradingManager负责处理所有交易相关的业务逻辑:
python
def buy(self, vt_symbol: str, price: float, volume: int,
order_type: OrderType) -> Optional[str]:
"""买入开仓"""
# 获取合约信息
contract = self.main_engine.get_contract(vt_symbol)
# 创建订单请求
req = OrderRequest(
symbol=contract.symbol,
exchange=contract.exchange,
direction=Direction.LONG,
type=order_type,
volume=volume,
price=price,
offset=Offset.OPEN
)
# 发送订单并返回订单ID
vt_orderid = self.main_engine.send_order(req, contract.gateway_name)
return vt_orderid
TradingManager监听EVENT_ORDER和EVENT_TRADE事件,实时更新订单状态和持仓数据,并通过Qt信号通知UI层更新显示。
持仓管理与可视化
PositionManager负责持仓的跟踪和图表可视化。传统的持仓列表以数字形式展示,不够直观。系统通过在图表上绘制可视化线条,让持仓信息一目了然。
持仓线显示:使用黄色虚线标识持仓价格和方向
- 多头持仓:标签显示"多头持仓 @ 价格"
- 空头持仓:标签显示"空头持仓 @ 价格"
- 持仓手数会在面板上实时更新
委托单线显示:
- 买入委托:淡蓝色点线
- 卖出委托:淡粉色点线
委托单成交或撤销后,对应的线条会自动从图表上移除。这样可以清晰地看到当前价格与持仓价格的距离,以及挂单的分布情况。

持仓同步功能:
系统提供从CTP网关自动同步持仓的功能。图表创建时,延迟2秒后自动查询持仓数据:
python
QtCore.QTimer.singleShot(2000,
lambda: self.position_manager.sync_position_from_gateway(vt_symbol))
同时提供快捷键Ctrl+P手动触发同步,确保持仓数据的准确性。PositionManager会查询所有持仓,计算净持仓(多头-空头),并在图表上绘制持仓线。
持仓同步操作指引
自动同步:
图表创建后,系统会自动延迟2秒查询持仓。如果你在程序启动前已经有持仓,稍等片刻就能在图表上看到金黄色的持仓线。
手动同步:
- 按下快捷键:按Ctrl+P触发手动同步
- 查看日志输出:控制台会显示"正在从网关同步持仓..."
- 确认持仓线:同步成功后,图表上会显示持仓线和
风控功能
风控面板设计
风控是实盘交易的核心保障。系统提供了完整的风控面板,集成止损、止盈和价格预警功能:

风控面板与图表无缝结合,设置风控规则的同时,在图表上显示对应的可视化线条:
- 止损线:亮绿色虚线
- 止盈线:红色虚线
- 预警线:橙色虚线

止损止盈机制
RiskMonitor负责风控规则的监控和执行。系统注册EVENT_TICK事件,每个tick到达时检查是否触发风控条件:
- 多头止损:当价格跌破止损价格时,自动发送卖出平仓订单
- 空头止损:当价格涨破止损价格时,自动发送买入平仓订单
- 多头止盈:当价格涨破止盈价格时,自动发送卖出平仓订单
- 空头止盈:当价格跌破止盈价格时,自动发送买入平仓订单
python
def check_stop_conditions(self, tick: TickData) -> None:
"""检查止损止盈条件"""
position = self.position_manager.get_position(vt_symbol)
if position > 0: # 多头持仓
# 价格跌破止损价格
if tick.last_price <= self.stop_loss_price:
self.trading_manager.sell(vt_symbol, tick.last_price, abs(position))
alert_manager.send_alert(
content=f"触发多头止损: 价格 {tick.last_price}",
symbol=vt_symbol,
force_send=True
)
self.stop_loss_triggered.emit(vt_symbol, tick.last_price)
止损止盈触发后,系统会自动重置风控配置,移除图表上的风控线条,避免下次开仓时误触发。
价格预警功能
价格预警提供非强制性的价格提醒功能。可以设置多个预警价位,当价格穿过预警线时,系统通过飞书发送通知,但不会自动平仓。预警触发后自动从预警列表中移除,对应的橙色预警线也会从图表上消失。
预警操作指引
- 输入预警价格:在预警价格输入框中输入目标价格
- 点击设置按钮:点击"设置"按钮添加预警
- 查看预警线:图表上会显示橙色的预警虚线
- 接收通知:价格触及预警线时,飞书/钉钉会收到通知消息
快捷键支持
为了提高交易效率,系统提供了完整的快捷键支持:
- Ctrl+N:新建图表
- Ctrl+B:买入开仓
- Ctrl+Shift+S:卖出开仓
- Ctrl+Shift+C:平仓
- Ctrl+P:同步持仓
系统会自动识别当前激活的图表,确保快捷键只对当前图表生效。即使同时打开多个图表,快捷键也不会在所有图表上重复下单,避免了误操作的风险。
实战经验与避坑指南
第一,持仓同步时机要把握好。CTP网关连接需要时间,程序启动后立即查询持仓往往失败。延迟2秒查询,同时提供Ctrl+P手动同步。
第二,可视化线条要及时清理。订单线和持仓线需要根据交易状态动态更新。活动订单显示委托线,非活动订单移除委托线,避免图表上线条无限增长。
第三,风控规则触发后必须重置。止损止盈触发后要清空配置、移除风控线,防止旧规则对新持仓造成影响。
写在最后
到这里,实时图表交易系统的核心内容基本讲完了。从ChartWizard到ChartTrader的改造,从多合约Tab管理到交易面板实现,从持仓可视化到风控监控,对日内交易来说,这种"所见即所得"的体验确实能让效率提升不少。
下一篇准备讲AI分析功能的集成。当前交易面板和风控面板已经基本满足日常需求了,但AI分析能帮你更好地理解市场。多模型对比、多周期智能分析,两个功能配合起来,决策效率能上一个台阶。
先写到这,有问题欢迎留言交流。
本文是《以AI量化为生》系列的第20篇,ATMQuant量化交易系统已开源至GitHub:https://github.com/seasonstar/atmquant
本文内容仅供学习交流,不构成任何投资建议。交易有风险,投资需谨慎。
加入「量策堂·AI算法指标策略」
想系统性掌握交易系统开发、策略研发、指标可视化?加入我的知识星球,获得持续、体系化的成长支持:

往期文章回顾
《以AI量化为生》系列
- 以AI量化为生:19.半小时K线合成与多周期系统优化
- 以AI量化为生:18.实时K线图表系统开发
- 以AI量化为生:17.系统架构优化 - 指标模块化与动态加载
- 以AI量化为生:16.图表交互优化 - X轴延伸与专注模式
- 以AI量化为生:15.双图与四图视图开发实战
- 以AI量化为生:14.多周期交易买卖点连线智能匹配实战
相关标签:#量化交易 #实盘交易 #K线图表 #Python #vnpy