cover_image

基金套利,量化编程-通达信实盘下单-实战篇-9

东哥的平凡生活 静听烟雨任平生

从"下单失败"到"程序化交易":一次难忘的Debug经历


一、前言

前段时间,群友说通达信官网更新了版本,之前的7.72版本在线了,显示的都是要收费的版本。说实话,我之前用通达信很少,搞不懂它这些版本究竟什么区别。反正我自己用的是银河QMT,就没再花时间去折腾通达信了。

前几天,为了用通达信获取我那个入门级的“山寨版LOF指数估值”,又花了点时间学习了一下,也去宽客论坛转了转,我大概有了一点眉目,于是今天动手测试了一下。

本想着用朴素的老朋友TRAE,结果他罢工了。果然,豆包都要收费了,TRAE也受不了薅羊毛的了:

于是,下载了腾讯的CodeBuddy,我看群里小伙伴有人在用它,那就试一试吧。折腾了半小时,总算出现了期待的“完美”两字:

让它回顾了整个调试过程,我润色了一番,如下,也给各位分享。这不仅仅是一个技术Bug的修复,更是一次关于编程小白"如何系统性地排查问题"的实战经验分享。希望我的经验教训,能帮助群友们在未来的开发中少走一些坑。

不过,我也不确认虽然最终成功下单,但究竟是不是AI分析的这个原因,今天我也懒得去深究了。管他黑猫白猫,抓住耗子就是好猫


二、问题背景

之前我使用的是通达信金融终端V7.72配合tqcenter.py接口。目标是:

  • 通过Python程序自动获取持仓信息
  • 实现程序化下单功能

后来实际测试,发现下单功能完全无法使用,我以为是需要和券沟通获取进一步权限,如同QMT那样,或者需要购买通达信L2行情,就停止折腾了,忙着其他功能的开发去了。直到今天,再向虎山行!


三、第一次尝试:误判问题根源

tqcenter.py 版本信息:

  • 文件版本:V1.0.4
  • 通达信客户端:V7.72

AI告诉我:**"你的通达信版本太旧了!"** 我觉得不对啊,这是3月份的版本,按理说不至于一定要升级通达信客户端到最新版,而且最新版也写要收费啊? 我给AI发了通达信客户端的截图,AI服了,告诉我:

这里我犯了一个典型错误:混淆了"通达信客户端版本"和"tqcenter.py接口版本"。


四、转折点:发现真正的问题

4.1 深入检查代码

AI开始仔细检查的 tqcenter.py 文件。通过搜索关键字,发现:

❌ 搜索 "stock_account" → 未找到

关键发现:V7.72版本下的 tqcenter.py 缺少 stock_account 函数!

4.2 追问线索

AI询问我是否有其他版本的 tqcenter.py,幸好我之前下载了new_tdx_test20260410这个测试版,于是让AI试一试这个版本:

"D:\new_tdx_test\PYPlugins\user" 你看看这个目录里面有没有你要的函数?

4.3 柳暗花明

在这里AI发现了**另一个 tqcenter.py**:

文件
版本
是否有 stock_account
项目目录的 tqcenter.py
V1.0.4
❌ 没有
D:\new_tdx_test...\user\tqcenter.py
V1.0.6
✅ 有!

五、核心问题分析

5.1 两个版本的关键差异

通过对比两个版本的 order_stock 函数,发现了大差异

参数
旧版 (V1.0.4)
新版 (V1.0.6)
账户参数
account: straccount_id: int
策略名称
strategy_name
❌ 已删除
订单备注
order_remark
❌ 已删除

5.2 为什么旧版会失败?

# 旧版 V1.0.4 的调用方式
tq.order_stock(
    account="13500XXXXXX",  # ❌ 字符串账号
    stock_code="162411.SZ",
    ...
)

旧版本确实有 order_stock 函数,但它期望的是账号字符串。问题在于:没有 stock_account 函数,就无法获取正确的账号格式


六、解决方案

6.1 获取新版接口

