问题描述
解决方案
在PTrade中,获取股票当天的分时成交明细(Tick数据)并分辨买卖方向,主要使用 get_tick_direction 接口。
该接口可以获取当日的分时成交行情数据,其中包含成交方向字段。
核心接口说明
- 接口名称:
get_tick_direction(symbols=None, query_date=0, start_pos=0, search_direction=1, data_count=50) - 关键返回值字段:
business_direction- 0: 卖盘(内盘,主动卖出)
- 1: 买盘(外盘,主动买入)
- 2: 平盘
- 前提条件: 该数据通常需要开通 Level-2 行情权限才能获取到有效数据,否则可能返回空或无数据。
策略代码示例
以下是一个完整的策略示例,展示如何在盘中获取指定股票的分时成交明细,并打印出每一笔的成交时间、价格、数量和买卖方向。
def initialize(context):
# 设置要获取数据的标的,例如恒生电子
g.security = '600570.SS'
set_universe(g.security)
def handle_data(context, data):
# 仅在交易模式下运行,回测模式下该函数可能无法获取L2级别的分时数据
if not is_trade():
log.info("get_tick_direction 接口通常需要实盘L2环境支持")
return
# 获取分时成交数据
# data_count=10 表示获取最近的10条记录
tick_details = get_tick_direction(symbols=g.security, data_count=10)
if tick_details and g.security in tick_details:
details = tick_details[g.security]
# 获取各个字段的列表
timestamps = details['time_stamp'] # 时间戳
prices = details['hq_px'] # 成交价格
volumes = details['business_amount'] # 成交数量
directions = details['business_direction'] # 成交方向
# 遍历打印最近的成交明细
# 注意:返回的数据通常是numpy array或list,需要根据索引对应
count = len(timestamps)
for i in range(count):
ts = timestamps[i]
price = prices[i]
vol = volumes[i]
direction_code = directions[i]
# 解析买卖方向
dir_str = "平盘"
if direction_code == 0:
dir_str = "卖盘(内盘)"
elif direction_code == 1:
dir_str = "买盘(外盘)"
log.info("时间: %s, 价格: %s, 数量: %s, 方向: %s" % (ts, price, vol, dir_str))
else:
log.info("未获取到分时成交数据,请检查是否开通L2权限或当前是否为交易时间。")
注意事项
- 权限要求:
get_tick_direction属于高频行情接口,通常依赖券商提供的 Level-2 行情服务。如果是普通仿真环境或未开通 L2 的实盘账户,该接口可能返回None或空数据。 - 数据类型:返回的数据结构是
OrderedDict,内部字段通常是numpy数组或列表。 - 逐笔成交 vs 分时成交:
get_tick_direction获取的是分时成交(Tick Direction),通常是快照切片数据。- 如果你需要更精细的逐笔成交(每一笔撮合的流水),可以使用
get_individual_transaction接口(同样需要 L2 权限),其返回字段business_direction含义相同(0-卖,1-买)。
Q&A
Q: 回测模式下能使用 get_tick_direction 吗?
A: 通常不能。PTrade 的回测环境主要基于分钟线或日线数据。Tick 级别的数据(分时成交、逐笔成交)一般仅在**交易(实盘/仿真)**模块的盘中时间段(9:30-15:00)可用。
Q: business_direction 返回 2 (平盘) 是什么意思?
A: 平盘通常指成交价格与前一笔成交价格相同,或者在某些特定撮合机制下(如集合竞价阶段产生的成交)无法明确界定为主动买入或主动卖出的情况。
Q: 如何获取更历史的分时成交数据?
A: get_tick_direction 主要用于获取当日的实时或近期数据。如果需要历史日期的 Tick 数据,通常需要专门的历史高频数据源,PTrade 标准策略环境一般不提供历史 Tick 数据的回溯查询。