量化能否实时获取全市场A股的涨停情况,比如有哪些涨停的代码或跌停的代码?
/
问题描述
解决方案
在 ptrade 量化平台中,是可以实时获取全市场 A 股的涨跌停情况的。你可以通过组合使用 get_Ashares() 和 check_limit() 这两个 API 来实现。
实现思路
- 获取全市场 A 股代码:使用
get_Ashares()函数获取当前交易日的所有 A 股代码列表。 - 查询涨跌停状态:将获取到的 A 股代码列表作为参数传入
check_limit(security)函数。该函数会返回一个字典,键为股票代码,值为涨跌停状态码。 - 筛选涨跌停代码:遍历返回的字典,根据状态码筛选出涨停或跌停的股票。
状态码说明
check_limit 返回的状态码含义如下:
2:触板涨停(已经是涨停价格,但还有卖盘)1:涨停0:既不涨停也不跌停-1:跌停-2:触板跌停(已经是跌停价格,但还有买盘)
Python 代码示例
以下是一个在 handle_data 中实时获取并打印全市场涨停和跌停股票代码的示例:
def initialize(context):
# 初始化时可以不设置特定的 universe,因为我们要获取全市场
pass
def handle_data(context, data):
# 1. 获取全市场 A 股代码列表
all_ashares = get_Ashares()
# 2. 检查这些股票的涨跌停状态
# 注意:全市场股票较多,调用可能需要一定时间
limit_status_dict = check_limit(all_ashares)
limit_up_list = [] # 涨停列表
limit_down_list = [] # 跌停列表
# 3. 筛选涨停和跌停的股票
if limit_status_dict:
for stock_code, status in limit_status_dict.items():
if status == 1 or status == 2:
limit_up_list.append(stock_code)
elif status == -1 or status == -2:
limit_down_list.append(stock_code)
log.info(f"当前全市场涨停股票数量: {len(limit_up_list)}")
log.info(f"当前全市场跌停股票数量: {len(limit_down_list)}")
# 如果需要查看具体代码,可以取消下面的注释
# log.info(f"涨停代码: {limit_up_list}")
# log.info(f"跌停代码: {limit_down_list}")
注意事项
- 性能考虑:全市场 A 股数量庞大(5000+),在
handle_data(如果是分钟级别或 tick 级别)中频繁调用check_limit传入全市场代码可能会消耗较多时间,影响策略执行效率。建议根据实际需求控制调用频率,例如使用run_interval定时查询,或者仅对特定的股票池(如某个板块或自选股)进行查询。 - 数据返回:如果查询的列表中有部分股票代码异常,
check_limit会将该异常代码的状态返回为0(既不涨停也不跌停)。