3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 JoinQuant(聚宽)量化交易平台中,传统的行情获取 API(如 history 或 attribute_history)通常获取的是前一个单位时间(天或分钟)的历史数据。为了在盘中实时获取当前最新价、涨停价、跌停价、是否停牌等信息并进行风控拦截,我们需要使用 get_current_data() API。
get_current_data() 用于获取当前单位时间(当天/当前分钟)的快照信息。
调用 get_current_data() 会返回一个字典(dict),key 为标的代码,value 为包含以下常用属性的对象:
high_limit:当日涨停价(float)low_limit:当日跌停价(float)paused:是否停牌或暂停交易(bool),若停牌、未上市或已退市返回 Truelast_price:最新价格(09:30前返回昨日收盘价)day_open:当日开盘价(至少09:27后可获取)is_st:是否为 ST 或 *ST 股票(bool)name:股票当前名称注意事项:
- 返回的数据仅在当前交易日/当前时间点有效,切勿跨日缓存。
- 数据采用按需加载机制,调用
current_data[security]时才会实时加载该标的数据。
以下示例展示了如何在 handle_data 或定时任务中,通过 get_current_data() 进行买卖前的安全检查:避免对停牌股或即将封涨停/跌停的股票盲目下单。
import jqdata
def initialize(context):
g.security = '000001.XSHE'
set_benchmark('000300.XSHG')
set_option('use_real_price', True)
# 设定定时运行任务
run_daily(market_open, time='every_bar')
def market_open(context):
security = g.security
# 获取当前快照数据
current_data = get_current_data()
stock_info = current_data[security]
# 1. 检查是否停牌
if stock_info.paused:
log.info("标的 %s 当前处于停牌状态,跳过交易" % security)
return
# 2. 获取当前价、涨停价、跌停价
last_price = stock_info.last_price
high_limit = stock_info.high_limit
low_limit = stock_info.low_limit
log.info("标的: %s, 当前价: %.2f, 涨停价: %.2f, 跌停价: %.2f" %
(security, last_price, high_limit, low_limit))
# 3. 风控拦截逻辑示例:不追涨停,跌停不上买单
if last_price >= high_limit:
log.warn("标的 %s 已触及涨停,放弃买入" % security)
return
elif last_price <= low_limit:
log.warn("标的 %s 已触及跌停,放弃买入" % security)
return
# 执行正常下单逻辑
cash = context.portfolio.available_cash
if cash > 0 and security not in context.portfolio.positions:
order_value(security, cash)
log.info("成功下单买入 %s" % security)
stock_info.paused == True 的标的,防止废单。last_price <= low_limit),跌停时市价卖单会被系统自动撤销。stock_info.is_st 或检查 stock_info.name 中是否包含 ST,及时剔除高风险标的。