Skip to content

通达信选股公式怎么放到 QMT 里自动跑

很多人会问:「我有一个通达信选股公式,怎么放到 QMT 里面自动运行?」

这是工程记录。通达信公式负责选出一批代码,QMT 负责到点去下单并对账。两件事不是复制粘贴。数字和时刻是示例,不是操作指令。不构成投资建议,不代操盘。

公式改写成 Python 可用 AI 量化代码。选出股票之后接到定时和下单,还是按下面几步对;对不上再走 关注 代写落地。

手册:passorder · run_time · 委托回调

你想做成什么样

常见目标就一句:每天某个时刻,用原来的选股条件筛一遍,把结果拿到 QMT 里买(或先卖后买)。

做不到的是:把通达信公式原文整段贴进 QMT 编辑器就自动交易。QMT 认的是 Python,不是通达信公式语言。

分几步

  1. 先确认账户能下单。 策略交易界面注入资金账号,initset_account。模拟盘和实盘不要混用同一份状态文件。
  2. 把公式变成「代码列表」。 在通达信或其它软件里先跑出当日股票池,导出代码;或把条件改写成 QMT 能取的日线 / 财务字段。上交所用 .SH,不要写成通达信里的不带后缀。
  3. 到点再动。 实盘用 run_time 对准时刻;回测 run_time 不跑,逻辑还要能从 handlebar 走进去。见 run_time 回测不跑
  4. 下单用 passorder,返回不等于成交。成交回调get_trade_detail_data(..., 'DEAL') 对账。
  5. 同一天只跑一轮。 handlebar 可能进多次,用日期戳卡住,否则会反复打单。
python
#coding:gbk
def init(C):
    try:
        C.set_account(account)
    except NameError:
        pass
    C.last_day = ''
    start = datetime.now().strftime('%Y-%m-%d 09:30:00')
    C.run_time('do_select_buy', '60nSecond', start)

def do_select_buy(C):
    if C.do_back_test:
        return
    day = datetime.now().strftime('%Y%m%d')
    if C.last_day == day:
        return
    # 到点后:codes = 你的选股结果(示例不要当推荐)
    # passorder(23, 1101, acct, code, 11, price, vol, '策略1', 2, '', C)
    C.last_day = day

容易卡住的地方

  1. 公式里的「收盘价 / 均线」和 QMT 复权、当日未收盘不是一套。盘中日线不要当定稿。
  2. 通达信代码没有 .SH / .SZ。拷进 QMT 先补后缀。从 PTrade 来的还要分清 .SS.SH,见 .SS / .SH
  3. 选股结果是空列表时不要下单。先 printpassorder
  4. 一键转换器还没有。复杂公式(未来函数、自造指标)通常要重写,不是改两行函数名。

搞不定时

完整脚本和讨论在 知识星球。公式移植、改参、接到账户,公众号后台留言 策略代写。我们做开发和落地,不代操盘。

相关:每天自动选股买入 · 策略代码 · 关注

完整讨论和附件在 知识星球 Kimi量化研究所