type
status
date
slug
summary
tags
category
icon
password
使用说明
- 自己部署 python 环境的话,需要安装相应的库,主要有三个,xtquant 、apscheduler 和 pywencai,其他的是标准库,不需安装。
xtquant
是小 QMT 的数据获取和交易的库,可以到官网 xtquant版本下载 | 迅投知识库 (thinktrader.net) 自行下载,然后放到你 python 安装所在的 site-packages 文件夹内。apscheduler
和pywencai
库可以通过 pip 安装,国内镜像可以使用pip install apscheduler -i https://pypi.tuna.tsinghua.edu.cn/simple
。
pywencai
库依赖 Node.js,自行在电脑中安装安装,否则无法爬取问财数数据。
- 爬取问财的数据可能出现不稳定,毕竟不是通过 api 获得数据,所以是存在一定的风险的。一旦数据出错或获取不到数据,自动化交易可能带来损失,损失自行承担,概不负责。建议有两个:一、降低爬取频率,以免 IP 被封;二、模拟号充分测试。
1. 引言
问财双向委托交易系统是一款基于Python开发的量化交易工具,它结合了问财数据查询与自动化交易执行功能,实现了根据问财查询结果自动买入或卖出股票的功能。本文将深入解析该系统的代码实现,帮助读者理解其工作原理、架构设计和关键算法。
2. 系统概述
问财双向委托交易系统主要由以下几个部分组成:
- 用户界面:基于tkinter构建的图形界面,用于用户输入交易参数和查看交易日志
- 交易接口:通过xtquant库连接交易服务器,实现股票交易功能
- 数据查询:使用pywencai库查询问财数据,获取符合条件的股票列表
- 调度系统:使用apscheduler库实现定时查询和交易功能
- 交易逻辑:实现买入和卖出的核心算法,包括资金管理、持仓管理等
系统的主要功能包括:
- 根据问财查询结果自动买入或卖出股票
- 支持定时查询和交易
- 可设置买入卖出条件和资金阈值
- 支持多种委托类型和价格调整
- 提供完整的交易日志和状态监控

3. 代码结构分析
3.1 类结构
系统主要包含两个类:
- MyXtQuantTraderCallback:交易回调类,处理交易事件回调
- WenCaiTrader:主类,实现系统的核心功能
3.2 主要模块和依赖
系统使用了以下主要的Python库:
- tkinter:构建图形用户界面
- xtquant:连接交易服务器,执行交易操作
- pywencai:查询问财数据
- pandas:处理数据结构
- apscheduler:实现定时任务调度
- threading:实现多线程处理
- datetime:处理日期和时间
- json:处理配置文件
4. 核心功能实现
4.1 交易回调处理
MyXtQuantTraderCallback
类继承自XtQuantTraderCallback
,实现了多个回调方法来处理交易事件:这些回调方法使系统能够实时响应交易事件,记录交易日志,并在必要时采取相应措施。
4.2 问财数据查询
系统使用
pywencai
库查询问财数据,获取符合条件的股票列表:该方法实现了以下功能:
- 根据用户选择的查询品种设置查询类型
- 添加异常捕获和重试逻辑,提高系统稳定性
- 提取证券代码和名称,并进行格式化处理
- 根据证券类型(股票、可转债、基金)进行过滤和格式化
4.3 买入订单处理
买入订单处理是系统的核心功能之一,实现了以下逻辑:
买入逻辑包括以下关键步骤:
- 交易时间检查:确保当前时间在用户设定的买入时间范围内
- 资金检查:确保可用资金大于保留资金
- 撤单处理:撤销同一股票的未成交订单,避免重复委托
- 持仓检查:计算当前持仓市值,确保不超过单只证券的总金额限制
- 委托数量计算:根据可用资金和单笔买入金额计算委托数量
- 价格策略:根据用户设置的委托类型和价格调整幅度设置委托价格
- 委托执行:调用交易接口执行买入委托
4.4 卖出订单处理
卖出订单处理与买入类似,但有不同的逻辑:
卖出逻辑的关键步骤包括:
- 交易时间检查:确保当前时间在用户设定的卖出时间范围内
- 资金检查:确保可用资金小于资金阈值,避免在资金充足时卖出
- 持仓检查:确保有可用持仓
- 卖出策略:根据总卖出金额和单笔卖出金额计算卖出数量,支持保留底仓功能
- 价格策略:根据用户设置的委托类型和价格调整幅度设置委托价格
- 委托执行:调用交易接口执行卖出委托
4.5 调度系统
系统使用
apscheduler
库实现定时查询和交易功能:调度系统的主要功能包括:
- 初始化调度器,配置线程池和进程池
- 添加买入和卖出监控任务,设置查询间隔
- 定时执行问财查询,获取符合条件的股票列表
- 根据查询结果执行买入或卖出操作

