3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 QMT 平台中,实盘或模拟运行时(非回测模式),handlebar 函数默认会从当前主图或默认品种加载的第一根 K 线开始逐根运行。对于 1 分钟等小周期,如果本地历史数据较多,确实会导致启动时耗时极长。
虽然代码中的 ContextInfo.start 和 ContextInfo.end 只能用于回测模式,但你可以通过 QMT 策略编辑器自带的**“快速计算”**参数来完美解决实盘运行时的起始时间/计算范围问题。
你可以通过限制策略启动时加载的 K 线数量,来间接设定起始时间。具体操作步骤如下:
0)。
0:表示模型运行会从当前品种的第一根 K 线(即你本地下载的最早数据,如 1 月份)开始计算。n(如 1000):表示模型启动时,只从当前最新 K 线往前推 n 根 K 线开始计算。举个例子:
如果你只需要策略在启动时加载最近几天的 1 分钟 K 线来初始化指标(比如计算 60 均线只需要 60 根),你可以将【快速计算】设置为 500。这样策略点击运行后,只会瞬间遍历最近的 500 根 K 线,然后立刻进入最新行情的 tick 驱动状态,耗时不到 1 秒。
关于你代码中的跳过逻辑:
def handlebar(C):
if not C.is_last_bar() and not C.do_back_test:
return
这段代码确实能跳过历史 K 线的交易逻辑,但 QMT 底层仍然在逐根遍历并调用 handlebar,所以当 K 线数量达到几万根时,依然会产生显著的耗时。使用“快速计算”是从底层直接截断了输入的数据量,是最高效的做法。
主图运行时的限制:
如果你是在“行情”界面的主图上直接右键运行策略,策略的计算范围也会受到当前主图 K 线显示数量的影响。你可以通过缩小主图的 K 线显示范围(如按 ↓ 键缩小),然后再运行策略,也能起到一定的加速作用。但最规范的做法依然是在策略基本信息中设置“快速计算”。