通达信选股公式怎么放到 QMT 里自动跑
很多人会问:「我有一个通达信选股公式,怎么放到 QMT 里面自动运行?」
这是工程记录。通达信公式负责选出一批代码,QMT 负责到点去下单并对账。两件事不是复制粘贴。数字和时刻是示例,不是操作指令。不构成投资建议,不代操盘。
公式改写成 Python 可用 AI 量化代码。选出股票之后接到定时和下单,还是按下面几步对;对不上再走 关注 代写落地。
手册:passorder · run_time · 委托回调
你想做成什么样
常见目标就一句:每天某个时刻,用原来的选股条件筛一遍,把结果拿到 QMT 里买(或先卖后买)。
做不到的是:把通达信公式原文整段贴进 QMT 编辑器就自动交易。QMT 认的是 Python,不是通达信公式语言。
分几步
- 先确认账户能下单。 策略交易界面注入资金账号,
init里set_account。模拟盘和实盘不要混用同一份状态文件。 - 把公式变成「代码列表」。 在通达信或其它软件里先跑出当日股票池,导出代码;或把条件改写成 QMT 能取的日线 / 财务字段。上交所用
.SH,不要写成通达信里的不带后缀。 - 到点再动。 实盘用
run_time对准时刻;回测run_time不跑,逻辑还要能从handlebar走进去。见 run_time 回测不跑。 - 下单用
passorder,返回不等于成交。 用 成交回调 或get_trade_detail_data(..., 'DEAL')对账。 - 同一天只跑一轮。
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容易卡住的地方
- 公式里的「收盘价 / 均线」和 QMT 复权、当日未收盘不是一套。盘中日线不要当定稿。
- 通达信代码没有
.SH/.SZ。拷进 QMT 先补后缀。从 PTrade 来的还要分清.SS和.SH,见.SS/.SH。 - 选股结果是空列表时不要下单。先
print再passorder。 - 一键转换器还没有。复杂公式(未来函数、自造指标)通常要重写,不是改两行函数名。
搞不定时
完整脚本和讨论在 知识星球。公式移植、改参、接到账户,公众号后台留言 策略代写。我们做开发和落地,不代操盘。
完整讨论和附件在 知识星球 Kimi量化研究所。
