网易首页 > 网易号 > 正文 申请入驻

QMT与通达信结合 4.0:监测交易系统,通达信公式自动交易系统

0
分享至

4.0 版本更新

  1. 主要增加了“卖出委托类型”功能选项“最优五档转限价”。该委托功能解决“最优五档”(最优五档即时成交剩余撤销)遇涨停或跌停无法委托的缺陷,可先检查是否涨停或跌停,若非涨跌停,以最优五档进委委托;若涨跌停,以最新价进行委托。

  2. 自己部署 python 环境的话,设置等跟其他版本一致:需要安装两个库,xtquant 和 apscheduler,其他的是标准库,不需安装。 xtquant 是小 QMT 的数据获取和交易的库,不支持通过 pip 安装,可以到官网 xtquant版本下载

在当今快节奏的金融市场中,自动化交易系统已成为投资者的重要工具。本文将深入解析一个基于通达信和国金QMT的自动化交易系统的代码实现,帮助读者理解其工作原理、架构设计和核心功能。

1. 系统概述

通达信智能交易助手是一个将通达信行情软件与国金QMT交易系统相结合的自动化交易工具。该系统主要通过监控通达信的板块文件变化,自动执行相应的买入或卖出操作,实现无人值守的自动化交易。

1.1 系统核心功能

  • 自动监控通达信板块文件变化

  • 根据板块变化执行买入或卖出操作

  • 支持多种委托方式和价格策略

  • 智能资金管理和风险控制

  • 完整的日志记录系统

  • 图形用户界面操作

2. 代码结构分析

系统主要由两个核心类组成:MyXtQuantTraderCallbackTongDaXinTrader

2.1 回调处理类:MyXtQuantTraderCallback

MyXtQuantTraderCallback类继承自XtQuantTraderCallback,负责处理交易过程中的各种回调事件:


  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

  • 20

  • 21

class MyXtQuantTraderCallback(XtQuantTraderCallback):     def__init__(self, logger):         # 初始化回调处理器,接收日志记录器              defon_stock_order(self, order):         # 处理股票订单回调              defon_stock_trade(self, trade):         # 处理股票成交回调              defon_order_error(self, order_error):         # 处理订单错误回调              defon_cancel_error(self, cancel_error):         # 处理撤单错误回调              defconvert_time(self, unix_timestamp):         # 转换Unix时间戳为可读时间格式              defon_disconnected(self):         # 处理断开连接事件

这个类的主要职责是接收交易系统的各种事件通知,并进行相应处理,如记录日志、更新交易状态等。

2.2 主交易类:TongDaXinTrader

TongDaXinTrader类是系统的核心,负责创建GUI界面、初始化交易环境、监控板块文件、执行交易操作等:


  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

  • 20

  • 21

class TongDaXinTrader:     def__init__(self):         # 初始化交易系统              defcreate_gui(self):         # 创建图形用户界面              defload_config(self):         # 加载配置信息              defsave_config(self):         # 保存配置信息              deflog_message(self, message):         # 记录日志信息              defstart_trading(self):         # 启动交易系统              defstop_trading(self):         # 停止交易系统

3. 核心功能实现详解 3.1 板块文件监控机制

系统通过定时任务监控通达信的板块文件变化,这是自动交易的触发机制:


  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

def init_scheduler(self):     """初始化定时任务调度器"""     self.scheduler = BackgroundScheduler()     self.scheduler.start()      defadd_monitor_jobs(self):     """添加监控任务"""     # 添加买入监控任务     buy_block = self.get_entry_value(self.buy_pool_entry, "示例:BUY")     if buy_block:         self.scheduler.add_job(             self.monitor_file,             'interval',             seconds=int(self.get_entry_value(self.monitor_interval_entry, "10")),             args=[buy_block, "buy"]         )          # 添加卖出监控任务     # 类似代码...

monitor_file方法是监控的核心,它会检查板块文件的变化,并触发相应的交易操作:


  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

  • 20

  • 21

  • 22

  • 23

  • 24

  • 25

  • 26

  • 27

  • 28

  • 29

def monitor_file(self, block_name, action):     """监控板块文件变化并执行相应操作"""     try:         # 获取板块文件路径         file_path = self.get_stock_pool_path(block_name)         ifnot file_path ornot os.path.exists(file_path):             return                      # 读取板块文件内容         withopen(file_path, 'r', encoding='gbk', errors='ignore') as f:             content = f.read()                      # 解析股票代码         stock_codes = []         for line in content.split('\n'):             line = line.strip()             if line andnot line.startswith('#'):                 stock_codes.append(line)                          # 执行交易操作         if action == "buy":             for stock_code in stock_codes:                 self.place_buy_order(stock_code)         else:             for stock_code in stock_codes:                 self.place_sell_order(stock_code)                      except Exception as e:         self.log_message(f"监控文件异常: {str(e)}")

