3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 ptrade 量化交易平台中,进行 Tick 级别交易 时,可以通过 tick_data(context, data) 事件来处理每 3 秒一次的盘中 Tick 数据。要获取买一、买二等盘口档位价格,需要解析 data 参数中对应标的的 tick 数据中的 bid_grp(买档位)字段。
在 tick_data 中,data[security]['tick']['bid_grp'] 返回的是一个字典(或需要使用 eval() 解析的字符串字典),其结构如下:
[委托价格, 委托数量, 委托笔数]。因此:
bid_grp[1][0]bid_grp[2][0]注意:在实际交易环境中,
data[security]['tick']['bid_grp']返回的可能是一个字符串形式的字典,建议使用eval()进行安全转换,或者直接作为字典读取(取决于券商柜台的具体行情推送格式)。
以下是一个在 tick_data 中获取恒生电子(600570.SS)买一价和买二价,并根据价格进行限价下单的完整策略示例:
def initialize(context):
# 设置我们要操作的股票池
g.security = '600570.SS'
set_universe(g.security)
def tick_data(context, data):
security = g.security
# 安全检查:确保当前标的有 tick 数据推送
if security not in data or 'tick' not in data[security]:
return
try:
# 获取买档数据
bid_grp_data = data[security]['tick']['bid_grp']
# 如果返回的是字符串,则进行解析
if isinstance(bid_grp_data, str):
bid_grp = eval(bid_grp_data)
else:
bid_grp = bid_grp_data
# 提取买一价与买二价
# bid_grp[1] 结构为 [买一价, 买一量, 买一笔数]
buy_1_price = bid_grp[1][0] # 买一价
buy_2_price = bid_grp[2][0] # 买二价
log.info(f"当前时间: {data[security]['tick']['hsTimeStamp']}")
log.info(f"【买一价】: {buy_1_price}, 【买二价】: {buy_2_price}")
# 策略逻辑:如果买一价低于 38.5 元,则按买一价下单买入 100 股
if 0 < buy_1_price < 38.5:
# 使用 order_tick 接口进行 tick 级别快速报单
# priceGear='1' 表示按买一档价格下单,也可以直接指定 limit_price
order_tick(security, 100, priceGear='1')
log.info(f"触发买入:以买一价 {buy_1_price} 委托 100 股")
except Exception as e:
log.error(f"解析盘口数据出现异常: {e}")
def handle_data(context, data):
# tick 级别策略中,handle_data 可保持为空,主要逻辑在 tick_data 中执行
pass
tick_data 函数在交易时间内(9:30 -- 14:59)每隔 3 秒执行一次。tick_data 中,推荐使用专用的 order_tick(sid, amount, priceGear, limit_price) 接口进行快速报单,该接口支持直接指定盘口档位(如 '1' 代表买一档,'-1' 代表卖一档)。0 或 None,在代码中务必加入 try...except 异常处理,避免策略因空值或解析失败而中断。