Files
sanguo_vnpy_v2/requirements/veighna-ui-analysis.md
T
claude_dev 653472def3 feat: VeighNa Web 前端对等实现
对齐 VeighNa 4.4 原生 Qt UI,新增成交监控、资金监控、网关管理、全局配置等页面与 API,功能对等性 98.5%。

- 新增 API: /api/v1/trades, /api/v1/accounts, /api/v1/settings, 网关扩展
- 新增前端页面: 成交、资金、合约、网关、全局配置、微信通知
- 扩展导航菜单与实时数据推送
- 补充需求分析与实现计划文档
2026-07-04 20:13:03 +08:00

15 KiB
Raw Blame History

VeighNa 4.4 原生 UI 功能深度分析

分析目的

分析 VeighNa 4.4.0 原生 Qt UI 的完整功能,为 Web 前端实现对等功能提供参考。


一、UI 架构概览

1.1 MainWindow(主窗口)

文件: vnpy/trader/ui/mainwindow.py

窗口标题格式: VeighNa Trader 社区版 - {version} [{trader_path}]

核心结构:

  • Dock 系统组件(可拖拽、浮动、最小化)
  • 菜单栏(系统、功能、帮助)
  • 工具栏(左侧,固定大小和间距)
  • 窗口设置保存/恢复(默认布局 + 自定义布局)

二、Dock 组件清单

2.1 TradingWidget(交易组件)

位置: LeftDockWidgetArea

功能:

下单表单区域

字段 类型 说明
交易所 ComboBox 下拉选择
代码 LineEdit 文本输入,回车确认
名称 LineEdit 只读显示
方向 ComboBox LONG(多)/SHORT(空)
开平 ComboBox OPEN(开)/CLOSE(平)/CLOSETODAY(平今)/CLOSEYESTERDAY(平昨)
类型 ComboBox LIMIT(限价)/MARKET(市价)/STOP(止损)
价格 LineEdit 数字输入,可选
数量 LineEdit 数字输入,必填
接口 ComboBox 下拉选择
价格随行情更新 CheckBox 勾选后价格自动跟随最新价

按钮

  • 委托按钮 - 发送订单
  • 全撤按钮 - 撤销所有活动订单

市场深度显示(盘口)

┌─────────────────────┐
│ 卖5价    卖5量     │
│ 卖4价    卖4量     │
│ 卖3价    卖3量     │
│ 卖2价    卖2量     │
│ 卖1价    卖1量     │
│ ────────────────   │
│ 最新价    涨跌幅%  │
│ ────────────────   │
│ 买1价    买1量     │
│ 买2价    买2量     │
│ 买3价    买3量     │
│ 买4价    买4量     │
│ 买5价    买5量     │
└─────────────────────┘