3.2 股票路径处理

系统需要正确处理通达信的文件路径,以便读取板块文件:


  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

def get_stock_pool_path(self, block_name):     """根据通达信目录和板块名称生成完整的股票池文件路径"""     try:         tdx_base_path = self.get_entry_value(self.tdx_path_entry, "示例:D:\\jiaoyi\\gxtdx")         ifnot tdx_base_path:             raise ValueError("通达信程序目录未设置")                  # 如果用户输入了.blk后缀,则去掉         block_name = block_name.replace('.blk', '')                  # 构建完整路径,添加固定的子目录结构         full_path = os.path.join(tdx_base_path, 'T0002', 'blocknew', f'{block_name}.blk')         return full_path     except Exception as e:         self.log_message(f"生成股票池路径失败: {str(e)}")         returnNone

3.3 交易执行逻辑

买入和卖出操作是系统的核心功能,下面以买入操作为例:


  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

  • 20

  • 21

  • 22

  • 23

  • 24

  • 25

  • 26

  • 27

def place_buy_order(self, stock_code):     """执行买入操作"""     try:         # 转换股票代码格式         formatted_code = self.convert_stock_code(stock_code)         ifnot formatted_code:             return                      # 获取最新价格         latest_price = self.get_latest_price(formatted_code)         ifnot latest_price:             return                      # 计算买入数量         # 根据资金管理策略计算买入股数                  # 执行买入委托         # 根据不同的委托方式执行买入                  # 记录买入操作         self.log_message(f"买入委托: {formatted_code}, 价格: {price}, 数量: {quantity}")                  # 从监控板块中移除该股票         self.remove_stock_from_block(stock_code, "buy")              except Exception as e:         self.log_message(f"买入委托异常: {str(e)}")

3.4 用户界面交互

系统提供了图形用户界面,方便用户配置和操作:


  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

def create_gui(self):     """创建图形用户界面"""     # 创建主窗口     self.root = tk.Tk()     self.root.title("通达信板块自动交易系统")     self.root.geometry("800x600")          # 创建各种配置框、按钮和日志区域     # ...          # 设置默认值和加载配置     self.load_config()

用户界面包含多个输入框,系统提供了一系列方法来处理输入框的默认值和实际值:


  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

  • 20

  • 21

  • 22

  • 23

  • 24

  • 25

  • 26

  • 27

def on_entry_click(self, entry, default_text):     """处理输入框点击事件,清除默认提示文本"""     if entry.get() == default_text:         entry.delete(0, tk.END)         entry.config(foreground='black') defon_focus_out(self, entry, default_text):     """处理输入框失去焦点事件,如果为空则显示默认提示文本"""     ifnot entry.get():         entry.insert(0, default_text)         entry.config(foreground='gray') defset_entry_value(self, entry, value, default_text=None):     """设置输入框的值,处理默认提示文本的显示"""     if value:         entry.delete(0, tk.END)         entry.insert(0, value)         entry.config(foreground='black')     elif default_text:         entry.delete(0, tk.END)         entry.insert(0, default_text)         entry.config(foreground='gray') defget_entry_value(self, entry, default_text):     """获取输入框的实际值,如果是默认提示文本则返回空字符串"""     value = entry.get()     return''if value == default_text else value

4. 系统工作流程

整个系统的工作流程可以概括为以下几个步骤:

  1. 用户配置通达信路径、买入/卖出板块、交易参数等

  2. 启动交易系统,初始化调度器和监控任务

  3. 系统定期检查板块文件变化

  4. 发现新的股票代码时,执行相应的买入或卖出操作

  5. 交易完成后,从板块文件中移除该股票代码

  6. 记录交易日志,更新界面显示

5. 使用的编程语言和库

系统主要使用Python语言开发,涉及以下库和模块:

  • tkinter

    : 用于创建图形用户界面

  • os

    : 处理文件路径和系统操作

  • json

    : 处理配置文件的读写

  • datetime

    : 处理日期和时间

  • threading

    : 实现多线程操作

  • time

    : 处理时间延迟和计时

  • random

    : 生成随机数

  • xtquant

    : 国金量化交易接口

  • apscheduler

    : 任务调度器,用于定时监控

