QMT与通达信结合 5.0:监测交易系统,通达信公式自动交易系统
该系统通过监控通达信软件中的自定义板块文件变化,自动执行股票买入和卖出操作,实现了交易的自动化与智能化。
1. 系统概述
通达信板块自动交易系统是一款基于Python开发的量化交易工具,它通过图形用户界面(GUI)为用户提供了便捷的操作体验。
该系统的核心功能是监控通达信软件中指定的买入和卖出板块文件,当板块内容发生变化时,系统会根据预设的规则自动执行相应的交易操作。

1.1 系统功能
系统主要提供以下功能:
- 自动监控通达信买入和卖出板块文件的变化
- 根据设定的时间段、委托类型、价格策略执行交易
- 智能化资金管理,包括单笔交易金额、总投入限制等
- 持仓数量限制和自动同步功能
- 实时交易反馈和日志记录
1.2 技术架构
该系统采用了以下技术组件:
- GUI框架:使用Python标准库tkinter构建用户界面
- 交易接口:基于xtquant库实现与券商交易系统的连接
- 任务调度:使用apscheduler库实现定时监控和交易执行
- 配置管理:通过JSON文件保存和加载用户配置
2. 代码结构分析
2.1 代码组织
代码主要由以下几个部分组成:
- 回调类MyXtQuantTraderCallback:负责处理交易接口的各种回调事件
- 主类TongDaXinTrader:系统的核心类,包含界面构建和业务逻辑
- 辅助函数:处理股票代码转换、文件路径生成等工作
2.2 核心类与方法
2.2.1 回调类 MyXtQuantTraderCallback
该类继承自XtQuantTraderCallback,用于处理交易接口的回调事件:
- on_stock_order:处理委托回报推送
- on_stock_trade:处理成交变动推送
- on_order_error:处理委托失败推送
- on_cancel_error:处理撤单失败推送
- on_disconnected:处理连接断开事件
2.2.2 主类 TongDaXinTrader
主类包含了系统的主要逻辑,其重要方法包括:
- create_gui:构建图形用户界面
- load_config/save_config:加载和保存用户配置
- trading_loop:启动交易循环
- monitor_file:监控板块文件变化
- place_buy_order/place_sell_order:执行买入和卖出操作
- sync_positions_to_block:同步持仓到通达信板块

3. 工作流程分析
3.1 系统初始化流程
- 创建GUI界面
- 加载用户配置文件
- 初始化交易接口和调度器
- 注册回调函数
- 连接交易服务器并订阅账户
- 启动监控任务
3.2 交易监控与执行流程
- 定期检查板块文件内容变化
- 解析板块文件中的股票代码
- 判断当前时间是否在交易时间范围内
- 检查资金和持仓限制条件
- 获取股票最新价格
- 计算交易数量
- 设置委托价格和类型
- 发送交易指令
- 更新交易日志
3.3 持仓同步流程
- 获取当前持仓信息
- 将持仓股票代码转换为通达信格式
- 写入指定的通达信板块文件
4. 关键算法与技术实现
4.1 板块文件监控机制
系统通过调度器(Scheduler)定期检查板块文件内容,对比上次记录的内容,如果发生变化则触发交易操作:
def monitor_file(self, block_name, action):
try:
file_path = self.get_stock_pool_path(block_name)
if not file_path:
return
if not os.path.exists(file_path):
self.log_message(f"板块文件不存在: {file_path}")
return
# 读取当前文件内容
with open(file_path, "r") as file:
current_content = file.read()
# 检查文件内容是否有变化
if action == "buy":
if current_content == self.last_buy_content:
return
self.last_buy_content = current_content
else: # sell
if current_content == self.last_sell_content:
return
self.last_sell_content = current_content
# 处理股票代码
lines = current_content.splitlines()
if not lines: # 跳过空文件
return
# 处理股票代码
for line in lines:
stock_code = line.strip()
if not stock_code:
continue
# 转换股票代码格式
stock_code = self.convert_stock_code(stock_code)
# 执行交易
if action == "buy":
self.place_buy_order(stock_code)
else:
self.place_sell_order(stock_code)
except Exception as e:
self.log_message(f"监控板块失败 {block_name}: {str(e)}")
4.2 智能资金管理算法
系统实现了复杂的资金管理算法,可以根据用户设置的参数智能分配交易资金:
以买入委托为例,系统会:
- 单只证券总投入上限控制
- 保留资金设置
- 买入数量动态调整
- 底仓保留机制
- 检查可用资金是否超过保留资金
- 计算当前持仓市值
- 检查是否超过单只证券的总投入限制
- 根据剩余可买金额计算委托数量
- 根据证券类型调整委托数量(股票按100股为单位,可转债按10张为单位)
4.3 价格策略实现
系统支持多种委托价格策略:
- 限价委托:根据最新价格加上调整幅度
- 最优五档委托:使用交易所最优五档申报机制
- 最优五档转限价:先使用最优五档,失败后转为限价委托
- 对手方最优:按照对手方最优价格委托
- 本方最优:按照本方最优价格委托
4.4 股票代码格式转换
系统需要在通达信格式和交易接口格式之间进行股票代码转换:
def convert_stock_code(self, stock_code):
stock_code = str(stock_code)
if stock_code.startswith('0'):
return stock_code[1:] + '.SZ'
elif stock_code.startswith('1'):
return stock_code[1:] + '.SH'
return stock_code
def convert_to_tdx_code(self, stock_code):
if stock_code.endswith('.SH'):
return '1' + stock_code.split('.')[0]
elif stock_code.endswith('.SZ'):
return '0' + stock_code.split('.')[0]
return stock_code
5. 用户界面设计
系统采用分区域设计的图形用户界面,包括:
界面采用了分组布局,使用LabelFrame和Grid布局管理器,提高了界面的清晰度和可用性。
- 路径设置区:配置证券账号、通达信目录和QMT报单目录
- 持仓参数区:设置持仓同步板块和持仓数量上限
- 买入设置区:配置买入板块、时间段、委托类型和资金参数
- 卖出设置区:配置卖出板块、时间段、委托类型和资金参数
- 按钮控制区:提供保存参数、清空日志、开始交易、停止交易等功能
- 日志显示区:实时显示系统运行日志
6. 系统局限性与改进建议
6.1 局限性
版权声明:
作者:余汉波
链接:https://www.sanrenjz.com/2025/04/02/qmt%e4%b8%8e%e9%80%9a%e8%be%be%e4%bf%a1%e7%bb%93%e5%90%88-5-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/
文章版权归作者所有,未经允许请勿转载。
THE END