【美股投资择时篇(二)】验证“低估时买入,高估时卖出”策略的收益

在上一篇列举了想验证的以下5种策略:
无脑定投(Dollar Cost Avaraging, DCA)
“低买高卖”——PER(市盈率)法
“跌了再买,涨了就抛” or “追涨杀跌”
(按目标年化收益率)止损/止盈
“黄金/死亡交叉” 和 “均线趋势投资”
今天就介绍上面第二个“低买高卖”的投资策略,也就是以PER(市盈率)判断指数是否高估,若高估则卖出,低估则买入。
回顾一下模拟时的前提条件:
- 数据:1886/01/02 - 2023/01/17的标普500指数每月记录(不含股息分红),注意是指数投资,不是个股投资
- 由于我们不能直接投指数,因此模拟时扣除在日本的标普500指数基金中资产规模最大的指数基金的托管费率0.0968%)
- 每月可以有1,000块钱用于投资/储蓄(在python代码中的参数为monthly_income) - 计算比较三十年之后的资产情况
以下是模拟该策略时的计算逻辑:
初始时: 投入资产(invested_amount)=0, 钱包(wallet)=0
第n月时: 若当月PER=Y,则抛掉所有已投资产放入钱包中;最后看投入资产+钱包的合计
以历史中央值15为分界线分X,Y进行模拟
下图是统计的思路:

数据是1886-2023年的每月数据, 第一次模拟是1886/1-1926/1,采取想测的策略计算收益情况,第二次模拟是1886/2-2926/2...以此类推。最后计算所有模拟结果中的最低值、平均值、中间值、最高值等统计数据
作为对比,以下是无脑定投的结果:

好,确认好条件之后我们就可以进入正题了,“低估时买入,高估时卖出”是否可行呢?中间值的结果为下图。纵轴为判断低估的阈值(也就是X,低于该值买入),横轴为判断高估的阈值(也就是Y,高于该值卖出)

上面的表格显示,每月有1000块钱的收入时,若采取“PER低于9倍就买入,PER高于25倍卖出”的策略,30年后的资产中央值为604,722块钱。
我们从中可以看出一些倾向:
1. PER买入阈值(纵轴)越高,30年后资产的中央值越高
2. PER卖出阈值(横轴)越高,30年后资产的中央值越高
3. 无论采取多少的PER阈值,都不能超越无脑定投的中央值
买入阈值越高就意味着有更多的机会买入股票,而卖出阈值越高意味着更少的机会卖出股票。其实从这一次模拟也进一步验证了“投资最好的时机就是现在”这样的说法,犹豫要不要买的时候赶紧买,买了之后拿着不卖是一个非常好的策略了。
接下来看一下各阈值的夏普率(注意这是简化过的夏普率):

这一次的话和刚刚的结论有点不一样了。买入阈值越低夏普率越高,卖出阈值越低夏普率越高。 这就怎么看了,如果你求稳想把风险最小化的话,按PER判断是否高估再进行投资也许是一个很好的策略。而如果你是求收益的话,还是建议无脑定投吧 最后贴一下各PER阈值情况下的一些统计结果(由于篇幅原因只列出4对):

在下一篇准备验证第三种策略“跌了再买”的策略,顺便测一下“追涨杀跌”是否可行(也就是上月涨X%就买,跌Y%就卖),这个的话只要把“跌了再买”的变量颠倒一下就是了。
然后准备再加一种策略,有同学提出了以下方法:
当股价低于25日移动平均线+25日平均线朝下→卖 当估计高于25日移动平均线+25日平均线朝上→买
另外也想验证一下黄金交叉/死亡交叉(Golden Cross/Dead Cross),即5日移动平均线上穿25日移动平均线时买入,下穿时卖出有没有效果。
Appendix:
本次源代码在:
https://github.com/lapi2023/Stock-Return-and-safe-withdraw-rates-simulation
计算用:Return_Simulation_monthly_buy_low_sell_high.py
绘图用:plot_Return_Simulation_monthly_buy_low_sell_high.py
另外不知怎的本地端GitHub Desktop的时候Push总是会出现错误...每次都需要从网页端把文件拽进去才行...
注1:我分享过的,以及将要分享的内容都是过去数据得出来的结果,而过去数据不能保证将来的走势,投资有风险,所有后果应由自己承担。
注2:我不会推荐任何具体的金融产品(最多是指数),任何高端的操作技巧(K线是不会出来的,之后也会说明其实这些技巧都没什么大用),也没有收任何机构的钱,开户什么的基本操作请自己搜一下(我也不知道国内券商的情况)