第159章 完整体模型(1 / 2)

请关闭浏览器的阅读/畅读/小说模式并且关闭广告屏蔽过滤功能,避免出现内容无法显示或者段落错乱。

只睡了三个小时,林深是被手机闹钟叫醒的。睁开眼的时候,花了三秒钟才想起来自己是在沙发上睡着的,那本英文书还摊在茶几上,停留在折角的那一页,笔记本被压在书

手机上显示早上八点二十分。茶几上那碗饺子还在,一口没动。

他坐起来,脖子僵得几乎转不动,颈椎发出一串细碎的响声。

林深进卫生间冲了个凉,让自己更精神一点。到公司的时候还不到九点,电脑屏幕上是他之前的量化模型。

这个模型他前前后后改了不知道多少遍,回测曲线也跑过无数次,但核心框架一直没怎么动过。他以前的玩法很简单:把过去五年的行情数据全部倒进电脑里,让模型自己学规律,学完了再用同一批数据去验证,看看收益怎么样。如果收益好看,就再调调参数,直到曲线足够漂亮为止。

现在他知道这叫什么了。这叫偷看未来。成绩再好也是假的。模型在训练的时候已经见过后面的数据,跑出来的收益当然高,但一到实盘就原形毕露。

打开模型的核心代码。

他先改的是数据那一块。以前他是把所有数据一次性读进去,然后随便切成两块,一块用来训练,一块用来测试。这种切法最大的问题是不管时间的顺序——可能用来测试的数据里包含了训练数据之后的价格,模型提前看到了“未来”。

林深想起了昨晚在书上看到的那个比喻:做回测应该像开车一样,只能往前看,不能回头。先用最早的一段时间的数据训练模型,再用紧挨着后面的一段时间的数据去验证,然后把验证过的数据也加入训练,再验证下一段,就这样一步一步往前推。

这个道理说起来简单,写起代码来全是坑。

先是数据就不干净。他从行情软件导出来的那些CSV文件,日期格式乱七八糟的。他花了大半个小时清理数据,一行一行地检查,把错的改对,把缺的补上,按时间重新排好。

弄完数据,跑起来又出问题了。这种一步一步往前推的方法,电脑得反复读取数据,跑一遍比之前慢了四五倍。他第一次运行的时候,电脑卡了十几分钟,屏幕上的进度条一动不动,他以为死机了,差点直接关机重启。后来把步长调大了一点,跑得没那么精细了,但好歹能跑完。

还有一个麻烦——结果怎么算。以前只看一个总收益,省事。现在每跑一小段就出一个数字,有的高有的低,他得把这些数字凑在一起看。他想了个笨办法:把所有小段的收益加起来取个平均数。不算多科学,但至少比那个“偷看未来”的总收益诚实。

改完这段代码的时候,已经快十一点了。林深起来活动了一下肩膀,继续往下改。

第二块要改的是止损。

他之前的止损逻辑很简单:买进去之后,如果价格跌了超过2%,就卖掉认亏。这个数字是他自己拍脑袋定的,没有任何道理。后来听了崔金源的峰会,他把2%改成了一个会变动的数字——市场波动大的时候就放宽一点,波动小的时候就收紧一点。

但昨晚书上讲的那个方法给了他一个更系统的思路:止损失不应该是一个固定的比例,而应该跟着价格的波动路径走。这个说起来有点复杂,他一时半会儿写不出书上那种完美的算法,但他用了一个简化的办法:在买入的时候,根据最近一段时间的波动幅度来定止损线。波动越大,止损线就放得越宽;波动越小,止损线就收得越紧。

这样至少能让模型自动适应市场的变化,而不是用一个拍脑袋的数字死扛。

他写这段代码的时候,绕了好几次弯子。第一次写出来的逻辑有问题,跑出来的止损线忽上忽下,完全不对。他又重新捋了一遍思路,把代码删掉重写。第二次跑通了,他把最近一个月的行情数据输进去,看了几条止损线,觉得还算合理,才继续往下走。

第三块是他最没把握的——从数据里挖有用的信号。

林深以前的模型只用了几个最基础的指标:均线交叉、成交量的变化、相对强弱指数。这几个指标都是烂大街的东西,随便哪个炒股软件上都有。他连筛选都没做,直接把它们塞进模型里,让模型自己去学。

书上说,从数据里挖信号是决定模型好坏的关键。好的信号能把真正有用的信息从乱七八糟的行情里分离出来,差的信号只会让模型学到一堆没用的噪音。

林深目前还没有本事自己从零挖出复杂的信号,但他至少可以把之前在一些报告里见过的、别人用过的指标加进去。他在网上搜了几个代码片段,挑了三个相对简单的——价格和成交量的相关性、价格的偏斜程度、连续涨跌的天数。

他把这三个新指标加进模型,跑了一遍回测,发现收益没什么变化。

这说明这几个指标可能是没用的,或者他加的方式不对。他在椅子上靠了一会儿,决定换个思路——与其乱加一堆不确定的东西,不如先把原有的几个指标搞清楚哪些有用哪些没用。