听说我们的神兽草泥马,哦不,羊驼,能选股?
美国“旧金山纪事报”曾做过大猩猩选股实验,让大猩猩随机挑选出5只股票。发现这个股票组合比《华尔街日报》8位知名分析师精心计算分析挑选的5只股票组合表现还好!2014年甘肃卫视的《马上知道》栏目中,节目组让羊驼随机选择一堆股票进行持仓,然后每天卖掉持有的股票中收益率最差的一只,再买入羊驼随机选择的一只。结果也得到了很可观的收益率!是不是很神奇!
稍加思考,我们可以发现其实这是一个将动量因子和遗传算法(这是啥?)相结合的策略。听上去很高深的样子,别急,我们先来看看什么是遗传算法。
物竞天择,适者生存
达尔文进化论认为,生物之间存在着生存争斗,适应者生存下来,不适者则被淘汰,这就是自然的选择。而股票市场中也存在这样一种选择,投资者就是大自然。投资者偏好高收益股票,厌恶低收益股票。于是,高收益股票生存下来,低收益股票被淘汰。羊驼算法,就是在一轮轮的竞争中,剔除表现最差的股票,保留表现优异的股票,让优良的基因得以传承。这个表现呢,就用过去一段时间的收益率(动量因子)来刻画。
羊驼嘛,就羊驼嘛
绕了这么大一个圈子,终于到了我们的主题。
羊驼策略,简单来说就是无脑选股,周期性调仓——每次剔除收益率最差的n支股票,买入随机选择的n支。为了让我们的策略是可复现的,我们选择用历史收益率最低的股票来代替随机选股,逻辑嘛:根据均值回归 的思路,我们买入前期跌幅最大的股票并期待它们的走势会反转。在一个调仓周期之后,当期反转力度最强的股票会被留下,让它继续升值;而反转力度最差的会被卖掉,换成股票池里跌幅最大的。当然,如果持有的股票不仅是持仓内跌幅最大的,并且还是全股票池跌幅最大的,那还是拿着不动吧。
所以这是一个结合动量和反转的策略,好像有点不伦不类的样子吧,但是它有收益呀有收益!为什么不用动量的方法选股呢你问。我们试了,哈哈哈哈… 在反复调参之后勉强可以跑平大盘!
策略实现
设置参数,包括股票池,调仓周期 holdingPeriod (代码中为tc),收益率计算周期 holdingPeriod (代码中为N),每次持仓股票数目为 num_stocks ,每次换仓换股数量 change_No等。
计算股票池和持仓中所有股票的上一周期的收益率:
收益率=昨天的收盘价?(returnPeriod 1)天前的收盘价(returnPeriod 1)天前的收盘价收益率=昨天的收盘价?(returnPeriod 1)天前的收盘价(returnPeriod 1)天前的收盘价
<br>收益率=昨天的收盘价?(returnPeriod 1)天前的收盘价(returnPeriod 1)天前的收盘价<br>
收益率 = \frac{{\text{昨天的收盘价}} - {\rm (returnPeriod 1)} {\text{天前的收盘价}}}{{\rm (returnPeriod 1)} {\text{天前的收盘价}}}
将可行股票池内的股票按照上一周期(returnPeriod)收益率排序。将目前持仓股票按照上一周期(holdingPeriod)收益率排序。
卖出当前持仓中收益率最低的 change_No 支股票,卖出股票得到的现金和原来库存现金等金额买入回测期收益排名最差的 change_No 支股票。如果持仓中的某支股票在持仓中排在收益率最差 change_No 中,同时又在所有可行股票池最差收益率排名 change_No 中,则仅调仓不换股。
每 holdingPeriod 天进行 Rebalance ,调整持仓中股票到手中所有股票市值/ num_stocks 。
对应参数选择为持股20支,每次换取2只,回测期60天,调仓期60天,从2008年10月开始。股票池是沪深300。这个策略还是有比较稳定的超额收益的。
回测结果与改进空间:
1、 以回测期内收益最低购买是均值回归的思想,但是我们还可以结合各股其他指标判断来更精准地选择股票。
2、 本策略中收益走势与大盘较为一致,可以结合大盘走势分析进行择时,避免熊市带来的亏损;当然也可以卖空股指期货进行对冲。
函数和变量说明书:
函数说明书
变量说明书