3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 JoinQuant(聚宽)平台上进行高频交易策略开发时,针对获取最新 Tick 数据和历史 Tick 数据,分别使用以下两个不同的函数:
get_current_tick如果您需要获取当前时刻(回测或模拟交易中的当前逻辑时间)的最新一笔 Tick 快照数据,应使用 get_current_tick 函数。
get_current_tick(security, dt=None, df=False)
security: 标的代码(字符串或列表)。df: 是否返回 DataFrame 格式,默认为 False(返回 Tick 对象)。def handle_tick(context, tick):
# 获取平安银行当前的最新 tick 数据
current_tick = get_current_tick('000001.XSHE')
# 打印最新价
log.info(f"最新价: {current_tick.current}")
# 打印卖一价
log.info(f"卖一价: {current_tick.a1_p}")
get_ticks如果您需要获取过去一段时间内的 Tick 数据序列(例如过去10个 Tick 的价格走势,或者过去1分钟内的所有 Tick),应使用 get_ticks 函数。
get_ticks(security, end_dt, start_dt=None, count=None, fields=['time', 'current', ...], skip=True, df=False)
security: 标的代码。end_dt: 截止时间。start_dt / count: 开始时间或获取的数量(二选一)。fields: 需要获取的字段列表。df: 是否返回 DataFrame 格式。def handle_tick(context, tick):
# 获取平安银行截止到当前时间的过去 10 个 tick 数据
# context.current_dt 为当前策略逻辑时间
ticks = get_ticks('000001.XSHE', end_dt=context.current_dt, count=10, df=True)
# 计算过去10个tick的成交量总和
recent_vol = ticks['volume'].sum()
log.info(f"最近10个tick累计成交量: {recent_vol}")
| 需求 | 推荐函数 | 返回数据类型 | 典型用途 |
|---|---|---|---|
| 获取当前最新切片 | get_current_tick |
Tick 对象 (或 Dict) | 实时决策,获取当前盘口挂单情况 |
| 获取历史时间序列 | get_ticks |
NumPy 数组 或 DataFrame | 趋势分析,计算短周期高频指标 |
Q: get_current_tick 和 tick 参数(在 handle_tick 中)有什么区别?
A: 在 handle_tick(context, tick) 函数中,参数 tick 本身就是触发该次调用的那个标的的最新 Tick 对象。如果你只需要当前触发事件标的的数据,直接使用参数 tick 即可,效率最高。如果你需要在处理 A 标的的事件时,去查询 B 标的的最新情况,则需要使用 get_current_tick('B标的代码')。
Q: get_ticks 可以获取多久以前的数据?
A: 股票及场内基金支持 2010-01-01 至今的数据;期货支持 2010-01-01 至今的数据。具体取决于您购买或拥有的数据权限。
Q: 高频策略中 df=True 会影响性能吗?
A: 会。创建 Pandas DataFrame 相比于直接使用 Tick 对象或 NumPy 数组会有额外的性能开销。在极度追求速度的高频策略中,建议设置 df=False,直接操作对象或 NumPy 数组。
Q: 为什么 get_current_tick 返回 None?
A: 如果当天截至当前时刻该标的尚未产生任何成交或 Tick 数据(例如停牌或开盘集合竞价前),该函数可能会返回 None。在使用前建议进行非空判断。