以AI量化为生:20.实时图表交易系统开发


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),点击确定后,系统会:

  1. 创建新的Tab页签,输入合约代码
  2. 加载图表组件(EnhancedChartWidget)
  3. 查询历史K线数据(默认最近10000条分钟K线)
  4. 订阅实时tick数据
  5. 创建对应的交易面板和风控面板
  6. 延迟2秒后自动同步持仓数据

这样新标签就创建好了,可以开始交易了。Tab页签上会显示合约代码,点击就能切换到对应的图表。

三层架构设计

交易系统的复杂度较高,涉及订单管理、持仓跟踪、风控监控等多个模块。为了保证系统的可维护性和扩展性,采用了清晰的三层架构设计:

UI层负责界面展示和用户交互。包括TradingPanel(交易面板)、RiskControlPanel(风控面板)等组件。用户操作通过Qt信号传递给业务逻辑层,保持界面代码的简洁性。

业务逻辑层是系统的核心,包含四个核心管理器:

  • TradingManager:处理交易订单的创建、发送和状态跟踪
  • PositionManager:管理持仓数据并在图表上进行可视化
  • RiskMonitor:监控止损止盈条件和价格预警
  • AIAnalysisCoordinator:协调AI分析功能(下篇文章详细介绍)

vnpy框架层提供底层支持。MainEngine负责与CTP等交易网关通信,EventEngine负责事件分发。系统通过vnpy提供的标准API进行交互,不直接修改框架代码。

交易功能

交易面板设计

交易面板集成在图表顶部,提供完整的交易操作功能。界面采用紧凑的横向布局,包含以下核心元素:

交易类型切换:支持市价单和限价单两种模式。市价单直接使用当前tick价格快速成交,限价单可以指定价格挂单等待。

交易操作

  • 买开:买入开仓,建立多头持仓
  • 卖开:卖出开仓,建立空头持仓
  • 平多:卖出平仓,平掉多头持仓
  • 平空:买入平仓,平掉空头持仓
  • 全平:一键平掉所有持仓(多头和空头)
  • 撤单:撤销该合约的所有活动委托

交易面板通过颜色区分不同操作:买开使用金黄色,卖开使用深粉色,平仓使用红色,方便快速识别,降低误操作风险。

交易操作指引

买入开仓流程

  1. 选择交易类型:点击"市价"或"限价"单选按钮

    • 市价单:系统自动使用当前最新价格,快速成交
    • 限价单:可在价格输入框中指定挂单价格
  2. 设置交易数量:点击数量下拉框,选择开仓手数(默认1手)

  3. 点击买开按钮:点击金黄色的"买开"按钮发送订单

  4. 确认订单状态

    • 委托成功后,图表上会显示淡蓝色的买入委托线
    • 成交后,委托线消失,显示金黄色的持仓线

卖出开仓流程

操作步骤与买入开仓类似,只需点击深粉色的"卖开"按钮。成交后图表上会显示金黄色的空头持仓线。

平仓操作

系统提供了平多和平空两个独立按钮,避免误操作:

  1. 平多:点击红色的"平多"按钮,发送卖出平仓单,平掉多头持仓,可设置交易手数
  2. 平空:点击红色的"平空"按钮,发送买入平仓单,平掉空头持仓,可设置交易手数
  3. 一键全平:点击红色"全平"按钮,自动平掉该合约的所有持仓(多头和空头)

撤单操作

点击"撤单"按钮,系统会撤销该合约的所有未成交委托。委托撤销后,图表上的委托线会自动消失。

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秒查询持仓。如果你在程序启动前已经有持仓,稍等片刻就能在图表上看到金黄色的持仓线。

手动同步

  1. 按下快捷键:按Ctrl+P触发手动同步
  2. 查看日志输出:控制台会显示"正在从网关同步持仓..."
  3. 确认持仓线:同步成功后,图表上会显示持仓线和

风控功能

风控面板设计

风控是实盘交易的核心保障。系统提供了完整的风控面板,集成止损、止盈和价格预警功能:

风控面板与图表无缝结合,设置风控规则的同时,在图表上显示对应的可视化线条:

  • 止损线:亮绿色虚线
  • 止盈线:红色虚线
  • 预警线:橙色虚线

止损止盈机制

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)

止损止盈触发后,系统会自动重置风控配置,移除图表上的风控线条,避免下次开仓时误触发。

价格预警功能

价格预警提供非强制性的价格提醒功能。可以设置多个预警价位,当价格穿过预警线时,系统通过飞书发送通知,但不会自动平仓。预警触发后自动从预警列表中移除,对应的橙色预警线也会从图表上消失。

预警操作指引
  1. 输入预警价格:在预警价格输入框中输入目标价格
  2. 点击设置按钮:点击"设置"按钮添加预警
  3. 查看预警线:图表上会显示橙色的预警虚线
  4. 接收通知:价格触及预警线时,飞书/钉钉会收到通知消息

快捷键支持

为了提高交易效率,系统提供了完整的快捷键支持:

  • 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量化为生》系列


相关标签:#量化交易 #实盘交易 #K线图表 #Python #vnpy

相关推荐
青 春 记 忆5 小时前
Dify Docker Compose 通用无损升级指南:从备份、双版本预演到切换与回滚
运维·人工智能·python·docker·容器
GlueNa2SiO35 小时前
03-Flask模板引擎Jinja2详解
笔记·python·flask
临沂GEO7 小时前
GEO搜索优化科普|正规地理位置流量运营入门指南
大数据·人工智能·python·流量运营
大模型码小白7 小时前
Spring AI Tool 实现自然语言操作 MySQL 数据库详解
服务器·开发语言·数据库·人工智能·python·mysql·spring
荷蒲9 小时前
【小白量化Qbuddy】利用AI学习中文Python
人工智能·python·学习
数据狐(Datafox)10 小时前
京东商品列表API技术解析与落地应用(含标准 JSON 示例)
java·大数据·前端·人工智能·python·数据分析·json
量化吞吐机10 小时前
2026年下半年手工交易规则走向量化表达,产品该先接住哪一步
人工智能·python
Metaphor69211 小时前
使用 Python 读取和删除 Excel 文件属性
python·excel
迷迭香yy12 小时前
Python构建转融券多空识别系统从接口到因子的全流程 IG50免费开源股票数据API接口
开发语言·python·开源
月光船幽幽13 小时前
真实即粗糙,光滑是伪造
人工智能·python