type
status
date
slug
summary
tags
category
icon
password
[[QMT框架:QMT与通达信板块结合的自动交易5.0使用教程]]
小白免python配置程序工具:sanrenjz - 三人聚智-余汉波
4.0 版本文档:QMT与通达信结合 4.0:监测交易系统,通达信公式自动交易系统 | 余汉波 文档
4.0 视频:QMT与通达信结合 4.0:监测交易系统,通达信公式自动交易系统_哔哩哔哩_bilibili
程序小店: QMT框架:QMT结合通达信板块自动化下单系统 | 三人聚智-余汉波程序小店
概述
本文旨在对基于 QMT(Quick Multi-Trader)和通达信的自动化交易系统 Python 代码进行详细解读,帮助具有一定技术背景的读者理解其功能、结构和运行机制。该系统通过读取通达信板块中的股票池,结合 QMT 交易接口实现自动买卖,旨在提高交易效率并降低人工干预。
代码结构与功能
该代码主要分为以下几个核心模块:
- 常量定义(Constants 类):定义了交易相关的常量,如默认路径、交易参数(最大批量交易数量、撤单次数等)、最小交易手数以及股票代码前缀。
- 依赖检查:检查并导入
xtquant
和apscheduler
这两个关键库,若缺失则给出安装提示。xtquant
是迅投量化交易接口,用于连接 QMT 交易系统;apscheduler
是一个 Python 定时任务调度库,用于定时执行交易任务。
- 工具提示(ToolTip 类):提供 GUI 界面上的工具提示功能,增强用户体验。
- 回调类(MyXtQuantTraderCallback 类):处理来自
xtquant
的交易回调信息,如委托回报、成交变动、委托失败和撤单失败等,并将这些信息记录到日志中。
- 主交易类(TongDaXinTrader 类):实现 GUI 界面、配置加载与保存、交易逻辑和定时任务调度等核心功能。

