我比较关注15-19年的情况,目前看实际上达不到那么夸张的数值,当然还是赚的。
但是小市值现在人太多了,实际上很难讲。
用gemini分析一下:
4. 是否过度拟合?(Overfitting Analysis)
结论:高度疑似过度拟合。
以下细节暴露了拟合痕迹:
神奇的参数:
g.stock_num = 6:为什么是6只?通常是回测出来这个数字收益最高。
run_weekly(weekly_adjustment, 2, '10:30'):周二 10:30 是一个非常典型的拟合时间点。大多数策略选周一调仓,作者选周二往往是因为回测发现周一容易跌,或者周一信号假突破多。这种特定的时间点在未来未必有效。
特定的过滤窗口:
days=3*250(3年)的历史涨停统计窗口。
stoploss_market = 0.93(大盘止损线)。
这些参数如果没有经过参数敏感性测试(Parameter Sensitivity Analysis),很可能是为了凑高回测收益率而“调”出来的。
复杂的“启动点”定义:
get_start_point 函数中的逻辑非常具体(找close< open的那一根K线)。这种形态学特征在量化中很难保持长期稳定的Alpha,更像是对过去某几年妖股形态的“素描”。
5. 代码中的潜在 Bug 或 隐患
字符串比较使用 is:
代码中多次出现 if g.reason_to_sell is 'limitup':。在 Python 中,字符串比较建议使用 ==。虽然在某些解释器版本中 is 对短字符串有效,但这非常不规范,可能导致逻辑失效。
行业分散逻辑脆弱:
get_stock_industry 函数中,只要选满10个不同行业的就break。但主逻辑是选6只股。这个函数返回的是备选列表。实际上最后的 final_list[:g.stock_num*2] 可能会再次破坏行业分散度,或者导致选出来的并不是Alpha最强的(为了强行分散而选了排名靠后的股票)。
单位混淆风险:
代码注释写 valuation.market_cap.between(10,100) 单位是亿元。聚宽数据确实是亿元。这意味着它过滤的是 10亿-100亿 的票。目前A股微盘股(< 20亿)表现最强,如果策略想做微盘,下限设为10亿可能略高;如果想做中小盘,上限100亿又太低。这个区间属于“小盘股”,波动极大。
2026-01-10