看着手里股票上上下下的K线,以及变化无常的成交量,仿佛和某只股票前几个月的走势一样啊,接下来怎么走?能否用历史曲线来预测一下接下来的走势情况呢?哪怕能得到走势概率,也可以通过“凯利公式”计算获得额外收益呀。
2014年低,A股开始往上走,我也赚了一些钱,由于我是码农,就利用周末休息时间采集A股3000+历史数据并开始分析,首先想到的就是做曲线相似度拟合,包括日K和成交量,说干就干,我使用1~3个月滑动窗口的方式,可以截取非常多日K数据,K线本身是曲线,成交量把最高点连起来也可以看成一条曲线,曲线相似度算法很多,就选了应用广泛的两种来跑数据,无奈计算量很大,家里的电脑配置不行,把时间也卡在最近10年(一轮牛熊都覆盖了),同时也想了其他办法节省计算量,最终跑出了一份曲线相似度,然后搞了一个页面,通过绘图插件,就能把当前K线和历史相似曲线召回,并能把历史曲线后边的走势绘制出来,这样就可以人工再看一下最可能怎么走。
做完这么大工程,美滋滋得就拿当前关注的股票实验,跟踪后续走势,结果大出意外,实际股票走势并不是历史概率最大的走势,这么看定性方法就不行了,那么能否用定量方法计算一下呢?我想到了机器学习。
在工作中用机器学习已经在很多场景使用过了,我也比较熟悉,机器学习分样本、特征、算法、评估几个阶段,样本好办,涨为1,跌为0,按每天采样算,有大量的正负样本;特征需要花些时间,我使用了过去90天每天的最高、最低、开盘、收盘、成交量等一系列原始特征,后来还加了衍生特征,例如macd、kdj、boll、是否多头排列、是否破新高、和20日、30日等均线的距离,除了这些大家常见的经验,还翻了很多量化书籍,把能计算的指标都放进去做特征了;算法采用当时流行的xgboost;评估就好办了,AUC不错就拿来跑个历史回测,看看收益率和回撤如何。结果比上次好了不少,跑回测还行,但是跑实际盘依然无法做到稳定盈利。
再后来,我想算法是不是可以换,就换上了深度学习模型(当时alphaGO还没战胜李世石,所以深度学习用的人并没现在多),深度学习擅长从数据中自己提前特征,所以我特意使用原始特征丢进去,包括把K线+成交量图作为输入,端到端计算未来结果,相当于我给历史曲线走势,让机器自己学习,然后实盘预测走势。这次的结果AUC比上次提高了不少,模型也更稳定,我自己拿了一部分资金出来,进行实际测试,刚好赶上2015年牛市,真挣了不少钱,几个月后赶紧加大资金,后来大家知道了,2015年6月左右,大盘开始暴跌,机器学习模型并不能躲过大跌,几乎天天被按在跌停板上摩擦,最终这波熊市虽然没亏钱,但是也没挣到什么钱。
后来就做个复盘,发现模型计算的结果在顺势会超越大盘收益,逆势会跌更猛,相当于大盘放大器,我的仓位后边加得多,所以亏起来很快。后边虽然还有可改进空间,但我总体结论用历史曲线预测股票走势,是不靠谱的。
为什么机器学习在CTR预估上靠谱,但是在股票走势预测上不靠谱呢?
我觉得有这些原因:
首先,CTR预估是人看广告的点击率,人在某些场景下点击对应广告,是有重复性的,例如刚买了辆汽车,再买点车内除味香水什么还是很不错的,但是股票走势不见得有个这个规律。
第二,CTR预估样本规模足够大(亿级别),点或不点受群体行为影响较小,但股票走势是个更复杂的博弈系统,所以也很难预测。
第三,股票里你买的是另一个人卖的,点击广告不会说你点了对方不点,没有对手盘的概念。
当然,还有很多其他解释,例如K线和成交量并不能反应走势的全量信息,例如突然出个利好,非常难判断,这里就不一一说了。
这个结论对我最大的影响就是几乎放弃了技术流,不再研究各种技术指标等一众理论了,肯定有人借助技术流挣钱的,我这里并不是否认,但个人感觉不太适合自己,就放弃了,后来就形成了选行业+操作code的一整套简单方法,操作code本质上不是预测股价,也保证不了挣钱,只是为了保证自己不跳坑。
今天的分享就到这里,明天周末,聊点和股票关系不大的,放松一下。