前言vn.py 那套我熟EventEngine一转on_tick、on_bar、on_order各自注册CtaTemplate 里写逻辑挺有「正规军」的感觉。第一次用天勤时我下意识又建了一个EventEngine把天勤的 quote 往里面塞结果双引擎并行——tick 进 vn、也进天勤下单有时走 MainEngine、有时又在天勤 循环里insert_order模拟盘一天下了双倍单风控当场叫停。后来才明白天勤自己已经是引擎while True: api.wait_update()就是主事件泵你要做的是把原来的on_xxx改成「在这一帧里如果 is_changing 了就调用」。不是天勤缺功能是调度权只能有一个老大。下面是我带同事迁 vn 时的对照表和 class 模板算法均线、通道可以原样搬BarGenerator 的思想也能留但数据源和循环必须换天勤的。一、结构对照别找一一等价找职责等价vn.py 里你熟悉的天勤里建议EventEnginewhile True: api.wait_update()on_tickif api.is_changing(quote): ...on_barif api.is_changing(klines.iloc[-1], datetime): ...MainEngine.send_orderinsert_order/TargetPosTaskCtaTemplate自写classon_update()vn 的「事件类型字符串」在天勤里没有对应物——不必硬造用is_changing的字段参数就能达到「只在价格变时算」「只在新 K 线时算」的效果。二、把 CtaTemplate 收成 class我用的模板classMyStrategy:def__init__(self,api):self.apiapi self.quoteapi.get_quote(SHFE.rb2510)self.klinesapi.get_kline_serial(SHFE.rb2510,60)defon_update(self):apiself.apiifapi.is_changing(self.klines.iloc[-1],datetime):self.on_bar_close()ifapi.is_changing(self.quote,last_price):self.on_tick()defon_bar_close(self):passdefon_tick(self):passapiTqApi(TqSim(),authTqAuth(账户,密码))sMyStrategy(api)whileTrue:api.wait_update()s.on_update()多策略就多个 instance禁止多个策略共用一个全局target_pos。vn 里你可能习惯每个 Strategy 独立天勤也一样只是共用一个wait_update。三、数据容器BarGenerator 可以留引擎别留vn.py 的 BarGenerator、ArrayManager 继续服务你的指标计算没问题但 K 线来源改成get_kline_serial的 DataFrame。我踩过的坑是仍在 vn 里合成 bar天勤也订了 kline两套 bar 差一根信号差一分钟能纠结一整天。不要在 vn 的MainEngine里嵌TqApi选一条主循环。研究阶段可以在 Jupyter 里用 vn 算因子、天勤只负责执行但生产环境尽量一条线否则出问题不知道信谁。四、迁移顺序我要求新人按周走第一周只迁行情和指标模拟盘对价格、对 K 线收盘时间不下单。第二周迁TargetPosTask或insert_order1 手来回对持仓和 order 日志。第三周迁风控、多品种、夜盘时段过滤。跳步的人往往在第三周才暴露「bar 差一根」这种基础问题返工更痛。五、常见坑vn 线程 天勤 单线程二选一。全局变量在多个策略间共享状态进 class。回调里下单、主循环里也下单统一从一个on_bar_close出口下单。总结vn.py 迁天勤我花最多时间的不是学 API是克制再包一层 EventEngine 的冲动。天勤的wait_update已经帮你阻塞到「有更新」了is_changing帮你过滤「谁更新」这和 vn 的 emit 本质是同一件事。你把 CtaTemplate 改成 class on_update算法留、调度换通常两三周能平稳过渡。文档advanced/for_vnpy_user.rst建议团队一起读有争议时以文档为准别以「我以前 vn 是这么写的」为准——两个框架的脾气不一样。FAQ1能否长期两套并存不建议维护成本和幽灵 bug 都会上去。2回测怎么迁用TqBacktest替换 vn 回测模块策略类尽量复用。3多策略怎么写多 class一个wait_update各自is_changing早返回。4性能会变差吗看你是不是 tick 级全算vn 也一样怕这个。5官方迁移说明在哪advanced/for_vnpy_user.rst。风险提示本文用于期货量化技术实践讨论不构成投资建议。