get_current_data()的用法
请问“get_current_data()函数的具体用法是怎样的,为什么我使用后显示” name 'get_current_data' is not defined“,是不是哪个包没引用?感谢回复!
问题描述
解决方案
为什么会报错 name 'get_current_data' is not defined?
出现这个报错通常是因为运行环境不对。在 JoinQuant 聚宽平台中,get_current_data() 是回测环境/模拟交易专用 API,不支持在“投资研究”模块(Jupyter Notebook)中直接调用。
- 如果在研究环境中使用:系统会提示未定义,因为该函数依赖于回测引擎的上下文时间。如果需要在研究环境中获取当前行情,请使用
get_price()或get_current_tick()等支持研究环境的 API。 - 如果在回测/模拟环境中使用:该函数是内置的,不需要额外
import任何特殊的包(通常策略开头有import jqdata即可)。请检查是否拼写错误,或者是否在非交易时段的自定义函数中错误调用。
get_current_data() 的具体用法
get_current_data() 用于获取当前单位时间(当天/当前分钟)的涨跌停价、是否停牌、当天的开盘价等。回测时,通过其他 API 获取到的是前一个单位时间的数据,而 get_current_data() 可以获取当前时刻已知的数据。
1. 返回值说明
返回一个 dict(字典),其中 key 是股票代码,value 是拥有以下属性的对象:
last_price: 最新价(09:30之前获取返回昨日收盘价)high_limit: 涨停价low_limit: 跌停价paused: 是否停止或者暂停了交易(停牌、未上市或者退市后返回 True)is_st: 是否是 ST(包括ST, *ST),是则返回 True,否则返回 Falseday_open: 当天开盘价(当天的开盘价至少09:27分之后才可获取)name: 股票现在的名称(可用于判断是否快要退市等)industry_code: 股票现在所属行业代码
2. 代码示例
在回测策略的 handle_data 或定时运行函数中调用:
import jqdata
def initialize(context):
g.security = '000001.XSHE'
# 每天 10:00 运行
run_daily(market_open, time='10:00')
def market_open(context):
# 获取当前数据
current_data = get_current_data()
# 获取特定股票的数据对象
stock_data = current_data[g.security]
# 打印相关信息
print(f"股票: {g.security}")
print(f"最新价: {stock_data.last_price}")
print(f"涨停价: {stock_data.high_limit}")
print(f"跌停价: {stock_data.low_limit}")
print(f"是否停牌: {stock_data.paused}")
print(f"当天开盘价: {stock_data.day_open}")
# 实际应用:如果未停牌且未涨停,则买入
if not stock_data.paused and stock_data.last_price < stock_data.high_limit:
order_value(g.security, 10000)
3. 注意事项
- 按需获取加速:为了加速,返回的 dict 里面的数据是按需获取的。初始是空的,当你使用
current_data[security]时,该 security 的数据才会被获取。 - 不要跨日缓存:返回的结果只在当天有效,请不要存起来到隔天再用。
- 调用时机:该函数仅仅限在要获取数据的标的在交易时段时调用。