get_tick_serial 用法:Tick 订阅降频与 K 线对齐

前言

做日内或高频一点的期货策略时,我会用天勤量化的 get_tick_serial 盯成交变化;Tick 推送量比 K 线大得多,若每一帧都跑完整信号逻辑,CPU 和日志都会吃不消。下面写订阅方式、与 K 线混用时的时钟对齐,以及我常用的降频办法。

一、订阅与读取时机

from tqsdk import TqApi, TqAuth, TqSim

api = TqApi(TqSim(), auth=TqAuth("账户", "密码"))
ticks = api.get_tick_serial("SHFE.rb2510")
kline = api.get_kline_serial("SHFE.rb2510", 60)

while True:
    api.wait_update()
    if api.is_changing(ticks.iloc[-1], "datetime"):
        last_price = ticks.iloc[-1]["last_price"]
        # 仅在 tick 时间戳变化时处理

get_quote 一样:wait_update,再读 iloc[-1]。Tick 序列是 DataFrame,最后一行对应当前最新 tick。

二、Tick 与 K 线不要混用时钟

数据源适合
get_tick_serial盘口变化、成交驱动、细粒度止损
get_kline_serial均线、突破、bar 收盘信号

若信号在 K 线收盘产生、执行用 tick 价格,要明确两者 datetime 可能不一致。建议信号层固定用一种序列,执行层再用 get_quote 读对手价。

三、降频:只关心成交变化时

全量 tick 更新时,可在逻辑层加过滤:

last_dt = None
while True:
    api.wait_update()
    if not api.is_changing(ticks.iloc[-1], "datetime"):
        continue
    dt = ticks.iloc[-1]["datetime"]
    if dt == last_dt:
        continue
    last_dt = dt
    # 每个新 tick 时间戳只处理一次

若只关心价格跳变,可再比较 last_price 与上一帧差值,小于 1 个 tick 则跳过。

四、数据长度与内存

data_length 控制保留 tick 条数。日内策略可设数千;多合约同时订阅 tick 时,条数乘合约数,内存与 CPU 压力会明显上升。非必要不订 tick,分钟策略用 K 线即可。

五、与回测、模拟的差异

回测 tick 粒度回放比 K 线慢;模拟盘 tick 推送节奏接近实盘。同一策略在 K 线回测通过,仍应在 tick 或模拟环境验证止损类逻辑。

总结

get_tick_serial 适合要跟随成交节奏的逻辑,但必须配合 is_changing 和去重,避免在每个微小更新上重算指标。与 K 线并用时,分清信号时钟与执行时钟,能减少大量“信号有了、价格却不对”的排查时间。

FAQ

1)tick 与 quote 区别?

tick 是序列历史+最新;quote 是当前行情快照。日内微观用 tick,一般下单参考可用 quote。

2)订阅 tick 后还能用 TargetPosTask 吗?

可以,同一 TqApi 内共用 wait_update

3)夜盘 tick 量很大怎么办?

加强过滤,或仅在关键时段订阅 tick。

4)多合约 tick 如何管理?

每合约一条 get_tick_serial,循环内分别 is_changing

5)tick 序列长度不足?

增大 data_length;冷启动阶段注意 len(ticks) 再算指标。

风险提示

本文用于期货量化技术实践讨论,不构成投资建议。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值