@robert_kenway
1.因为比较少遇到涨停的情况,所以只有遇到了才能观察到代码可能存在的问题
2.短期动量我是关闭的,所以不知道您是打开还是关闭的?
3.我看到日志是"513350.XSHG 油气ETF: 动量得分: 7.4219 ❌”,所以被过滤没有进入第二步etf池
4.基于调仓逻辑,策略会执行卖出不在第二步池子中的etf。但是会被下面代码“跳过”,下面代码判断当前持仓ETF是否涨停,如果涨停则不会执行卖出和买入函数,直接跳过
if current_data[security].last_price >= current_data[security].high_limit:
log.info(f"{security} {security_name}: 当前涨停,跳过买入")
return False
5.再看下ai的解释
函数目的: smart_order_target_value 这个函数的功能是智能地将某个证券(security)的持仓市值调整到目标值(target_value)。这意味着它既可能买入(如果当前持仓价值低于目标),也可能卖出(如果当前持仓价值高于目标)。
判断逻辑: 这两个 if 语句是函数开头的通用安全检查。无论你原本是想买入还是卖出,程序都会先执行这些检查。
执行顺序: 程序会依次检查:
是否停牌?(跳过所有交易)
是否涨停?(如果涨停,执行 return False,函数直接结束,任何买入或卖出操作都不会继续执行)
是否跌停?(如果跌停,同样执行 return False)
6.所以代码是没有问题,问题是出在备注的日志这句话上“当前涨停,跳过买入”应该修改为“当前涨停,跳过卖出和买入”
2026-03-02