作者:职业期货交易(新浪博客)
检验一个交易模型,首先最基本的一个工作就是得检验代码里是否有逻辑错误或者偷价格现象。偷价格主要体现在两个方面:一个是利用过去的价格来交易,比如"if(H>H[1]) buy(1,open);"这种写法就是在偷价格,因为在k线开盘时你是无法知道当根k线的最高价的,再一个就是没有扣除对价价差,稍微盯过盘的都知道,买1和卖1的价格是至少一个点差的(不活跃的品种会更大),如果在发生信号后保证成交,得以对手价去下单,一般和信号模拟价相比要损失一个点差左右的,所以在写交易模型编写时必须要扣除点差,这点在写交易频率较高的日内模型时特别重要,好多这类策略都是如果没有计算点差,那测试报告的资金曲线几乎是一根笔直的斜向上的直线,一旦加上点差,立马变为亏损。
这个最基本的第一步检验工作非常的重要,这一步不过关,其他的检验步骤没有任何意义。我的一个比方就是这就好比是对着一个ps过的像片评论是否是靓女一样,凤姐还能ps成天仙呢。但是这一步检验工作是必须得仔细检查代码的,无法接触到代码的第三方是无法完成这一步的,故也无法帮助别人评价交易模型是否具备实盘价值,这也是我很少在学会论坛上对网友上传的测试报告进行点评的原因。
过了这一关,第二步就是检验模型在样本内外的测试表现了。说到这,我先说点题外话,在学会的各种量化投资活动中,我接触到了很多做量化投资的朋友,不少都是名校毕业的精英。但是我发现一个很奇怪的现象,就是很多朋友一毕业就把统计概率的相关基础专业知识还给了学校了,不懂得样本内外的差异对比,不懂得显著性检验。量化投资的建模过程本质上就是一个从大量的貌似随机的数据中找寻局部非随机数据的过程,如果不借助概率统计的相关专业知识,很容易落入过度优化的陷阱。
简单的说,这第二步就是要求在编写调试交易模型时将测试数据至少分为两部分,一部分作为样本内,另一部分作为样本外。样本内你可以充分进行各种优化尝试,然后拿在样本内数据上调试好的模型去在样本外数据测试,看看样本外数据上的测试报告是否明显输于样本内(可以很悲剧的说,大部分都是这个结果)。在这里,要注意的是不要自欺欺人。如果发现样本外数据表现不好,又觉得丢掉模型太可惜或者不愿意承认自己这个模型不行,而对着样本外数据继续做模型优化,直到样本外数据上也表现得一样好,那最后受伤的一定是你的银子。在对着样本外数据做优化时,样本外数据早