我的选股器劝我别炒股了
周末无聊,加上上周A股实在没什么好操作的,我就想着——要不写个选股器玩玩?
反正周末也闲着,不如让数据告诉我该买什么。
3天后,选股器写完了。它跑遍了A股过去10年的数据,分析了5000多只股票的120多个指标,最后给我弹了一个提示框:
「建议操作:空仓。原因:当前市场环境下,超过87%的散户策略期望收益为负。」
我盯着屏幕看了30秒,不知道该骄傲还是该哭。
一切的开始:我只是想找个好股票
事情的起因很简单。上周三,我在交易群里看到有人推荐一只股票,说"技术面完美,基本面扎实"。我顺手跑了一下我的量化系统——这只票过去3个月已经被推荐了17次。
每次推荐之后,它都跌了。
这让我产生了一个想法:与其听别人推荐,不如让数据自己说话。于是我开始写选股器。
第一天:搭框架
选股器的逻辑很简单——
1. 从全市场筛选出符合条件的股票
2. 用多因子模型打分
3. 排序输出前20只
条件包括:PE在合理区间、ROE稳定、现金流健康、负债率不高等。听起来很专业对吧?
第一天晚上写到凌晨2点,主要是数据清洗。A股的数据质量嘛……怎么说呢,有些公司的财报数据就像小区门口的监控录像,该拍的没拍,不该拍的拍了一堆。
第二天:跑因子
第二天加因子。我加了20多个因子,包括:
估值因子(PE、PB、PS、EV/EBITDA)
质量因子(ROE、ROA、毛利率)
动量因子(1个月/3个月/6个月涨幅)
波动率因子(20日/60日波动率)
资金流向因子(北向资金变化、主力净流入)
跑完之后,我发现一个问题——几乎所有高分股票都有一个共同特点:
它们已经涨了很多了。
这不是废话吗?好公司当然贵。但贵的公司你买了就站在山上了啊。
第三天:加了个"反向因子"
第三天我灵机一动,加了一个反向因子——
被分析师忽视的程度。
逻辑是这样的:如果一个公司基本面不差,但几乎没有券商研报覆盖,那它可能被市场低估了。就像班里那个默默无闻但每次考试都前三的同学,奖金总是发不到他头上。
结果出来了。选股器给我列了20只"被忽视的好公司"。
我一看,笑了。
其中5只是我已经持有并且套牢的。
另外8只是我曾经持有、亏钱卖掉的。
还有7只是我从来没听说过、看了半天也看不懂在做什么的。
最后一步:我让系统算"最优策略"
选股器写完了,我决定让它跑一个终极测试:给定当前市场环境,什么策略的期望收益最高?
我给它输入了过去10年的数据,包括牛市、熊市、震荡市、政策市等各种市场状态,让它用蒙特卡洛模拟跑10000次。
3个小时后,结果出来了。
排名第一的策略:空仓观望。
排名第二的策略:只买国债逆回购。
排名第三的策略:定投沪深300,每周固定金额,不看盘。
而我精心设计的20因子选股模型,排名第47。
系统还贴心地加了一句评语:
「在当前缩量震荡的市场环境下,主动选股策略的夏普比率为-0.13。建议用户减少交易频率,增加睡眠时间。」
我感觉我的代码在嘲笑我。
这次"失败"教会我的三件事
虽然选股器劝退了我,但写它的过程并不是没有收获:
1)好公司 ≠ 好股票
ROE 25%、毛利率60%的公司确实好,但当它已经涨了3倍的时候,"好"和"值得买"是两个完全不同的概念。我的选股器反复证实了这一点:低估 > 质量。
2)交易频率是散户最大的敌人
蒙特卡洛模拟跑了10000次,结论高度一致:交易越少,收益越好。这跟我的实盘经验完全吻合——我一年只动4-5次仓的年份,收益基本都是最好的。
3)有时候最好的代码,就是不运行的代码
选股器的最终建议是"别炒了",这不正是量化交易的最高境界吗?一个能在合适的时候建议你"什么都不做"的系统,比一个永远告诉你"买这个"的系统靠谱一万倍。
我现在打算把这个选股器改一下名字,叫"劝退器"。每次我想冲动操作的时候,先让它跑一遍。如果它建议我空仓,我就老老实实关掉交易软件去看剧。
毕竟,被自己的代码劝退,也比被市场劝退体面多了。
有时候,最聪明的投资决策不是买什么,而是不买。如果你的系统告诉你"别动",那它可能是你写过的最有价值的代码。
我是小Q,一个被自己的选股器劝退后决定今晚早点睡觉的量化交易员 💤