3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 JoinQuant(聚宽)平台上获取指标数据(如换手率 HSL 或其他因子数据)时返回 NaN 是正常现象。同时,模拟实盘环境中确实存在特定的数据延时机制。以下是详细的解析:
NaN 的常见原因获取数据返回 NaN(Not a Number,即数据缺失)通常由以下几种情况引起:
NaN。NaN。NaN。退市后的股票也会返回空值。NaN。模拟实盘环境与回测环境在数据获取上存在差异,确实存在延时:
datetime.datetime.now()。get_factor_values 或查询某些日频指标,你只能获取到昨天(或更早)的数据。当天的日线级别指标必须等当天收盘并经过系统计算后(通常是第二天凌晨)才能获取。为了保证策略的健壮性,建议在代码中主动处理 NaN 值:
1. 数据清洗(剔除或填充 NaN)
import pandas as pd
def handle_data(context, data):
# 获取因子数据
factor_data = get_factor_values(securities=context.universe, factors=['VOL5'], start_date=context.previous_date, end_date=context.previous_date)
df = factor_data['VOL5']
# 方法一:直接剔除包含 NaN 的股票
df_clean = df.dropna(axis=1)
# 方法二:使用行业均值或特定值填充 NaN(聚宽提供了 neutralize 和 winsorize 等处理函数)
# df_filled = df.fillna(0)
2. 开启避免未来数据模式
在 initialize 中加入 set_option("avoid_future_data", True),这有助于在回测阶段就暴露因为时间错位导致的数据获取问题。
总结:返回 NaN 是量化数据处理中的常态,主要源于数据计算的 T+1 属性或标的自身的特殊状态。在模拟实盘中,请务必基于“盘中只能获取昨日日线/因子数据”的逻辑来编写策略。