本文将深入剖析一个基于 Python 的通达信板块自动交易程序。该程序旨在监控通达信软件的板块文件,并根据板块内股票的变化自动进行买入或卖出操作。它利用 xtquant 库连接券商交易接口,实现自动化交易,并通过图形用户界面 (GUI) 提供用户友好的配置和监控体验。

打开网易新闻 查看更多视频
QMT与通达信结合,实现专属量化交易:通达信自动交易系统

一、程序目的与功能

该程序主要实现以下功能:

  1. 实时监控通达信板块文件: 程序持续监控用户指定的买入和卖出板块文件。当板块成分股发生变化时,程序会触发相应的交易操作。

  2. 自动下单交易: 基于 xtquant 库,程序可以自动向券商服务器发送买入或卖出指令。支持多种委托类型,包括限价、最优五档、对手方最优和本方最优。

  3. 参数化配置: 通过 GUI,用户可以设置交易参数,包括证券账号、通达信和 QMT 路径、买入/卖出板块名称、交易时间段、单笔和总金额限制、价格调整幅度等。

  4. 实时日志记录: 程序会记录所有操作和事件,方便用户监控交易过程和排查问题。

  5. 错误处理和重连机制: 程序包含错误处理机制,例如撤销未成交订单、处理无效价格等。同时,当连接断开时,程序会自动尝试重连。

二、代码结构与组织

程序主要由两个类构成:MyXtQuantTraderCallbackTongDaXinTrader

  • MyXtQuantTraderCallback 该类继承自 XtQuantTraderCallback,负责处理交易接口的回调事件,例如委托回报、成交变动、委托失败、撤单失败和连接断开等。它将接收到的信息格式化后输出到日志记录器。

  • TongDaXinTrader 该类是程序的核心,负责 GUI 构建、参数配置加载与保存、交易逻辑实现、日志记录、以及与 xtquant 库的交互。

程序的执行流程大致如下:用户通过 GUI 配置参数,点击“开始交易”按钮后,程序启动一个交易线程。该线程初始化 xtquant 交易对象,连接交易服务器,订阅账户,并启动一个后台调度器。调度器定期检查板块文件,发现变化后调用交易函数进行下单操作。

三、算法与数据结构

程序主要使用了以下算法和数据结构:

  • 文件监控: 程序使用简单的文件内容比较算法来检测板块文件的变化。它将当前文件内容与上次读取的内容进行比较,如果不同则触发交易操作。

  • 定时任务: 程序使用 APScheduler 库创建定时任务,定期监控板块文件。

  • JSON 数据存储: 程序使用 JSON 格式存储用户配置参数,方便读取和保存。

四、复杂或不寻常的方面
  • GUI 编程: 程序使用了 tkinter 库创建 GUI,这部分代码相对复杂,涉及到布局管理、事件处理等。

  • 多线程: 程序使用了多线程来处理交易逻辑和 GUI 交互,避免阻塞主线程。

  • 回调机制: xtquant 库的回调机制需要一定的理解才能正确使用。

五、潜在限制和改进建议
  • 文件监控效率: 目前的文件监控方法比较简单,可以考虑使用更高效的文件监控机制,例如 watchdog 库。

  • 错误处理: 可以进一步完善错误处理机制,例如对不同类型的错误进行更具体的处理,并提供更友好的错误提示。

  • 交易策略: 目前的交易策略比较简单,可以考虑添加更复杂的交易策略,例如根据技术指标进行交易。

  • GUI 界面优化: GUI 界面可以进一步优化,例如添加更直观的图表展示交易数据。

六、编程语言和库概述
  • Python: 程序使用 Python 作为主要编程语言,Python 具有简洁易读、丰富的库等优点。

  • tkinter 用于创建 GUI。

    打开网易新闻 查看更多图片

  • ttk tkinter 的主题化组件,提供更美观的界面元素。

  • json 用于处理 JSON 数据。

  • os 用于文件操作。

  • datetime 用于时间处理。

  • threading 用于多线程编程。

  • xtquant 用于连接券商交易接口。

  • xtdata 用于获取行情数据。

  • xtconstant xtquant 库的常量定义。

  • random 用于生成随机数。

  • time 用于时间相关操作。

  • APScheduler 用于定时任务调度。