我觉着,对于一个相对成熟的交易者来说,程序化的切入点,往往会选先把自己的现有系统客观化程序化的道路。对于一个新手或现有系统难以量化的交易者来说,程序化的切入点是从模仿一些简单但经典的模型入手。
之后就是测试。测试什么?
应该每个常见平台上都能看到参数优化相关的界面。至少在国内,“参数优化”——可能这是一个大家普遍关心并有争议的问题。很多新人首先会对此困惑,因为很多程序化大家,是反对参数优化的。其实我最开始听到的是过度拟合的弊端,道理很容易接受——对某段时期拟合得越充分,那么在另一段时期背离的可能性也越大,因为我们总是只对某些特征进行拟合,即我们的拟合注定是不完全的,所以未来的背离是必然的。但后来我听到的是“反对参数优化”。我觉着这有点陷入一种狭隘。是反对软件上的这个按钮功能吗?那么多软件公司要设这么个功能,总有其价值所在。是反对试图优化的思路吗?但是如果不去优化,参数怎么定?“靠常识”?常识怎么来?新人有多少常识?
比如,我举个例子,说说溴化N-乙基吡啶的性状。别说颜色、比重这些参数,就是连室温下是固体还是液体,你都不知道。如果你不是搞室温离子液体研究的,你怎么可能知道?程序化交易又不是吃喝拉撒人人从小就有经验和体会的事物,对新人来说是一件全新的事物,对老人来说也还有很多没有弄懂的东西。所以我觉得靠常识来定参数,完全违背了人脑的认知规律。新人脑袋空空,拍不出多少常识。我觉着,这未必有益于程序化交易,因为纵然对某个时期的过度拟合会在另个时期产生过大背离,但如果在某个时期认可过大背离的存在,一定会在未来换来一个相对拟合的优异结果吗?有这种必然性吗?恐怕随便定出来的参数,这段不拟合,那段居然也不拟合,还没等到优异业绩,本金就已经大打折扣了,而且又何以让交易者能拥有长期坚持的信念呢?关注某组参数的具体表现的细节特征,并理解它对未来可能的涵意,才是硬道理。
我认为,参数往往是系统的特征值,并且主要是度量市场波动性的特征值。参数测试的主要目的是试图寻找有意义的特征值,而有意义的特征值的衡量标准是参数的依附稳定性、历史稳定性,以及跨周期普适性和跨品种普适性。我举个例子说明这几句抽象的话。首先,理论前提是,市场的波动性是各种频率的波的合成的结果。有点物理基础的人应该知道,合成波的描述可以通过将波分解为基波和各级谐波,通过分别描述每个正弦波的频率、幅值、相位来解决;或者说我们知道了基波和谐波的频率、幅值、相位,我们可以重现当初的合成波。这些频率、幅值、相位的表征,在程序化交易中就体现为参数,如果你找到的是这种参数,当然有很高的稳定性和普适性。这些分解波的由来,非常多样非常复杂,甚至可以说是难以穷尽(因为其非线性的市场本质),但我们仍可明显观察到一部分线性特征对应的谐波。
比如对于工业品,需求通常是稳步增长的,而且需求的多样性意味着需求端的多变。但供给端相对简单。在经济周期或政策周期下,往往会出现投资高峰,投资高峰在若干时间后会变成投产高峰,造成一波下跌。从原油矿产这样的原材料到PTA这样的中间工业品,都是非常明显的,而且由于在国内,政府的宏观调控,其实加剧了这种投资的不均衡性。对于很多品种来说,天然地有淡旺季。比如服装有春夏和秋冬两大季。每年某个时装发布会后,就是大规模的量产,量产之后是布匹采购的增加,布匹采购增加继续向上游传导,就对应纱和棉的采购增加。
另几个方向就是涤纶短纤、涤纶长丝、氨纶、腈伦、黏胶纤维等的采购的增加,再往上就是聚酯工厂采购PTA和MEG了,还有再往上,PTA工厂采购冰醋酸和PX,芳烃工厂采购石脑油……这些采购的时间不可能相差太悬殊(库存成本的制约),也不可能完全均分在每天(物流的规模经济性的考量),那么,注定会体现为一波波的采购高峰。所有产业中都存在采购周期,只是强弱不同。这些采购周期受物流效率、信息系统、管理方式所决定。目前都是电子化网络化时代了,通常2个月;但在网络化之前(十年前),那时候公路铁路也有很多地方网络不能覆盖,加上路况也差,那时候仓储采购周期肯定要长,3-6个月;再往前,两百年前的马车帆船时代,肯定更长,一次越洋跨国贸易(比如从南洋群岛运香料到鹿特丹)都在一年以上,采购的量也可以用个两三年。
总之,这个周期是由经济发展水平决定的,这是一个波。这个波是一个中期波,而且非线性特征比较弱,也就是说比较容易发现和度量,它的变化非常慢,没有5年你是看不出它的明显变化的,并且一旦变化了,也很难变回去了。但另一个往往与之叠加的波就是心理预期产生的波动。采购方总是希望逢低采购,销售方总是希望囤积居奇待价而沽。所以采购方往往倾向于把这个波的相位往前提,而销售方则希望把这个波尽可能变成一个方波——就是在高位的时间越长越好。每年的供求关系和宏观环境有差异,加上各方都习惯于以前两年的节奏为参照,所以你会发现,每年的价格高点虽然都有一个范围,但却一定不同(孢子理论)。比如若前一年铜的高点出现在4月,而且只一个明显的高点。采购方就会想着那我在3月底就采购,就可以买得比竞争对手便宜。而销售方一看到 3月底询价就增加,马上就在3月底就把价格提上来,结果在3月形成一个价格高点。由于提前采购,4月可能就没量了,就下跌。
当然,如果该品种在那年比较紧缺,那么提前采购也会导致提前用完,同时加上前期踏空的需求,所以在4月跌下来之后,可能还会有一波5月补库存的集中采购动作。这样,在春季可能就出两个高点。这就是心理预期的起落,对原始采购周期的叠加,导致的。心理预期也有节奏,但它易变,而且自反馈,所以具有很强的非线性特征。但这还不是你看到的最终行情节奏,因为还有许许多多大的小的因素导致的波动叠加在上面。最后还有一道无时无刻不存在的背景噪音……
以上我只是举例子说明,我们找到几个有稳定性和普适性的参数值是有可能的,找到的值是有现实意义的,但由于现实是已经被反复扭曲的,所以直接通过观察现实去猜想一个有意义的参数值,却无法实现。但参数测试却可以帮我们找到它们的值,通过稳定性和普适性的检测,来最终确定它们的值。大体上它与那个我们猜想的有现实意义的值具有相同的数量级。参数测试还能告诉我们这些有意义的参数,他们的普适性和稳定性的程度。比如有些跨品种普适,但跨时间周期却没有等比例关系。
而另一个可能历史稳定性尚可,但既不能跨品种,也不能跨周期。甚至,有些历史稳定性也不行,但其在历史上的反应,和某个关联特征具有单一的联动规律。参数测试还能让我们知道哪几个参数虽未找到确定的现实意义,但却依附于另一个动态变量(往往是品种特异性、季节特异性等的体现)上。这份认识,可以让我们在对待不同品种不同时间周期不同行情风格时,对某几个关联参数采取特定的调整方向,并且这是自适应参数法和动态参数表方法的基础;即使你坚持半自动的道路,那这份认识也给你在执行层面进行主观筛选提供坚实的现实依据。而不至于出现想起要改模型了,但不知道从何入手、或随手乱改的窘状。真正难以琢磨的是那些稳定性差、普适性差,关联性没有单一方向的参数。不过也没关系。打个折即可。
我们可以定性地判断一下该模型是否是个正收益模型。如果它能得到30%的年化收益率,最大回撤20%,但内部却有两个参数无法找到现实意义和变化规律,我们就认为它未来可能不能赚钱,但毕竟它赚过钱,所以坚持下去,它有望成为一个保本的模型。如果有办法把它变成一个日内短线模型,风险就可控,炒手续费就再合适不过了。就算不看重这块,那么至少先把它当成用来平滑其他策略业绩波动的组合对象吧。其实,也许有朝一日将来你就会发现参数的现实意义或规律,然后就可以更大胆地用它。先把它留在自己的策略原型库中好嘞。一个程序化交易者每天琢磨什么?很大程度上是在研究这个。
除此之外的时间在琢磨什么?逻辑测试。其实逻辑测试比参数测试更重要,改进效果也更好。若说参数测试考验计算机硬件水平,那么逻辑测试考验策略设计者对市场的理解和创造力。但两者不可分。其实,有些参数当取到极值时,就相当于把某个逻辑屏蔽起来。
逻辑测试的切入点:是对行情的微观结构分析和对逻辑本身的微观结构分析。前者的关键词是捕捉,后者的关键词是拆分。
捕捉有主动和被动之分,现有的常用平台和本人的数理知识还难以做到主动捕捉。而且我们的个人电脑配现有程序化平台,是不可能跑过于繁复的算法和逻辑的,否则会让计算变成电脑的休克。但举个例子能让大家明白主动捕捉的意思,人机语音对话其实就是通过每个音节的声学规律通过主动捕捉来识别特征完成词汇还原的。让从事波形分析的模式识别专家来做这个事是最恰当不过了。被动捕捉是个笨办法,却未必多走弯路,只是会常常让测试者觉着不可思议,结果的不确定性时而令人崩溃时而令人惊喜。被动捕捉其实是用逻辑和参数去量取某一特征,逻辑和参数基本已经限定,行情形态的微观结构也是确定的,我们只有找到一个高的数学期望的稳定值,才说明成功量取到了有现实意义的特征。就好像闭着眼睛拿杯子在水里捞鱼,捞到一条是一条,没捞到的时候谁也不知道杯子里能有什么。
我身上就有现成的例子,有些品种常有多重顶底,但不规则,要识别这些复杂而不规则的K线组合形态,真的不是通过简单的逻辑就能实现的——这是一开始试图直接实现的时候,想想就放弃了。但后来在研究某个参数是如何控制模型的行为的时候,在分拆和优化之后,发现了一种简单逻辑就可以实现不算很充分的捕捉这种形态特征,而当初这个参数的引入又是出于一个完全无关的思路。在这个层次上,我充分体会到了世界的混沌性:如果试图以精确的设定达成精确的结果,往往会失败。不过模糊的设定,应该还是有别于盲目试错的,对形态和逻辑本身的认识,仍是必要的前提,各种软件平台提供的和平台以外(如通过EXCEL或MATLAB)的测试,是获得这种认识的手段,“优化”测试,不过是设置了某种导向(收益率、最大回撤等)的数学期望测试而已。
逻辑的拆分。这是一个原则,在设计时就应该尽可能把每个环节设计成可以单独测量。屏蔽其他参数与逻辑的关联,只在确定现实意义之后,才使用这种关联。以便我们后面要提到的排列组合以及再后面要提到的跨逻辑组合。
逻辑测试的方向:有查漏补缺和排列组合两种。
查漏补缺往往着眼于极端行情的处理,比如停板、连续停板、巨大的隔夜跳空等。尤其是分钟线交易策略。除非是外汇交易,否则行情的连续性总被周期性破坏,给短周期策略的测试的有效性带来相当的考验。排列组合是对自己能理解的和不能理解的逻辑进行反复尝试,这事儿做起来没底。有很多似是而非的东西,也有很多似非而是的东西。我的体验进一步告诉我拍脑袋设计的不可行。找到一个实战可用的策略没有捷径,就是不停地尝试。本想程序化可以解放人脑于信息海洋,没想到搞程序化也是个体力活——从基本面研究的信息海洋出来,一头扎进了程序化研究的逻辑海洋里。
暂无评论内容