3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在聚宽(JoinQuant)量化回测与模拟交易中,get_current_data() 是一个非常实用的专用 API,用于获取当前单位时间(当天或当前分钟)的实时数据,如涨跌停价、是否停牌、ST 状态以及所属行业等信息。
通过调用 get_current_data() 返回的是一个字典(dict),Key 为股票代码,Value 为包含以下属性的对象:
is_st: 布尔值(True/False),判断股票当天是否是 ST 或 *ST 股票。industry_code: 字符串,返回股票当前所属的行业代码。paused: 布尔值(True/False),判断股票当天是否停牌。name: 股票当天的名称。day_open: 当天开盘价(09:27 之后可获取)。high_limit / low_limit: 当天涨停价与跌停价。注意:
get_current_data()仅限在标的处于交易时段或策略运行函数(如handle_data、run_daily指定的函数等)中调用,且返回结果仅在当天有效,切勿跨日缓存使用。
以下示例演示如何在每日开盘时筛选股票池,过滤掉 ST 股票并打印其行业归属:
import jqdata
def initialize(context):
# 开启动态复权(真实价格模式)
set_option('use_real_price', True)
# 设置基准
set_benchmark('000300.XSHG')
# 每天 09:30 运行选股逻辑
run_daily(check_stocks, time='09:30')
def check_stocks(context):
# 定义要检查的股票池
security_list = ['000001.XSHE', '000002.XSHE', '600000.XSHG']
# 获取当前时间实时数据字典
current_data = get_current_data()
normal_stocks = []
for stock in security_list:
# 判断是否为 ST 或 *ST 股票
if current_data[stock].is_st:
log.info("股票 %s (%s) 当前处于 ST 状态,已过滤。" % (stock, current_data[stock].name))
continue
# 判断是否停牌
if current_data[stock].paused:
log.info("股票 %s 当前处于停牌状态,已过滤。" % stock)
continue
# 获取所属行业代码
industry = current_data[stock].industry_code
log.info("股票 %s 正常交易,所属行业代码: %s" % (stock, industry))
normal_stocks.append(stock)
log.info("今日可选正常股票列表: %s" % normal_stocks)
get_current_data() 返回的 dict 初始为空,只有在访问 current_data[security] 时才会实时加载该标的的数据,这种设计大大提升了运行效率。get_current_data() 能模拟真实交易时段获取当前已知状态(如涨跌停、ST 标记、开盘价),有效规避未来函数。