期货 K 线策略均线慢半拍:天勤 data_length 缓冲长度估算

期货 K 线策略均线慢半拍:天勤 data_length 缓冲长度估算 前言做国内期货量化很多人用 K 线算指标例如 5 分钟收盘价上算 60 根均线收盘价在均线上方做多、下方做空。天勤量化里K 线通过api.get_kline_serial(合约代码, 周期秒数, data_lengthN)订阅返回一张类似表格的数据每一行是一根 bar列里有open、high、low、close、datetime等。第三个参数data_length表示「最多向服务器要多少根 K 线缓存在内存里」——它不是均线周期而是历史缓冲有多长。若你算 60 周期均线却把data_length设成 60 甚至更小表格里可用于滚动计算的历史不够会出现大量nanNot a Number表示算不出来或者均线值「慢半拍」市场已经变了程序里的均线还在用很短的历史信号比你在行情软件里看到的迟钝。这不是策略公式错了而是天勤订阅参数配短了。下面说明怎么估data_length、和iloc[-2]触发如何配合。一、先弄清几个名词名称是什么和 data_length 的关系K 线 / bar固定周期内开高低收一根柱子一行数据duration_seconds周期秒数3005 分钟601 分钟get_kline_serial第二个参数data_length最多保留多少根 K 线第三个参数本文主角close收盘价列算均线用这一列datetime该 bar 的业务时间判断是否新 bariloc[-1]最后一行常是正在形成的 bar用它的 datetime 是否变化判断新 bariloc[-2]倒数第二行已收盘 bar信号常在此计算避免用未收盘数据nan非数字样本不足时均线为 nan不能交易tafunc.ma天勤自带均线函数对kl.close滚动计算is_changing(..., datetime)新 K 线到来时触发与 data_length 配合使用二、为何 data_length 太小会「慢半拍」均线 60 的含义用最近 60 根已收盘 K 线的收盘价求平均。若data_length70表里只有 70 行滚动窗口在边界处不稳定若算的是 ma100 却只给 70 行前面很多行是 nan-2位置的 ma 刚有值时实际参与平均的历史可能比 100 根短反应就滞后。表现同一公式你的程序信号比同花顺、快期客户端慢几根 K 线两台服务器data_length不同同一时刻信号不一致换月订阅新合约后问题更明显新合约本身历史也短需另做就绪判断。这与「新上市合约历史本来就短」不同那是市场没有足够 K 线本文是「有历史但你没向天勤要够」。三、估算公式与示例data_length 最长指标周期 缓冲 缓冲建议 20100或最长周期的 0.51 倍若同时用 ma60 和 ma120按 120 加缓冲估不要按 60。fromtqsdkimporttafunc MA_LONG120BUF80symbolSHFE.rb2510klapi.get_kline_serial(symbol,300,data_lengthMA_LONGBUF)ma60tafunc.ma(kl.close,60)whileTrue:api.wait_update()ifnotapi.is_changing(kl.iloc[-1],datetime):continueimportmathifmath.isnan(ma60.iloc[-2])ormath.isnan(kl.close.iloc[-2]):continue# 指标未就绪跳过# 在 iloc[-2] 上根据 ma60 与 close 产生信号get_kline_serial应在循环外调用一次data_length在启动时定好运行中改大通常要重启进程重订。四、内存与三环境一致data_length过大多合约多周期时占内存。在「够算指标」和「别无限大」之间折中例如 200500 对很多策略够用。回测TqBacktest、快期模拟TqKq、实盘TqAccount三环境应用相同的data_length和相同指标周期否则同一历史日期上信号会对不上。五、新合约还要单独判断即使data_length设得够大新挂牌合约服务器返回的行数可能仍少于你的均线周期会出现 nan。此时应跳过信号、打 warmup 日志等有效 bar 足够再交易而不是强行比较 nan 与价格大小。总结K 线 data_length 设小了天勤不会报错但会让指标暗地里滞后或长期 nan期货量化程序就像「慢半拍」。data_length 是向天勤要的 K 线根数缓冲不是均线周期估长度时以最长指标周期加缓冲为底线在iloc[-2]上检查非 nan 再交易。把该参数写进配置文件对照 K 线表实际行数排查对照配置与 K 线表行数即可分清是公式问题还是订阅历史根本没要够。FAQ1运行中能改大 data_length 吗一般启动时定好改订阅常需重启 Python 进程。2程序主要看 tickK 线只作过滤按过滤所用 K 线周期估 data_length 即可。3主连 KQ.m 会更长吗主连历史通常更长但仍要满足你的指标周期。4nan 时默认空仓还是跳过应 skip 并记录 warmup勿随意默认为 0 手或满仓。风险提示以上内容用于 K 线配置参考不构成投资建议。