3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
出现这个报错的最常见原因是:您传入的 self.lastbi.startday 变量在运行到这一行时,它的值是 None。
在 JoinQuant 的 API 中,get_trade_days 的函数签名是:
get_trade_days(start_date=None, end_date=None, count=None)
API 内部会检查参数,要求 start_date 和 count 这两个参数必须且只能提供其中一个(即不能同时为 None,也不能同时都有值)。
虽然您的代码写了 start_date=self.lastbi.startday,但如果 self.lastbi.startday 尚未被正确赋值(即值为 None),那么实际传给函数的参数就变成了 start_date=None。此时 count 默认也是 None,API 接收到两个 None,就会抛出 ParamsError("start_date 参数与 count 参数必须输入一个") 的异常。
1. 打印变量进行排查
在调用 get_trade_days 之前,先打印一下该变量的值和类型,确认它是否为空:
print("当前 startday 的值为:", self.lastbi.startday)
print("当前 startday 的类型为:", type(self.lastbi.startday))
# 如果是 None,说明前面的逻辑没有正确给它赋值
if self.lastbi.startday is None:
print("警告:startday 为空,请检查 self.lastbi 的初始化逻辑!")
else:
trade_days = get_trade_days(start_date=self.lastbi.startday)
2. 检查变量赋值逻辑
回溯您的代码,检查 self.lastbi 对象的 startday 属性是在哪里赋值的。可能的情况包括:
None。3. 增加容错处理
为了防止策略因为这个错误直接中断,可以增加一个默认值或容错判断:
# 假设如果没有 startday,默认取过去 10 个交易日
if self.lastbi.startday:
trade_days = get_trade_days(start_date=self.lastbi.startday)
else:
# 容错处理:使用 count 参数代替
trade_days = get_trade_days(count=10)
总结: 报错并不是因为您没有写 start_date= 这个关键字,而是因为等号右边的实际值为空 (None)。请重点排查 self.lastbi.startday 的赋值逻辑。