问题描述
/
解决方案
在ptrade量化平台中,获取集合竞价行情数据主要有两种方式:使用专门的 get_trend_data 接口获取集中竞价期间的数据,或者在盘前特定时间点使用 get_snapshot 获取行情快照。
1. 使用 get_trend_data 获取集中竞价数据
get_trend_data 接口专门用于获取集中竞价期间的代码数据。该接口在研究、回测、交易模块均可用。
接口说明:
get_trend_data(date=None, stocks=None, market=None)
参数:
date:日期(格式为:YYYYmmdd)(str)stocks:股票代码(str/list[str])market:市场(str/list[str])
注意:不传参数时,默认返回当日XSHE,XSHG市场所有代码的数据;stocks和market不能同时入参。
返回数据包含:
time_stamp: 时间戳(int)hq_px: 价格(float)wavg_px: 加权价格(float)business_amount: 总成交量(int)business_balance: 总成交额(int)amount: 持仓量(int)
示例代码:
def initialize(context):
g.security = '600570.SS'
set_universe(g.security)
def handle_data(context, data):
# 获取单只股票的集中竞价数据
trend_data = get_trend_data(stocks='600570.SS')
log.info(trend_data)
2. 使用 get_snapshot 获取集合竞价快照
在交易模块中,你可以通过定时任务(如 run_daily)在集合竞价期间(例如 9:23)调用 get_snapshot 接口,获取当时的最新价、涨跌停价等快照信息。
集合竞价追涨停策略示例:
以下是一个利用集合竞价快照数据进行追涨停的策略示例:
def initialize(context):
# 初始化此策略
# 设置我们要操作的股票池, 这里我们只操作一支股票
g.security = '600570.SS'
set_universe(g.security)
# 每天9:23分运行集合竞价处理函数
run_daily(context, aggregate_auction_func, time='9:23')
def aggregate_auction_func(context):
stock = g.security
# 获取最新行情快照
snapshot = get_snapshot(stock)
if snapshot and stock in snapshot:
# 最新价
price = snapshot[stock].get('last_px', 0)
# 涨停价
up_limit = snapshot[stock].get('up_px', 0)
# 如果最新价不小于涨停价,买入
if float(price) >= float(up_limit) and float(up_limit) > 0:
order(g.security, 100, limit_price=up_limit)
log.info(f"集合竞价触发涨停买入: {stock}, 价格: {up_limit}")
def handle_data(context, data):
pass
总结
- 如果你需要分析集中竞价的量价细节(如加权价格、总成交量等),推荐使用
get_trend_data。 - 如果你需要在盘前集合竞价阶段(如9:25前)根据最新撮合价格进行交易决策(如下单追涨停),推荐结合
run_daily和get_snapshot来实现。