Lazy loaded image
QMT与通达信结合 5.0:监测交易系统,通达信公式自动交易系统
00 分钟
2025-4-2
2025-7-4
type
status
date
slug
summary
tags
category
icon
password
[[QMT框架:QMT与通达信板块结合的自动交易5.0使用教程]]
小白免python配置程序工具:sanrenjz - 三人聚智-余汉波

概述

本文旨在对基于 QMT(Quick Multi-Trader)和通达信的自动化交易系统 Python 代码进行详细解读,帮助具有一定技术背景的读者理解其功能、结构和运行机制。该系统通过读取通达信板块中的股票池,结合 QMT 交易接口实现自动买卖,旨在提高交易效率并降低人工干预。

代码结构与功能

该代码主要分为以下几个核心模块:
  1. 常量定义(Constants 类):定义了交易相关的常量,如默认路径、交易参数(最大批量交易数量、撤单次数等)、最小交易手数以及股票代码前缀。
  1. 依赖检查:检查并导入 xtquantapscheduler 这两个关键库,若缺失则给出安装提示。xtquant 是迅投量化交易接口,用于连接 QMT 交易系统;apscheduler 是一个 Python 定时任务调度库,用于定时执行交易任务。
  1. 工具提示(ToolTip 类):提供 GUI 界面上的工具提示功能,增强用户体验。
  1. 回调类(MyXtQuantTraderCallback 类):处理来自 xtquant 的交易回调信息,如委托回报、成交变动、委托失败和撤单失败等,并将这些信息记录到日志中。
  1. 主交易类(TongDaXinTrader 类):实现 GUI 界面、配置加载与保存、交易逻辑和定时任务调度等核心功能。
notion image

代码详解

1. 常量定义与依赖检查

代码首先定义了 Constants 类,用于存储交易相关的各种常量。这样做的好处是便于统一管理和修改这些参数,提高代码的可维护性。例如,DEFAULT_EXAMPLES 定义了默认路径,MAX_BATCH_SIZE 定义了最大批量交易数量。
随后,代码检查并导入 xtquantapscheduler 库。如果缺少这些库,程序会尝试弹窗提示用户安装,并可以选择继续运行(但部分功能受限)。

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_configsave_config 方法分别负责从 JSON 文件加载配置和将配置保存到 JSON 文件。这样做的好处是可以持久化配置,避免每次启动程序都需要重新配置。save_config_silent 方法用于静默保存配置,不显示弹窗。

4.3 日志处理

start_log_processorlog_message_update_log_text 方法负责日志处理。日志信息通过队列传递,并在 GUI 界面上实时显示。这样做的好处是可以避免阻塞主线程,提高程序的响应速度。日志信息包括时间戳和详细的交易记录,方便用户监控交易。
notion image

4.4 交易逻辑

start_tradingpause_tradingstop_trading 方法分别负责启动、暂停和停止交易。trading_loop 方法是交易循环的主体,负责初始化交易对象、注册回调、连接交易服务器和启动定时任务调度器。
batch_buy_ordersbatch_sell_orders 方法分别负责批量买入和卖出委托。这两个方法会读取通达信板块中的股票代码,并调用 xtquant 接口进行交易。在交易前,会进行一系列检查,如检查交易时间、持仓数量、可用资金等,确保交易符合用户的设定。
get_latest_price 方法用于获取股票的最新价格。convert_to_tdx_codeconvert_to_qmt_code 方法分别用于将股票代码从 QMT 格式转换为通达信格式,以及从通达信格式转换为 QMT格式。
remove_stock_from_block 方法用于从通达信板块中删除指定的股票代码。sync_positions_to_block 方法用于将当前持仓同步到指定的通达信板块。

4.5 定时任务调度

init_scheduleradd_monitor_jobs 方法负责初始化和添加定时任务。程序使用 apscheduler 库实现定时任务调度。定时任务包括:
  • safe_monitor_file:定时监控买入和卖出板块文件,检测文件内容是否发生变化,并执行相应的交易操作。
  • safe_sync_positions:定时同步持仓到指定的通达信板块。
  • reset_idle_tasks:当买卖板块没有代码时,重置任务进程以避免任务进程过多。

5. 核心算法

  • 股票代码转换:程序需要在通达信和 QMT 两种格式之间转换股票代码。通达信格式是 7 位数字,QMT 格式是 6 位数字加上市场后缀(如 .SH.SZ.BJ)。
  • 批量交易:程序支持批量买入和卖出委托,可以提高交易效率。为了避免执行时间过长,程序会限制单次处理的股票数量。
  • 价格计算:程序可以根据用户的设定,计算限价委托的价格。例如,可以设置买入加价幅度或卖出降价幅度。
  • 风险控制:程序提供了一系列风险控制措施,如保留现金、持仓数量上限、总金额限制等。

潜在限制和改进建议

  1. 依赖性:程序依赖于 xtquantapscheduler 库。如果这些库不可用,程序将无法正常运行。建议提供更详细的安装说明,并提供备选方案。
  1. 错误处理:程序在多个地方使用了 try...except 块进行错误处理,但部分错误处理不够详细。建议增加更详细的错误日志,方便用户排查问题。
  1. 交易策略:程序只实现了简单的板块交易策略。建议增加更复杂的交易策略,如止损、止盈等。
  1. 并发处理:程序使用了线程和队列进行并发处理,但部分代码可能存在线程安全问题。建议使用锁或其他同步机制保护共享资源。
  1. GUI 界面:GUI 界面比较简单,可以考虑使用更现代化的 GUI 库,如 PyQtwxPython,提高用户体验。

编程语言和库

  • 编程语言:Python
  • 主要库
    • tkinter:用于创建 GUI 界面。
    • json:用于加载和保存 JSON 配置文件。
    • os:用于文件和目录操作。
    • datetime:用于处理日期和时间。
    • threading:用于创建和管理线程。
    • queue:用于线程间通信。
    • random:用于生成随机数。
    • time:用于计时。
    • xtquant:迅投量化交易接口,用于连接 QMT 交易系统。
    • apscheduler:Python 定时任务调度库,用于定时执行交易任务。

代码流程图

上一篇
04-02 收评:沪指微涨0.05%,创业板指涨0.13%,市场结构分化等待方向
下一篇
指数评估:A股“价值洼地”与“风险高地”并存?

评论
Loading...