用户只需要使用新版 tqcenter.py

import sys
sys.path.insert(0r'D:\new_tdx64\PYPlugins\user')  # 新版路径

from tqcenter import tq, tqconst

6.2 正确的下单流程

# 第一步:初始化
tq.initialize(__file__)

# 第二步:获取账户句柄
account_id = tq.stock_account()  # 自动获取已登录账号
print(f"账户句柄: {account_id}")  # 输出: 账户句柄: 1

# 第三步:查询持仓
positions = tq.query_stock_positions(account_id)
print(f"持仓: {positions}")
# 输出: [{'Code': '162411.SZ', 'Cbj': '0.885', 'TotalVol': '4000'}, ...]

# 第四步:下单(使用官方常量)
order_result = tq.order_stock(
    account_id=account_id,                    # ✅ 整数句柄
    stock_code="162411.SZ",
    order_type=tqconst.STOCK_BUY,             # 买入 = 0
    order_volume=100,
    price_type=tqconst.PRICE_MY,             # 自填价格 = 0
    price=0.92
)

print(f"下单结果: {order_result}")
# 输出: {'ErrorId': '0', 'Msg': '已发送信号至客户端,待用户确认!', 'Value': 1}

终端输出:

APP正常显示:

6.3 重要参数说明

order_type(委托类型)

常量
说明
STOCK_BUY
0
买入
STOCK_SELL
1
卖出
ETF_PURCHASE
45
基金申购
ETF_REDEMPTION
46
基金赎回

price_type(报价类型)

常量
说明
PRICE_MY
0
自填价格
PRICE_SJ
1
市价
PRICE_ZTJ
2
涨停价
PRICE_DTJ
3
跌停价

七、经验总结与教训

7.1 我的三个弯路

弯路
错误思维
正确做法
第一弯
"版本太旧,升级客户端"
先检查 tqcenter.py 版本
第二弯
关注客户端版本号
关注 Python 接口版本
第三弯
假设所有函数都存在
先验证函数是否存在

7.2 关键经验

1. 区分系统层级

  • 通达信客户端版本 ≠ Python接口版本
  • 接口文件本身有独立的版本号

2. 善用搜索功能

  • 使用 grep 或 IDE 搜索快速定位问题
  • 搜索 stock_accountorder_stock 等关键字

3. 对比是最好的老师

  • 发现问题时,找到同一库的其他版本
  • 对比参数差异往往能发现问题所在

4. 官方文档永远最可靠

  • 我给AI提供了官方文档后,一切豁然开朗
  • 第一时间找到官方文档,而不是凭猜测

7.3 给自己打气

不要害怕走弯路。每一次Debug失败,都是一次学习的机会。

重要的是:保持耐心,系统性地排查问题,最终一定能找到答案。


八、完整代码示例

# -*- coding: utf-8 -*-
"""
通达信程序化交易 - 完整示例
"""

import sys
sys.path.insert(0r'D:\new_tdx64\PYPlugins\user')  # 新版接口路径

from tqcenter import tq, tqconst

def main():
    # 1. 初始化
    tq.initialize(__file__)

    # 2. 获取账户句柄
    account_id = tq.stock_account()
    if account_id <= 0:
        print("获取账户失败!")
        return

    # 3. 查询持仓
    positions = tq.query_stock_positions(account_id)
    print("当前持仓:", positions)

    # 4. 查询当日委托
    orders = tq.query_stock_orders(account_id)
    print("当日委托:", orders)

    # 5. 下单示例
    result = tq.order_stock(
        account_id=account_id,
        stock_code="162411.SZ",
        order_type=tqconst.STOCK_BUY,
        order_volume=100,
        price_type=tqconst.PRICE_MY,
        price=0.92
    )
    print("下单结果:", result)

    # 6. 关闭连接
    tq.close()

if __name__ == '__main__':
    main()

这样,“半自动化交易套利群”的代码马上就可以更新通达信的下单界面了。


继续滑动看下一个
静听烟雨任平生
向上滑动看下一个