问题描述
get_current_data()函数在研究环境中使用不了嘛?
解决方案
直接回答
是的,get_current_data() 函数无法在 JoinQuant(聚宽)的投资研究环境中使用。根据聚宽官方 API 文档,get_current_data() 属于回测环境/模拟专用 API。
为什么研究环境不能使用?
get_current_data() 的设计初衷是为了在回测或模拟交易的运行过程中(如 handle_data 或定时运行函数中),获取**当前逻辑时间(当天/当前分钟)**的动态数据,例如:
- 最新价 (
last_price) - 涨停价 (
high_limit) - 跌停价 (
low_limit) - 是否停牌 (
paused) - 当天开盘价 (
day_open)
它强依赖于回测引擎的上下文时间(context.current_dt),并且仅仅限在要获取数据的标的在交易时段时调用。由于研究环境没有回测引擎的实时时间推进机制,因此无法调用此函数。
研究环境中的替代方案
如果您在研究环境中需要获取类似的数据(如最新价、涨跌停价、停牌状态等),可以使用以下替代 API:
1. 获取最新价格或历史价格
可以使用 get_price() 或 get_bars() 函数。这两个函数在研究环境中完全可用。
# 获取平安银行最近一个交易日的收盘价
df = get_price('000001.XSHE', count=1, end_date='2023-10-10', frequency='daily', fields=['close'])
print(df['close'][-1])
2. 获取涨跌停价及停牌状态
get_price() 函数的 fields 参数支持传入 'high_limit'(涨停价)、'low_limit'(跌停价)和 'paused'(是否停牌,1表示停牌,0表示正常交易)。
# 获取平安银行在指定日期的涨跌停价和停牌状态
df = get_price('000001.XSHE', count=1, end_date='2023-10-10', frequency='daily',
fields=['high_limit', 'low_limit', 'paused'])
print("涨停价:", df['high_limit'][-1])
print("跌停价:", df['low_limit'][-1])
print("是否停牌:", df['paused'][-1] == 1)
3. 获取股票名称、是否ST等基本信息
如果您需要获取股票现在的名称或判断是否是 ST 股票,可以使用 get_security_info() 或 get_extras()。
# 获取股票基本信息
info = get_security_info('000001.XSHE')
print("股票名称:", info.display_name)
# 判断是否是 ST 股票
st_df = get_extras('is_st', ['000001.XSHE'], start_date='2023-10-10', end_date='2023-10-10')
print("是否ST:", st_df.iloc[-1]['000001.XSHE'])
总结:在编写策略代码时,get_current_data() 是获取盘中即时状态的利器;但在进行数据分析和策略研究时,请务必切换为 get_price、get_bars 等历史数据获取函数。