3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在PTrade量化交易平台中,tick_data 函数和 handle_data 函数虽然都接收 data 作为参数,但这两个 data 参数的数据结构和包含的信息完全不同。混淆使用会导致策略报错。
以下是两者的详细区别:
handle_data 中的 data 参数handle_data 主要用于处理日线或分钟级别的盘中逻辑。
key 是标的代码,value 是当时的 SecurityUnitData 对象。def handle_data(context, data):
security = '600570.SS'
# 获取当前周期的收盘价
current_close = data[security]['close']
# 获取当前周期的成交量
current_volume = data[security]['volume']
tick_data 中的 data 参数tick_data 专门用于处理 tick 级别(通常每3秒执行一次)的极高频交易逻辑。
key 为标的代码,内层 value 也是一个字典,包含三个固定的 key:order、tick、transcation。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])
tick_data 中不能使用 data[security]['close'] 这种方式获取数据,必须通过 data[security]['tick']['字段名'] 的方式解析 DataFrame。tick_data 的 data 中包含的逐笔委托(order)和逐笔成交(transcation)数据,必须开通 Level2 行情才会有数据推送,否则对应字段会返回 None。在编写策略时,务必做好 None 值的判断和异常处理。