第89章 在过去的K线上,运行未来的算法 (第1/2页)
1996年10月19日,星期六,霜降前夜。
上海迎来了入秋后第一场真正的凉意。清晨六点,天刚蒙蒙亮,陈默从床上爬起来时,呼出的气息在冷空气中凝成白雾。亭子间里冷得像冰窖,他裹上最厚的毛衣,又加了件外套,手还是冻得有些僵硬。
但今天他必须开始。
书桌上已经清理出一块空地,整整齐齐地码放着三样东西:左边是十二本笔记本,记录着1993年1月到1996年9月的手工K线图;中间是厚厚一沓财务数据摘抄,来自这些年收集的年报和研究报告;右边是空白的计算纸和一支削尖的铅笔。
还有一张崭新的表格,标题用红笔写着:“双因子模型历史回测记录表”。
今天,他要做一件四年来从未做过的事:把自己的投资模型,放到历史数据中去检验。
这个念头是在上周三产生的。那天下午,赵建国又在营业部炫耀他的“涨停战法”——一种基于盘口异动和成交量突增的短线方法。他说最近一个月用这个方法抓了三个涨停,收益率超过30%。
陈默问:“你这个方法,在过去三年有效吗?在熊市里也有效吗?”
赵建国愣住了,然后摆摆手:“过去?过去有什么用?市场在变,方法也要变!”
但陈默不这么想。如果一种投资方法只在某些时候有效,在某些时候失效,那它就不是真正的“方法”,只是运气的巧合。就像一枚只在晴天显示正确时间的日晷,到了阴天就失去意义。
真正的投资体系,应该穿越周期——牛市有效,熊市也有效(至少能控制亏损);震荡市可能表现平平,但不能产生毁灭性损失。
而要验证这一点,唯一的方法就是回测。
用历史数据,模拟如果当年就按照这套系统操作,结果会怎样。
早上七点,陈默泡了杯浓茶,在桌前坐下。他决定从1993年1月开始回测——那是他入市后的第一个完整年度,也是市场从牛转熊的关键年份。
第一步,确定回测标的。他不能测试所有股票,那工作量太大。他选择了十只代表性强、数据相对完整的股票:四川长虹、青岛海尔、深发展、万科、陆家嘴、真空电子、飞乐音响、金杯汽车、深科技、琼民源。覆盖家电、金融、地产、工业、科技等多个行业。
第二步,确定回测周期:1993年1月1日到1995年12月31日,整整三年。1996年的数据他留着做“样本外测试”——如果模型在已知的三年有效,再看它在未知的今年是否依然有效。
第三步,也是最难的:还原历史。
陈默翻开1993年1月4日那周的笔记本。那是新年第一个交易周,上证指数开盘787点。他找到自己当时记录的十只股票价格:
四川长虹:8.2元
青岛海尔:6.5元
深发展:12.8元
万科:4.3元
……
价格有了,但当时的“基本面因子”怎么评估?他不可能知道公司1993年的全年业绩,只能根据1992年的年报(如果已经发布)和当时可获得的信息来判断。
陈默深吸一口气,告诉自己:回测不可能完美还原历史。他能做的,是尽量模拟当时的决策环境——用当时可获得的信息,做出当时的判断。
他在计算纸上画了一个表格:
日期:1993年1月4日
评估标的:四川长虹
可获得信息:1992年年报(未发布)、1992年三季报、行业新闻报道
基本面评估:
· 护城河:成本优势初显,品牌正在建立(估6分)
· 财务健康:负债率适中,现金流一般(估5分)
· 盈利真实:三季报增长明显,但年报未出(估?)
结论:信息不足,暂不评分。
第一家公司就卡住了。
陈默放下笔,揉了揉太阳穴。他意识到一个问题:回测中的“基本面评估”,需要依赖公司信息的披露时间。而年报通常在次年3-4月才发布,三季报在10月。这意味着,在每年的大部分时间里,投资者都是在信息不完全的情况下做决策。
这反而更真实。
他决定调整方法:不追求每个时点都做出完美评估,而是设定几个固定的“评估日”——比如每年4月30日(年报披露截止日后),和10月31日(三季报披露后)。在这些时点更新对公司基本面的评分,其他时间沿用上一次评估结果。
虽然粗糙,但可行。
上午十点,陈默完成了1993年1月4日十只股票的“基本面初始评估”。结果是:三只信息相对充分(深发展、万科、陆家嘴),可以打分;五只信息不足,标记“待评估”;两只(金杯汽车、琼民源)几乎找不到可靠信息。
接下来是估值评估。这个相对简单——他有手工记录的历史价格,可以计算每只股票的市盈率(用最近一期财报的每股收益)。然后对照自己整理的历史市盈率区间,判断分位。
技术面评估最直观。翻开K线图,看股价是否在60日均线上,是否有突破形态。
三个因子评估完,就可以模拟“双因子模型”的决策:基本面≥7分、估值≤历史50%分位、技术面发出买入信号——三条件同时满足,则“买入”。
买入后,模拟持仓,每周更新价格,直到卖出信号触发:要么基本面恶化(评分降至7分以下),要么估值过高(超过历史70%分位),要么技术面破位(跌破关键均线)。
听起来简单,但做起来繁琐到令人绝望。
到中午十二点,陈默才模拟完1993年1月份的决策。整整一个月,没有一只股票同时满足三个条件。模型给出的信号是:空仓。
而现实呢?1993年1月,上证指数从787点涨到838点,涨幅6.5%。如果当时空仓,会错过这波上涨。
陈默的心沉了一下。但他继续往下做。
2月,依然没有买入信号。指数继续涨到893点。
3月,深发展首次同时满足三个条件:基本面7分(银行业稳健),估值45%分位(市盈率18倍),技术面突破。模型发出“买入”信号。
陈默在回测表上记录:“1993年3月15日,模拟买入深发展,价格13.6元,仓位15%(模拟总资金10万元,买入1.5万元)。”
买入后,他开始每周跟踪。
4月,深发展涨到14.2元,模型继续持有。
5月,涨到15.1元。
6月,涨到16.3元。此时估值达到历史68%分位,接近卖出阈值,但未触发。
7月,股价开始回调,跌至15.5元。技术面依然在60日线上。
8月,暴跌。深发展从15.5元跌至12.8元,跌破60日线。模型触发“技术面破位”卖出信号。
陈默记录:“1993年8月23日,模拟卖出深发展,价格12.8元,亏损5.9%。”
一次完整的交易模拟:持有五个月,最终亏损。
而现实中的1993年8月,上证指数从893点跌至810点,跌幅9.3%。深发展实际跌幅更大,约15%。模型亏损5.9%,跑赢了指数,但依然是亏损。
陈默靠在椅背上,感到一阵疲惫。不是因为工作量大,而是因为这个结果——他精心设计的模型,第一次模拟交易就是亏损。
这正常吗?合理吗?
他想起老陆说过的话:“任何系统都会有亏损的交易。关键不是避免亏损,而是控制亏损,并在盈利的交易中赚到足够多的钱。”
下午两点,陈默泡了第二杯茶,继续往下做。
1993年9月到12月,市场继续下跌。模型大部分时间空仓,只在10月有一次短暂的买入(万科),持有三周后技术破位卖出,小亏3.2%。
全年回测结果:模拟交易3次,2次亏损(-5.9%、-3.2%),1次微盈(+1.8%)。总亏损约7.3%。而1993年上证指数全年涨幅6.8%。
(本章未完,请点击下一页继续阅读)