5. 关键算法分析
5.1 资金管理算法
系统实现了精细的资金管理算法,包括:
- 保留资金:设置保留资金,确保账户始终保留一定的可用资金
- 单笔交易金额:限制单笔买入或卖出的金额,避免过大的市场冲击
- 总交易金额:限制单只证券的总买入或卖出金额,实现资金分散
- 底仓管理:支持保留底仓功能,避免完全清仓
这些算法共同构成了系统的风险控制机制,帮助用户实现科学的资金管理。
5.2 价格策略算法
系统支持多种委托类型和价格调整机制:
- 限价委托:根据最新价格和调整幅度计算委托价格
- 最优五档:使用市场最优五档价格委托
- 最优五档转限价:先尝试最优五档,然后转为限价委托
- 对手方最优:使用对手方最优价格委托
- 本方最优:使用本方最优价格委托
对于可转债,系统强制使用限价委托,以应对可转债市场的特殊性。
5.3 交易时间控制算法
系统实现了交易时间控制算法,允许用户设置买入和卖出的时间范围,避免在不适当的时间交易:
这一算法使系统能够在用户指定的时间窗口内执行交易,避免在市场波动较大的时段交易。
6. 用户界面设计
系统使用tkinter构建了直观的图形用户界面,包括以下主要部分:
- 基础设置:设置证券账号、QMT报单目录等基本参数
- 买入设置:设置买入查询条件、买入模式、资金限制等参数
- 卖出设置:设置卖出查询条件、卖出模式、资金阈值等参数
- 操作按钮:启动交易、停止交易、清空日志等功能按钮
- 日志显示:显示交易日志,实时反馈系统状态
界面设计注重用户体验,提供了丰富的参数设置选项,同时保持了布局的清晰和简洁。
7. 系统限制与改进建议
7.1 系统限制
- 依赖外部服务:系统依赖问财数据服务和交易服务器,如果这些服务不可用,系统将无法正常工作
- 错误处理:虽然系统实现了基本的错误处理,但对于某些复杂场景的处理可能不够完善
- 性能限制:频繁查询问财数据可能导致性能问题,特别是在查询间隔较短的情况下
- 风险控制:系统提供了基本的风险控制机制,但可能不足以应对极端市场情况
7.2 改进建议
- 增强错误处理:完善错误处理机制,提高系统稳定性
- 优化查询性能:实现查询结果缓存,减少对问财服务的请求频率
- 增加回测功能:添加策略回测功能,帮助用户评估策略效果
- 增强风险控制:实现更复杂的风险控制算法,如波动率限制、止损止盈等
- 支持更多数据源:增加对其他数据源的支持,减少对单一数据源的依赖
- 实现策略编辑器:允许用户通过图形界面或简单脚本创建自定义策略
8. 总结
问财双向委托交易系统是一款功能强大的量化交易工具,它结合了问财数据查询与自动化交易执行功能,实现了根据问财查询结果自动买入或卖出股票的功能。系统采用模块化设计,实现了用户界面、交易接口、数据查询、调度系统和交易逻辑等核心模块,并提供了丰富的参数设置选项,满足不同用户的需求。
通过深入分析系统的代码实现,我们了解了系统的工作原理、架构设计和关键算法,这有助于用户更好地理解和使用系统,也为系统的进一步改进提供了参考。
流程图
- 作者:余汉波
- 链接:https://wd.sanrenjz.com/%E4%BB%A3%E7%A0%81%E4%B8%8E%E6%95%88%E7%8E%87/QMT%E4%B8%8E%E9%97%AE%E8%B4%A2%E7%BB%93%E5%90%88-%E5%8F%8C%E5%90%91%E4%BA%A4%E6%98%93%EF%BC%9A%E9%97%AE%E8%B4%A2%E6%95%B0%E6%8D%AE%E8%87%AA%E5%8A%A8%E5%8C%96%E4%BA%A4%E6%98%93%E7%B3%BB
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。