QMT的init和handlebar到底在干什么,用一句话说清
发布时间:7小时前阅读:10
刚接触QMT的Python策略,最容易懵的是这两个函数:init和handlebar。文档里写得很技术,其实用一句话就能说清:init是开场前布置场地,handlebar是每一秒都在发生的现场指挥。
一、init:只在启动时执行一次
策略启动的时候,init跑一遍,之后再也不跑。它的作用是做准备:
设置股票池,告诉策略要盯哪些标的;
设定参数,比如均线周期、仓位比例、止损幅度;
订阅行情,声明需要哪些品种、哪种频率的数据;
初始化状态变量,比如记录当日已下单次数、记录持仓成本。
新手常犯的错是把交易逻辑写进init。结果就是策略启动时下一单,之后再也不动。
二、handlebar:每根K线或每笔行情触发一次
handlebar是策略的心脏。每到一根新的K线,或者每来一笔逐笔行情,它就自动执行一次。你所有关于买和卖的逻辑,都写在这里面。
典型结构是四步:先取当前数据,再算指标,然后判断条件,最后发委托。
关键是理解它的执行频率。如果你订阅的是日线,一天只触发一次;订阅分钟线,一分钟一次;订阅逐笔,每笔都触发。选错频率,策略的行为会完全变形。
三、三个高频错误
第一个,把重活放在handlebar里。每次触发都重新读全量历史数据、重新算一遍长周期指标,跑几十只标的就会卡死。正确做法是在init里准备好,在handlebar里只做增量更新。
第二个,没有防重复下单。条件连续满足时,同一个信号会连着发好几笔委托。解决办法是用一个状态变量记录是否已持仓,发单前先判断。
第三个,把状态变量写在函数内部。函数内的局部变量每次调用都会重置,你的计数器永远归零。要在init里初始化,作为全局状态来用。
四、一个判断自己写对没写对的方法
在handlebar开头打一行日志,输出当前时间和标的。跑一遍回测,看日志出现的次数和时间点是否符合预期。如果日志刷得飞快,说明订阅频率选错了;如果只有一行,说明handlebar根本没被触发。
这两个函数搞明白,QMT的策略框架就通了八成。剩下的都是在这两个位置上做加减法。
股票开户欢迎找我!可以申请万0.854的股票佣金、etf 可转债佣金万0.5、国债逆回购一折(百万分之一)!量化软件QMT+ptrade免费使用!还有888、999资金靓号等你选!
温馨提示:投资有风险,选择需谨慎。
怎么用一句话概括今天的股市?



问一问
从业认证

+微信
分享该文章
