3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
您好!在使用 JoinQuant 平台的 run_weekly 函数进行按周调仓时,归因分析中显示的最短持仓天数小于 5 天(如 1.75 天),确实是非常常见的现象。您的猜测非常准确,节假日的影响是其中最主要的原因之一,但除此之外还有其他几种可能的情况。以下为您详细解析:
run_weekly(func, weekday=1) 的逻辑是:在每周的第一个交易日执行调仓。
归因分析统计的是整个回测期间的所有持仓记录。假设您的回测结束日期是某周的周二,而您的策略在这一周的周一(即前一天)刚刚执行了 run_weekly 调仓买入了股票。当回测在周二结束时,系统会强制结算所有持仓,这笔交易的实际持仓天数就只有 1 天。这会直接拉低统计中的“最短持仓天数”。
请检查您的策略代码中,除了 run_weekly 绑定的 weekly_adjustment 函数外,是否还存在其他可能触发卖出的逻辑:
handle_data 或 run_daily 中写了止损止盈代码,股票可能在买入后的第二天或第三天触发条件被卖出。在真实价格或考虑滑点、成交量限制的回测中,如果某只股票在周一调仓时因为涨停或成交量不足没有完全买入,而是在周二、周三才部分成交(限价单挂单成交),然后在下周一卖出。那么这部分在周三才成交的仓位,其实际持仓天数也会少于 5 天。
归因分析中的“最短持仓天数”是一个极值统计,只要在整个回测历史中发生过一次上述情况(如遇到一次特殊的节假日安排,或回测刚好在调仓后一两天结束),这个数值就会小于 5。这是完全符合 A 股日历规则和回测引擎逻辑的,不需要担心策略代码本身存在基础性错误。