6. 系统的潜在限制和改进建议 6.1 潜在限制
  1. 依赖外部软件

    : 系统依赖通达信和国金QMT,如果这些软件升级或接口变更,可能导致系统失效。

  2. 错误处理

    : 当前的错误处理机制较为简单,可能无法应对复杂的异常情况。

  3. 并发控制

    : 在高频交易场景下,可能存在并发问题。

  4. 安全性

    : 缺乏对交易指令的二次验证机制。

6.2 改进建议
  1. 增强错误恢复机制

    : 实现更完善的错误处理和自动恢复功能。

  2. 优化监控机制

    : 使用文件系统事件通知替代定时轮询,提高响应速度和效率。

  3. 增加回测功能

    : 集成回测模块,允许用户在实盘前验证策略有效性。

  4. 增强风控功能

    : 实现更复杂的风险控制策略,如波动率控制、最大回撤限制等。

  5. 数据持久化

    : 使用数据库存储交易记录,便于后续分析和优化。

7. 总结

通达信智能交易助手是一个将传统交易软件与现代量化交易技术相结合的系统,通过自动化监控和交易执行,帮助投资者提高交易效率,减少人为干预。系统设计合理,功能完善,但仍有优化空间。对于有一定技术背景的投资者来说,理解并使用这样的系统,可以显著提升交易体验和效率。

流程图

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

  • 20

graph TD     A[启动系统] --> B[加载配置]     B --> C[创建GUI界面]     C --> D[用户配置参数]     D --> E[启动交易]     E --> F[初始化调度器]     F --> G[添加监控任务]     G --> H{定期检查板块文件}     H --> |发现买入股票| I[执行买入操作]     H --> |发现卖出股票| J[执行卖出操作]     I --> K[获取最新价格]     J --> K     K --> L[计算交易数量]     L --> M[执行委托]     M --> N[记录交易日志]     N --> O[从板块文件移除股票]     O --> H     P[停止交易] --> Q[清理资源]     Q --> R[保存配置]     R --> S[退出系统]

类图
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

  • 20

  • 21

  • 22

  • 23

  • 24

  • 25

  • 26

  • 27

  • 28

  • 29

  • 30

  • 31

  • 32

  • 33

  • 34

  • 35

  • 36

  • 37

  • 38

  • 39

  • 40

  • 41

  • 42

  • 43

  • 44

  • 45

  • 46

  • 47

  • 48

  • 49

  • 50

  • 51

classDiagram     class XtQuantTraderCallback {         <>         +on_stock_order(order)         +on_stock_trade(trade)         +on_order_error(error)         +on_cancel_error(error)         +on_disconnected()     }          class MyXtQuantTraderCallback {         -logger         +__init__(logger)         +on_stock_order(order)         +on_stock_trade(trade)         +on_order_error(error)         +on_cancel_error(error)         +convert_time(unix_timestamp)         +on_disconnected()     }          class TongDaXinTrader {         -root: Tk         -trader_callback: MyXtQuantTraderCallback         -scheduler: BackgroundScheduler         -trading_active: bool         +__init__()         +create_gui()         +load_config()         +save_config()         +log_message(message)         +start_trading()         +stop_trading()         +validate_inputs()         +trading_loop()         +init_scheduler()         +add_monitor_jobs()         +monitor_file(block_name, action)         +convert_stock_code(stock_code)         +place_buy_order(stock_code)         +place_sell_order(stock_code)         +get_latest_price(stock_code)         +run()         +clear_stock_pool(pool_type)         +clear_log()         +get_stock_pool_path(block_name)         +remove_stock_from_block(stock_code, action_type)     }          XtQuantTraderCallback <|-- MyXtQuantTraderCallback     TongDaXinTrader o-- MyXtQuantTraderCallback

通过本文的详细解析,读者应该能够全面理解通达信智能交易助手的代码结构、工作原理和核心功能,为进一步学习和应用量化交易技术打下基础。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
朱孔军任武汉大学党委书记

朱孔军任武汉大学党委书记

界面新闻
2025-09-19 15:53:50
严惩不贷!30年老店,老板竟放毒!四川某知名“毒凉糕”,已逮捕

严惩不贷!30年老店,老板竟放毒!四川某知名“毒凉糕”,已逮捕

毛起吃
2025-09-19 08:29:47
完了!《731》首波口碑出炉,五星好评屈指可数,一星满屏皆是

完了!《731》首波口碑出炉,五星好评屈指可数,一星满屏皆是

电影票房预告片
2025-09-18 14:06:06
高飞任中国东方航空集团总经理

高飞任中国东方航空集团总经理

澎湃新闻
2025-09-19 14:10:29
南航最年轻班子成员高飞“空降”东航担任“二把手”

南航最年轻班子成员高飞“空降”东航担任“二把手”