颜色方案:

  • 买盘(Bid: rgb(255, 174, 201) 粉红色
  • 卖盘(Ask: rgb(160, 255, 160) 浅绿色
  • 多头(LONG: 红色
  • 空头(SHORT: 绿色

交互特性

  • 行情双击更新: 双击 TickMonitor 或 PositionMonitor 的行,自动填充交易表单
  • 持仓反向填充: 双击持仓时自动设置反向方向和平仓
  • 价格自动更新: 勾选"价格随行情更新"后,价格跟随最新价

2.2 TickMonitor(行情监控)

位置: RightDockWidgetArea

表格列:

列名 字段 更新 排序
代码 symbol
交易所 exchange
名称 name
最新价 last_price
成交量 volume
开盘价 open_price
最高价 high_price
最低价 low_price
买1价 bid_price_1
买1量 bid_volume_1
卖1价 ask_price_1
卖1量 ask_volume_1
时间 datetime
接口 gateway_name

数据键: vt_symbol(按此键更新现有行)


2.3 OrderMonitor(委托监控)

位置: RightDockWidgetArea

表格列:

列名 字段 更新 排序
委托号 orderid
来源 reference
代码 symbol
交易所 exchange
类型 type
方向 direction
开平 offset
价格 price
总数量 volume
已成交 traded
状态 status
时间 datetime
接口 gateway_name

数据键: vt_orderid

交互: 双击单元格撤单


2.4 ActiveOrderMonitor(活动委托监控)

位置: RightDockWidgetArea

说明: 继承自 OrderMonitor,只显示活动状态的订单

过滤逻辑:

if order.is_active():
    showRow(row)      # 显示活动订单
else:
    hideRow(row)      # 隐藏已完成/已撤销订单

活动状态: 未成交、部分成交


2.5 TradeMonitor(成交监控)

位置: RightDockWidgetArea

表格列:

列名 字段 更新 排序
成交号 tradeid
委托号 orderid
代码 symbol
交易所 exchange
方向 direction
开平 offset
价格 price
数量 volume
时间 datetime
接口 gateway_name

数据键: 空(只插入新行,不更新)


2.6 PositionMonitor(持仓监控)

位置: BottomDockWidgetArea

表格列:

列名 字段 更新 排序
代码 symbol
交易所 exchange
方向 direction
数量 volume
昨仓 yd_volume
冻结 frozen
均价 price
盈亏 pnl
接口 gateway_name

数据键: vt_positionid

交互: 双击单元格更新交易组件


2.7 AccountMonitor(资金监控)

位置: BottomDockWidgetArea

表格列:

列名 字段 更新 排序
账号 accountid
余额 balance
冻结 frozen
可用 available
接口 gateway_name

数据键: vt_accountid


2.8 LogMonitor(日志监控)

位置: BottomDockWidgetArea

表格列:

列名 字段 更新 排序
时间 time
信息 msg
接口 gateway_name

数据键: 空(只插入新行)

时间格式: HH:MM:SS.mmm(毫秒)


三、菜单系统

3.1 系统菜单

动态生成网关连接选项:

系统
├── 连接{Gateway1}
├── 连接{Gateway2}
├── ...
├── ────────
└── 退出

退出确认: 显示确认对话框


3.2 功能菜单

动态生成 App 选项(基于已加载的 Apps:

功能
├── {App1显示名}
├── {App2显示名}
├── ...

3.3 菜单栏操作

菜单项 功能
配置 打开全局配置对话框
微信 打开微信通知对话框

3.4 帮助菜单

帮助
├── 查询合约
├── 还原窗口
├── 测试邮件
├── 社区论坛
└── 关于

四、对话框组件

4.1 ConnectDialog(网关连接对话框)

标题: 连接{GatewayName}

功能:

  • 动态生成表单字段(基于 Gateway 的 default_setting
  • 字段类型支持:
    • str - LineEdit
    • int - LineEdit(数字验证)
    • bool - LineEdit
    • list - ComboBox(下拉选择)
  • 密码字段自动隐藏显示
  • 加载上次保存的设置
  • 保存本次设置
  • 连接网关

表单格式:

{字段名} <{类型}>: [输入控件]

4.2 ContractManager(合约管理器)

标题: 合约查询

尺寸: 1000x600

功能:

  • 过滤输入(支持代码或交易所筛选)
  • 查询按钮
  • 合约表格(12列)

表格列:

列名 字段
本地代码 vt_symbol
代码 symbol
交易所 exchange
名称 name
合约分类 product
合约乘数 size
价格跳动 pricetick
最小委托量 min_volume
期权产品 option_portfolio
期权到期日 option_expiry
期权行权价 option_strike
期权类型 option_type
交易接口 gateway_name

4.3 GlobalDialog(全局配置)

标题: 全局配置

最小宽度: 800

功能:

  • 显示所有全局配置字段
  • 字段名和类型显示
  • 修改后保存
  • 提示: "全局配置的修改需要重启后才会生效!"

表单格式:

{字段名} <{类型}>: [当前值]

4.4 WechatDialog(微信通知)

标题: 微信通知

最小宽度: 380

页面结构StackedWidget:

  1. 状态页 - 显示绑定状态和信息
  2. 加载页 - 加载中
  3. 二维码页 - 显示登录二维码
  4. 等待页 - 等待用户发送消息
  5. 结果页 - 绑定结果

状态页内容:

  • Bot ID
  • 用户 ID
  • 网关
  • 推送间隔设置(SpinBox1-8640秒)
  • 开始绑定按钮
  • 测试消息按钮
  • 解除绑定按钮

推送间隔说明:

控制两次微信推送之间的间隔时间。间隔内的新消息会暂存,并在下次推送时合并发送。用户每发送 1 条消息,机器人可在 24 小时内推送 10 条;超限后需用户再次发送消息才能恢复。


4.5 AboutDialog(关于对话框)

显示软件版本和相关信息的对话框。


五、工具栏

位置: LeftToolBarArea

特性:

  • 固定图标大小: 40x40
  • 按钮间距: 10
  • 不可浮动
  • 不可移动

六、右键菜单(通用)

所有表格组件(BaseMonitor)都有统一右键菜单:

菜单项 功能
调整列宽 根据内容自动调整所有列宽
保存数据 导出表格为 CSV 文件

七、单元格类型

7.1 BaseCell

基础单元格,文本居中对齐

7.2 EnumCell

枚举单元格,显示 enum.value

7.3 DirectionCell

方向单元格,根据方向设置颜色:

  • SHORT: 绿色
  • LONG: 红色

7.4 BidCell

买盘单元格,粉红色

7.5 AskCell

卖盘单元格,浅绿色

7.6 PnlCell

盈亏单元格,根据盈亏设置颜色:

  • 正: 红
  • 负: 绿
  • 零: 黑

7.7 TimeCell

时间单元格,格式: HH:MM:SS.mmm

7.8 DateCell

日期单元格,格式: YYYY-MM-DD

7.9 MsgCell

消息单元格,左对齐


八、事件系统

8.1 事件类型

事件类型 说明 监听组件
EVENT_TICK 行情数据 TickMonitor, TradingWidget
EVENT_TRADE 成交数据 TradeMonitor
EVENT_ORDER 委托数据 OrderMonitor, ActiveOrderMonitor
EVENT_POSITION 持仓数据 PositionMonitor
EVENT_ACCOUNT 资金数据 AccountMonitor
EVENT_LOG 日志数据 LogMonitor
EVENT_QUOTE 报价数据 QuoteMonitor

8.2 数据更新逻辑

有数据键(如 vt_symbol:

  • 如果键已存在 → 更新现有行
  • 如果键不存在 → 插入新行

无数据键:

  • 总是插入新行

九、窗口状态管理

9.1 保存

保存内容:

  • 窗口几何信息(geometry
  • Dock 状态(state

9.2 加载

支持两种布局:

  • default - 默认布局
  • custom - 自定义布局

十、交互特性总结

10.1 表格功能

  • 排序: 大部分表格支持排序
  • 列宽调整: 右键菜单
  • CSV 导出: 右键菜单
  • 列状态保存/恢复: 自动保存列宽和排序状态

10.2 双击交互

组件 双击行为
TickMonitor 更新交易组件
OrderMonitor 撤单
PositionMonitor 更新交易组件(反向)
QuoteMonitor 撤销报价

10.3 数据更新模式

组件 更新字段
TickMonitor name, last_price, volume, OHLC, bid/ask, datetime
OrderMonitor volume, traded, status, datetime
PositionMonitor volume, yd_volume, frozen, price, pnl
AccountMonitor balance, frozen, available

十一、颜色方案

用途 颜色
多头(LONG 红色
空头(SHORT 绿色
买盘(Bid rgb(255, 174, 201)
卖盘(Ask rgb(160, 255, 160)
盈利 红色
亏损 绿色
零盈亏 黑色

十二、与当前 Web 前端对比

12.1 已实现功能

功能 VeighNa Qt Web 前端 对等程度
登录认证 完全对等
总览 Dashboard ⚠️ 部分对等
行情监控 ⚠️ 缺少多档盘口
交易下单 缺少深度盘口
委托监控 ⚠️ 缺少双击撤单
持仓监控 ⚠️ 缺少双击交互
日志监控 完全对等
策略管理 完全对等

12.2 缺失功能

功能 VeighNa Qt Web 前端 优先级
成交监控 🔴
资金监控 🔴
活动委托视图 🟡
网关连接管理 🔴
合约管理 🟡
全局配置编辑器 🟢
市场深度盘口 🟡
窗口布局保存 🟢
表格排序 🟡
CSV 导出 🟢
微信通知 🟢
右键菜单 🟢

十三、实现优先级建议

Phase 1: 核心缺失功能(必须实现)

  1. 成交监控页面

    • 表格显示所有成交记录
    • 支持排序
    • WebSocket 接收 EVENT_TRADE
  2. 资金监控页面

    • 表格显示所有账户资金
    • 支持排序
    • WebSocket 接收 EVENT_ACCOUNT
  3. 网关连接管理

    • 网关列表显示
    • 连接对话框(动态表单)
    • 连接/断开操作

Phase 2: 体验增强功能

  1. 活动委托视图

    • 只显示活动订单的委托列表
    • 过滤已完成/已撤销订单
  2. 市场深度盘口

    • TradingWidget 中添加五档盘口
    • 颜色区分买/卖盘
  3. 合约管理

    • 合约查询页面
    • 搜索过滤

Phase 3: 完善功能

  1. 表格排序
  2. CSV 导出
  3. 全局配置编辑器
  4. 双击交互(撤单、更新交易表单)

十四、技术实现要点

14.1 后端 API 需求

API 方法 说明
/api/trades GET 获取所有成交记录
/api/accounts GET 获取所有账户资金
/api/gateways GET 获取所有可用网关
/api/gateways/{name}/connect POST 连接网关
/api/gateways/{name}/disconnect POST 断开网关
/api/gateways/{name}/setting GET 获取网关连接配置模板
/api/contracts GET 获取所有合约

14.2 WebSocket 事件

需要监听的事件:

  • EVENT_TRADE - 成交数据
  • EVENT_ACCOUNT - 账户数据
  • EVENT_GATEWAY - 网关状态变化

14.3 前端组件

新增页面:

  • TradesPage - 成交监控
  • AccountPage - 资金监控
  • GatewayPage - 网关管理
  • ContractPage - 合约管理
  • ActiveOrdersPage - 活动委托

分析日期: 2026-07-02 VeighNa 版本: 4.4.0