Lazy loaded image
QMT与问财结合-双向交易:问财数据自动化交易系统
00 分钟
2025-3-10
2025-3-10
type
status
date
slug
summary
tags
category
icon
password

使用说明

问财的数据爬取利益于开源库 zsrl/pywencai: 获取同花顺问财数据,但在使用该程序系统需要注意下面几点:
  1. 自己部署 python 环境的话,需要安装相应的库,主要有三个,xtquant 、apscheduler 和 pywencai,其他的是标准库,不需安装。 xtquant 是小 QMT 的数据获取和交易的库,可以到官网 xtquant版本下载 | 迅投知识库 (thinktrader.net) 自行下载,然后放到你 python 安装所在的 site-packages 文件夹内。apschedulerpywencai 库可以通过 pip 安装,国内镜像可以使用 pip install apscheduler -i https://pypi.tuna.tsinghua.edu.cn/simple
  1. pywencai 库依赖 Node.js,自行在电脑中安装安装,否则无法爬取问财数数据。
  1. 爬取问财的数据可能出现不稳定,毕竟不是通过 api 获得数据,所以是存在一定的风险的。一旦数据出错或获取不到数据,自动化交易可能带来损失,损失自行承担,概不负责。建议有两个:一、降低爬取频率,以免 IP 被封;二、模拟号充分测试。

1. 引言

问财双向委托交易系统是一款基于Python开发的量化交易工具,它结合了问财数据查询与自动化交易执行功能,实现了根据问财查询结果自动买入或卖出股票的功能。本文将深入解析该系统的代码实现,帮助读者理解其工作原理、架构设计和关键算法。

2. 系统概述

问财双向委托交易系统主要由以下几个部分组成:
  1. 用户界面:基于tkinter构建的图形界面,用于用户输入交易参数和查看交易日志
  1. 交易接口:通过xtquant库连接交易服务器,实现股票交易功能
  1. 数据查询:使用pywencai库查询问财数据,获取符合条件的股票列表
  1. 调度系统:使用apscheduler库实现定时查询和交易功能
  1. 交易逻辑:实现买入和卖出的核心算法,包括资金管理、持仓管理等
系统的主要功能包括:
  • 根据问财查询结果自动买入或卖出股票
  • 支持定时查询和交易
  • 可设置买入卖出条件和资金阈值
  • 支持多种委托类型和价格调整
  • 提供完整的交易日志和状态监控
notion image

3. 代码结构分析

3.1 类结构

系统主要包含两个类:
  1. MyXtQuantTraderCallback:交易回调类,处理交易事件回调
  1. WenCaiTrader:主类,实现系统的核心功能

3.2 主要模块和依赖

系统使用了以下主要的Python库:
  • tkinter:构建图形用户界面
  • xtquant:连接交易服务器,执行交易操作
  • pywencai:查询问财数据
  • pandas:处理数据结构
  • apscheduler:实现定时任务调度
  • threading:实现多线程处理
  • datetime:处理日期和时间
  • json:处理配置文件

4. 核心功能实现

4.1 交易回调处理

MyXtQuantTraderCallback类继承自XtQuantTraderCallback,实现了多个回调方法来处理交易事件:
这些回调方法使系统能够实时响应交易事件,记录交易日志,并在必要时采取相应措施。

4.2 问财数据查询

系统使用pywencai库查询问财数据,获取符合条件的股票列表:
该方法实现了以下功能:
  1. 根据用户选择的查询品种设置查询类型
  1. 添加异常捕获和重试逻辑,提高系统稳定性
  1. 提取证券代码和名称,并进行格式化处理
  1. 根据证券类型(股票、可转债、基金)进行过滤和格式化

4.3 买入订单处理

买入订单处理是系统的核心功能之一,实现了以下逻辑:
买入逻辑包括以下关键步骤:
  1. 交易时间检查:确保当前时间在用户设定的买入时间范围内
  1. 资金检查:确保可用资金大于保留资金
  1. 撤单处理:撤销同一股票的未成交订单,避免重复委托
  1. 持仓检查:计算当前持仓市值,确保不超过单只证券的总金额限制
  1. 委托数量计算:根据可用资金和单笔买入金额计算委托数量
  1. 价格策略:根据用户设置的委托类型和价格调整幅度设置委托价格
  1. 委托执行:调用交易接口执行买入委托

4.4 卖出订单处理