界面新闻
2025-09-19 15:35:58
特朗普计划重新夺回位于阿富汗的巴格拉姆空军基地并硬扯中国,外交部回应

特朗普计划重新夺回位于阿富汗的巴格拉姆空军基地并硬扯中国,外交部回应

环球网资讯
2025-09-19 15:30:07
收到中方好处,波兰突然翻脸,继续卡住中欧班列,除非满足一条件

收到中方好处,波兰突然翻脸,继续卡住中欧班列,除非满足一条件

文雅笔墨
2025-09-19 13:25:24
市场监管总局依法决定对成都快购科技有限公司立案调查

市场监管总局依法决定对成都快购科技有限公司立案调查

界面新闻
2025-09-19 20:01:39
反转!氢氟酸夺命后续:家属撒谎事发非散步,更多内幕曝光

反转!氢氟酸夺命后续:家属撒谎事发非散步,更多内幕曝光

以茶带书
2025-09-19 13:02:43
台湾省被日本殖民有多深?民进党高官卓荣泰仍佩戴“日据时期”徽章

台湾省被日本殖民有多深?民进党高官卓荣泰仍佩戴“日据时期”徽章

不掉线电波
2025-09-19 19:40:49
媒体报道了就业数据后,网友们通过分析得出了三个结论

媒体报道了就业数据后,网友们通过分析得出了三个结论

清晖有墨
2025-09-19 09:38:19
非必要不做CT!《新英格兰医学杂志》:每10个儿童血癌就有1个与CT有关;每多做一次CT,都可能增加癌症风险

非必要不做CT!《新英格兰医学杂志》:每10个儿童血癌就有1个与CT有关;每多做一次CT,都可能增加癌症风险

医诺维
2025-09-19 11:55:55
一上市公司董事长被拘留

一上市公司董事长被拘留

鲁中晨报
2025-09-19 16:45:03
iPhone 18 Pro Max突然曝光,比 iPhone 17 更重磅!

iPhone 18 Pro Max突然曝光,比 iPhone 17 更重磅!

科技堡垒
2025-09-19 11:12:47
真正的社会底层是啥样?网友:本就是打工的,只是恰巧读了几年书

真正的社会底层是啥样?网友:本就是打工的,只是恰巧读了几年书

带你感受人间冷暖
2025-09-17 00:10:10
主观恶性极深,黄某、陈某,核准死刑!

主观恶性极深,黄某、陈某,核准死刑!

鲁中晨报
2025-09-19 15:17:32
一部 iPhone 17 Pro 撕开全球贫富遮羞布!卢森堡3天工资 vs 印度160天血汗

一部 iPhone 17 Pro 撕开全球贫富遮羞布!卢森堡3天工资 vs 印度160天血汗

EETOP半导体社区
2025-09-19 09:39:07
中方连开三枪,抛257亿美债,封杀美芯片,马斯克:美基本没救了

中方连开三枪,抛257亿美债,封杀美芯片,马斯克:美基本没救了

回京历史梦
2025-09-19 17:00:57
林徽因落选的国徽方案,网友看后感叹:审美确实一绝,但真不合适

林徽因落选的国徽方案,网友看后感叹:审美确实一绝,但真不合适

抽象派大师
2025-09-17 14:41:51
中俄免签是好事,但有个问题不解决绝对不行

中俄免签是好事,但有个问题不解决绝对不行

喀秋莎大世界
2025-09-18 22:18:00
2025-09-19 21:19:00
余汉波 incentive-icons
余汉波
三人行,我们是财经的搬运工
1960文章数 2561关注度
往期回顾 全部

科技要闻

直击iPhone 17开售:消费者偏爱银色橙色

头条要闻

一艘从中国出发的货轮将试航北方海路新路线 中方回应

头条要闻

一艘从中国出发的货轮将试航北方海路新路线 中方回应

体育要闻

从轮椅到铜牌 他熬了7年:下个目标唱国歌!

娱乐要闻

全智贤被全面抵制!相关代言评论区沦陷

财经要闻

684亿大牛股,把孕妇逼到胎停?

汽车要闻

对话周光:一个技术理想主义者的“蜕变”

态度原创

教育
家居
游戏
本地
军事航空

教育要闻

“初中补了3年课,高一就露馅了”,家长晒女儿分数,看清了现实

家居要闻

公共艺术 限时体验打造

IGN《仁王3》制作组访谈:通关流派任君挑选!

本地新闻

大学生军训哪家强,广西申请“出战”!

军事要闻

卫星图像显示以军坦克集结加沙城周围

无障碍浏览 进入关怀版