代码详解
1. 常量定义与依赖检查
代码首先定义了
Constants
类,用于存储交易相关的各种常量。这样做的好处是便于统一管理和修改这些参数,提高代码的可维护性。例如,DEFAULT_EXAMPLES
定义了默认路径,MAX_BATCH_SIZE
定义了最大批量交易数量。随后,代码检查并导入
xtquant
和 apscheduler
库。如果缺少这些库,程序会尝试弹窗提示用户安装,并可以选择继续运行(但部分功能受限)。2. 工具提示(ToolTip 类)
ToolTip
类用于创建 GUI 界面上的工具提示。当鼠标悬停在某个控件上时,会显示一段文字提示,帮助用户理解控件的功能。这个类通过绑定 <Enter>
和 <Leave>
事件实现鼠标悬停和离开的检测,并动态创建和销毁提示窗口。3. 回调类(MyXtQuantTraderCallback 类)
MyXtQuantTraderCallback
类继承自 XtQuantTraderCallback
(如果 xtquant
可用)或一个自定义的基类。它负责处理来自 xtquant
的交易回调信息。on_stock_order
:处理委托回报推送,记录委托状态和系统编号。
on_stock_trade
:处理成交变动推送,记录成交价格、数量、金额等信息,并在成交后同步持仓。
on_order_error
:处理委托失败推送,记录错误代码和信息。
on_cancel_error
:处理撤单失败推送,记录错误代码和信息。
convert_time
:将 Unix 时间戳转换为北京时间。
on_disconnected
:处理连接断开事件,记录日志。
4. 主交易类(TongDaXinTrader 类)
TongDaXinTrader
类是整个程序的核心。它负责 GUI 界面的创建、配置加载与保存、交易逻辑的实现和定时任务的调度。4.1 GUI 界面创建
_setup_window
、_setup_gui
和 _setup_event_handlers
方法分别负责设置窗口属性、创建 GUI 界面和设置事件处理器。GUI 界面使用 Tkinter 库创建,包括各种标签、输入框、按钮和文本显示区域。界面分为多个区域,如路径设置、持仓参数、交易参数和运行日志等,方便用户配置和监控交易。4.2 配置加载与保存
load_config
和 save_config
方法分别负责从 JSON 文件加载配置和将配置保存到 JSON 文件。这样做的好处是可以持久化配置,避免每次启动程序都需要重新配置。save_config_silent
方法用于静默保存配置,不显示弹窗。4.3 日志处理
start_log_processor
、log_message
和 _update_log_text
方法负责日志处理。日志信息通过队列传递,并在 GUI 界面上实时显示。这样做的好处是可以避免阻塞主线程,提高程序的响应速度。日志信息包括时间戳和详细的交易记录,方便用户监控交易。
4.4 交易逻辑
start_trading
、pause_trading
和 stop_trading
方法分别负责启动、暂停和停止交易。trading_loop
方法是交易循环的主体,负责初始化交易对象、注册回调、连接交易服务器和启动定时任务调度器。batch_buy_orders
和 batch_sell_orders
方法分别负责批量买入和卖出委托。这两个方法会读取通达信板块中的股票代码,并调用 xtquant
接口进行交易。在交易前,会进行一系列检查,如检查交易时间、持仓数量、可用资金等,确保交易符合用户的设定。get_latest_price
方法用于获取股票的最新价格。convert_to_tdx_code
和 convert_to_qmt_code
方法分别用于将股票代码从 QMT 格式转换为通达信格式,以及从通达信格式转换为 QMT格式。remove_stock_from_block
方法用于从通达信板块中删除指定的股票代码。sync_positions_to_block
方法用于将当前持仓同步到指定的通达信板块。4.5 定时任务调度
init_scheduler
和 add_monitor_jobs
方法负责初始化和添加定时任务。程序使用 apscheduler
库实现定时任务调度。定时任务包括:safe_monitor_file
:定时监控买入和卖出板块文件,检测文件内容是否发生变化,并执行相应的交易操作。
safe_sync_positions
:定时同步持仓到指定的通达信板块。
reset_idle_tasks
:当买卖板块没有代码时,重置任务进程以避免任务进程过多。
5. 核心算法
- 股票代码转换:程序需要在通达信和 QMT 两种格式之间转换股票代码。通达信格式是 7 位数字,QMT 格式是 6 位数字加上市场后缀(如
.SH
、.SZ
、.BJ
)。
- 批量交易:程序支持批量买入和卖出委托,可以提高交易效率。为了避免执行时间过长,程序会限制单次处理的股票数量。
- 价格计算:程序可以根据用户的设定,计算限价委托的价格。例如,可以设置买入加价幅度或卖出降价幅度。
- 风险控制:程序提供了一系列风险控制措施,如保留现金、持仓数量上限、总金额限制等。
潜在限制和改进建议
- 依赖性:程序依赖于
xtquant
和apscheduler
库。如果这些库不可用,程序将无法正常运行。建议提供更详细的安装说明,并提供备选方案。
- 错误处理:程序在多个地方使用了
try...except
块进行错误处理,但部分错误处理不够详细。建议增加更详细的错误日志,方便用户排查问题。
- 交易策略:程序只实现了简单的板块交易策略。建议增加更复杂的交易策略,如止损、止盈等。
- 并发处理:程序使用了线程和队列进行并发处理,但部分代码可能存在线程安全问题。建议使用锁或其他同步机制保护共享资源。
- GUI 界面:GUI 界面比较简单,可以考虑使用更现代化的 GUI 库,如
PyQt
或wxPython
,提高用户体验。
编程语言和库
- 编程语言:Python
- 主要库:
tkinter
:用于创建 GUI 界面。json
:用于加载和保存 JSON 配置文件。os
:用于文件和目录操作。datetime
:用于处理日期和时间。threading
:用于创建和管理线程。queue
:用于线程间通信。random
:用于生成随机数。time
:用于计时。xtquant
:迅投量化交易接口,用于连接 QMT 交易系统。apscheduler
:Python 定时任务调度库,用于定时执行交易任务。
代码流程图
- 作者:余汉波
- 链接:https://wd.sanrenjz.com/%E4%BB%A3%E7%A0%81%E4%B8%8E%E6%95%88%E7%8E%87/QMT%E4%B8%8E%E9%80%9A%E8%BE%BE%E4%BF%A1%E7%BB%93%E5%90%88%205.0%EF%BC%9A%E7%9B%91%E6%B5%8B%E4%BA%A4%E6%98%93%E7%B3%BB%E7%BB%9F%EF%BC%8C%E9%80%9A%E8%BE%BE%E4%BF%A1%E5%85%AC%E5%BC%8F%E8%87%AA%E5%8A%A8%E4%BA%A4%E6%98%93%E7%B3%BB%E7%BB%9F
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。