卖出订单处理与买入类似,但有不同的逻辑:
卖出逻辑的关键步骤包括:
  1. 交易时间检查:确保当前时间在用户设定的卖出时间范围内
  1. 资金检查:确保可用资金小于资金阈值,避免在资金充足时卖出
  1. 持仓检查:确保有可用持仓
  1. 卖出策略:根据总卖出金额和单笔卖出金额计算卖出数量,支持保留底仓功能
  1. 价格策略:根据用户设置的委托类型和价格调整幅度设置委托价格
  1. 委托执行:调用交易接口执行卖出委托

4.5 调度系统

系统使用apscheduler库实现定时查询和交易功能:
调度系统的主要功能包括:
  1. 初始化调度器,配置线程池和进程池
  1. 添加买入和卖出监控任务,设置查询间隔
  1. 定时执行问财查询,获取符合条件的股票列表
  1. 根据查询结果执行买入或卖出操作
notion image

5. 关键算法分析

5.1 资金管理算法

系统实现了精细的资金管理算法,包括:
  1. 保留资金:设置保留资金,确保账户始终保留一定的可用资金
  1. 单笔交易金额:限制单笔买入或卖出的金额,避免过大的市场冲击
  1. 总交易金额:限制单只证券的总买入或卖出金额,实现资金分散
  1. 底仓管理:支持保留底仓功能,避免完全清仓
这些算法共同构成了系统的风险控制机制,帮助用户实现科学的资金管理。

5.2 价格策略算法

系统支持多种委托类型和价格调整机制:
  1. 限价委托:根据最新价格和调整幅度计算委托价格
  1. 最优五档:使用市场最优五档价格委托
  1. 最优五档转限价:先尝试最优五档,然后转为限价委托
  1. 对手方最优:使用对手方最优价格委托
  1. 本方最优:使用本方最优价格委托
对于可转债,系统强制使用限价委托,以应对可转债市场的特殊性。

5.3 交易时间控制算法

系统实现了交易时间控制算法,允许用户设置买入和卖出的时间范围,避免在不适当的时间交易:
这一算法使系统能够在用户指定的时间窗口内执行交易,避免在市场波动较大的时段交易。

6. 用户界面设计

系统使用tkinter构建了直观的图形用户界面,包括以下主要部分:
  1. 基础设置:设置证券账号、QMT报单目录等基本参数
  1. 买入设置:设置买入查询条件、买入模式、资金限制等参数
  1. 卖出设置:设置卖出查询条件、卖出模式、资金阈值等参数
  1. 操作按钮:启动交易、停止交易、清空日志等功能按钮
  1. 日志显示:显示交易日志,实时反馈系统状态
界面设计注重用户体验,提供了丰富的参数设置选项,同时保持了布局的清晰和简洁。

7. 系统限制与改进建议

7.1 系统限制

  1. 依赖外部服务:系统依赖问财数据服务和交易服务器,如果这些服务不可用,系统将无法正常工作
  1. 错误处理:虽然系统实现了基本的错误处理,但对于某些复杂场景的处理可能不够完善
  1. 性能限制:频繁查询问财数据可能导致性能问题,特别是在查询间隔较短的情况下
  1. 风险控制:系统提供了基本的风险控制机制,但可能不足以应对极端市场情况

7.2 改进建议

  1. 增强错误处理:完善错误处理机制,提高系统稳定性
  1. 优化查询性能:实现查询结果缓存,减少对问财服务的请求频率
  1. 增加回测功能:添加策略回测功能,帮助用户评估策略效果
  1. 增强风险控制:实现更复杂的风险控制算法,如波动率限制、止损止盈等
  1. 支持更多数据源:增加对其他数据源的支持,减少对单一数据源的依赖
  1. 实现策略编辑器:允许用户通过图形界面或简单脚本创建自定义策略

8. 总结

问财双向委托交易系统是一款功能强大的量化交易工具,它结合了问财数据查询与自动化交易执行功能,实现了根据问财查询结果自动买入或卖出股票的功能。系统采用模块化设计,实现了用户界面、交易接口、数据查询、调度系统和交易逻辑等核心模块,并提供了丰富的参数设置选项,满足不同用户的需求。
通过深入分析系统的代码实现,我们了解了系统的工作原理、架构设计和关键算法,这有助于用户更好地理解和使用系统,也为系统的进一步改进提供了参考。

流程图

上一篇
3月-10日收评:A股涨跌互现,成交活跃,后市何去何从?
下一篇
投资小知识:鹰派抬头?欧洲央行在通胀迷雾中的两难抉择

评论
Loading...