🚀 AI 一键生成 ptrade 策略代码
立即体验
👉 AI 生成代码 👈

PTrade量化平台tick_data与handle_data函数中data参数有什么不同?

ptrade | 发布时间: 2026/6/2
以下内容由 EasyQuant 生成。

问题描述

PTrade中tick_data函数和handle_data函数中的data参数有什么不同?

在tick_data函数中使用data时报错,发现data和handle_data中的不一样

解决方案

在PTrade量化交易平台中,tick_data 函数和 handle_data 函数虽然都接收 data 作为参数,但这两个 data 参数的数据结构和包含的信息完全不同。混淆使用会导致策略报错。

以下是两者的详细区别:

1. handle_data 中的 data 参数

handle_data 主要用于处理日线或分钟级别的盘中逻辑。

  • 数据结构:一个字典(dict),key 是标的代码,value 是当时的 SecurityUnitData 对象。
  • 包含内容:存放当前周期(日线策略则是当天,分钟策略则是这一分钟)的 K 线数据,如开盘价、收盘价、最高价、最低价、成交量等。
  • 调用方式示例
    def handle_data(context, data):
        security = '600570.SS'
        # 获取当前周期的收盘价
        current_close = data[security]['close']
        # 获取当前周期的成交量
        current_volume = data[security]['volume']
    

2. tick_data 中的 data 参数

tick_data 专门用于处理 tick 级别(通常每3秒执行一次)的极高频交易逻辑。

  • 数据结构:一个嵌套字典(dict)。外层 key 为标的代码,内层 value 也是一个字典,包含三个固定的 key:orderticktranscation
  • 包含内容
    • order:最近一条逐笔委托数据(DataFrame 格式或 None)。
    • tick:当前 tick 的快照数据(DataFrame 格式),包含买卖十档盘口、最新价、成交量等。
    • transcation:最近一条逐笔成交数据(DataFrame 格式或 None)。
  • 数据结构示意
    {'股票代码':
        {
            'order': DataFrame/None,       # 逐笔委托
            'tick': DataFrame,             # 当前tick数据
            'transcation': DataFrame/None, # 逐笔成交
        }
    }
    
  • 调用方式示例
    def tick_data(context, data):
        security = '600570.SS'
        
        # 1. 获取 tick 数据中的买一价
        # 注意:bid_grp 是一个字典,0代表第一条记录,1代表买一档,0代表价格
        current_bid1_price = eval(data[security]['tick']['bid_grp'][0])[1][0]
        
        # 2. 获取 tick 数据中的最新成交价
        last_px = data[security]['tick']['last_px'][0]
        
        # 3. 获取最近一笔逐笔成交的成交量
        transcation = data[security]["transcation"]
        if transcation is not None:
            business_amount = list(transcation["business_amount"])
            if len(business_amount) > 0:
                print("最近一笔成交量:", business_amount[0])
    

总结与注意事项

  1. 不要混用:在 tick_data 中不能使用 data[security]['close'] 这种方式获取数据,必须通过 data[security]['tick']['字段名'] 的方式解析 DataFrame。
  2. Level2 行情依赖tick_datadata 中包含的逐笔委托(order)和逐笔成交(transcation)数据,必须开通 Level2 行情才会有数据推送,否则对应字段会返回 None。在编写策略时,务必做好 None 值的判断和异常处理。