问题描述
解决方案
在PTrade中,获取股票在9:15到9:25集合竞价期间的撮合价格和成交量数据,主要使用 get_trend_data 函数。
该函数专门用于获取集中竞价期间的代码数据。
核心函数:get_trend_data
此接口可在研究、回测、交易模块中使用。
接口说明
get_trend_data(date=None, stocks=None, market=None)
- date: 日期(格式为YYYYmmdd),不传则默认为当前回测日期或实盘当日。
- stocks: 股票代码(字符串或列表)。
- market: 市场代码(如 'XSHG', 'XSHE'),注意
stocks和market不能同时使用。
返回数据字段
该函数返回一个字典,包含以下关键字段:
hq_px: 撮合价格(当前匹配价)。business_amount: 成交量(当前匹配量)。business_balance: 成交额。time_stamp: 时间戳。
策略代码示例
以下代码展示了如何在策略中获取指定股票的集合竞价数据。
def initialize(context):
# 设置股票池
g.security = '600570.SS'
set_universe(g.security)
# 在回测或交易中,通常在盘前或开盘时刻调用查看
# 这里设置在9:26查看刚刚结束的集合竞价结果,或者在9:15-9:25期间通过run_interval调用
run_daily(context, check_auction_data, time='9:26')
def check_auction_data(context):
# 获取指定股票的集合竞价数据
# 注意:不传date默认取当前日期
trend_data = get_trend_data(stocks=g.security)
if trend_data:
# 获取特定股票的数据
stock_info = trend_data.get(g.security)
if stock_info:
# 打印撮合价格 (hq_px)
match_price = stock_info.get('hq_px')
# 打印成交量 (business_amount)
match_volume = stock_info.get('business_amount')
# 打印时间戳
timestamp = stock_info.get('time_stamp')
log.info("股票: %s, 时间: %s" % (g.security, timestamp))
log.info("集合竞价撮合价格: %s" % match_price)
log.info("集合竞价成交量: %s" % match_volume)
else:
log.info("未获取到 %s 的竞价数据" % g.security)
def handle_data(context, data):
pass
注意事项
- 调用时间:
- 如果在 9:15 - 9:25 期间(实盘交易中通过
run_interval或run_daily)调用,返回的是当时的实时撮合快照。 - 如果在 9:25 之后 调用,通常返回的是集合竞价最终产生的开盘价和成交量。
- 如果在 9:15 - 9:25 期间(实盘交易中通过
- 参数互斥:
stocks参数和market参数不能同时传入,只能二选一。 - 返回值类型:返回的是一个字典(dict),Key是股票代码,Value是包含数据的字典。
- 实盘与回测:该函数在回测和交易环境中均可用,但在回测中,通常只能获取到最终的开盘价作为竞价结果,而在实盘交易中可以获取实时的撮合变动(依赖于行情推送)。
Q&A
Q: get_snapshot 函数能用来获取集合竞价数据吗?
A: 在实盘交易的 9:15-9:25 期间,get_snapshot 返回的 last_px 通常也是当前的虚拟撮合价格,business_amount 是虚拟成交量。但是,get_trend_data 是官方文档中明确定义为“获取集中竞价期间代码数据”的专用接口,语义更明确。需要注意的是,在 before_trading_start(通常在9:00-9:15运行)中调用 get_snapshot 大部分数据可能为0。
Q: 如果我想获取整个市场的竞价数据怎么办?
A: 可以使用 market 参数代替 stocks 参数。例如:get_trend_data(market=['XSHG', 'XSHE']) 可以获取沪深两市的竞价数据。
Q: 回测模式下能看到9:15到9:20的逐笔撮合变化吗?
A: 通常回测数据精度为分钟线(1m)或日线(1d)。除非您拥有Tick级别的回测数据源,否则在普通回测模式下,很难重现9:15-9:25期间每一秒的撮合变化,通常只能获取到9:25定格后的开盘数据。