3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 PTrade 量化交易平台中,实现 Tick 级别(3秒周期及以上)的高频交易与做市策略,主要依赖于 tick_data 事件回调函数与 order_tick 下单接口。
tick_data(context, data)data[security] 包含 tick(实时行情快照)、order(逐笔委托,需 L2)和 transcation(逐笔成交,需 L2)。order_tick(sid, amount, priceGear='1', limit_price=None)tick_data 模块中下达买卖委托。sid:标的代码(如 '600570.SS')。amount:交易数量,正数表示买入,负数表示卖出。priceGear:盘口档位,Level-1 支持 1~5(买档)与 -1~-5(卖档);Level-2 支持 1~10 与 -1~-10。limit_price:买卖限价。若传入此参数,则优先按指定价格下单。做市策略核心在于通过在买一档与卖一档同时挂单,获取买卖价差(Bid-Ask Spread)。
def initialize(context):
# 设置目标标的
g.security = '600570.SS'
set_universe(g.security)
# 仓位控制与标记
g.max_position = 1000 # 最大持仓限制
g.trade_unit = 100 # 单笔交易数量
def tick_data(context, data):
security = g.security
if security not in data:
return
tick_info = data[security].get('tick', None)
if tick_info is None or tick_info.empty:
return
# 1. 解析盘口买一与卖一档位价格
# bid_grp / offer_grp 格式: {档位: [价格, 委托量, 委托笔数]}
bid_grp = eval(tick_info['bid_grp'][0]) if isinstance(tick_info['bid_grp'][0], str) else tick_info['bid_grp'][0]
offer_grp = eval(tick_info['offer_grp'][0]) if isinstance(tick_info['offer_grp'][0], str) else tick_info['offer_grp'][0]
if 1 not in bid_grp or 1 not in offer_grp:
return
bid_p1 = bid_grp[1][0] # 买一价
offer_p1 = offer_grp[1][0] # 卖一价
# 2. 获取当前持仓
current_pos = get_position(security).amount
# 3. 双边做市逻辑
# 条件:买卖一价差大于最小变动单位(存在利差)
if offer_p1 - bid_p1 >= 0.01:
# 检查多头仓位上限
if current_pos < g.max_position:
# 以买一档挂单买入
order_tick(security, g.trade_unit, priceGear="1")
log.info(f"做市挂单买入: {security}, 档位: 买一, 价格: {bid_p1}")
# 检查空头/平仓仓位(有持仓时卖出)
if current_pos > 0:
# 以卖一档挂单卖出
order_tick(security, -g.trade_unit, priceGear="-1")
log.info(f"做市挂单卖出: {security}, 档位: 卖一, 价格: {offer_p1}")
def handle_data(context, data):
# tick策略主要逻辑在tick_data中处理
pass
get_open_orders() 与 cancel_order() 及时撤销未成交的挂单,防止追涨杀跌与不必要的深度成交。None。