20.11 基因演算法则

    基因演算法则的概念基于达尔文的适者生存理论。在现实世界中,具有改善生物生存能力的特征突变模式将会持续发酵,其已经被应用于基因演算法则相关的技术系统的研发过程当中。虽然基因演算法则 [1] 实际上是一种复杂的搜索方法——用于替代标准优化法,但是它使用与适者生存相符的技术理念。当测试数据或投资组合的数量非常大,以至于对组合的测试显得不切实际时,此种方法是特别有价值的。基因法则不是典型的顺序搜索模式,而是一个集合式的随机生成情境,以及选择和组合相应金融资产的过程,其目的是要发现最好的交易规则或参数值;同时,在选择过程中,其会使用标准统计准则来限定测试的结果。另外,如果应用基因演算法则,那么搜索一个较大的最佳参数集合或找到最佳投资组合配置模式(如第24章所述)所需要的时间只有几分钟。与之相比,标准的顺序搜索法以相同计算速度而运行的周期可能需要几周的时间。

    20.11.1 基因演算法则的代表性情境

    应用这种方法所常用的词汇有很多,比如基因演算法则中最基本的组成部分就是基因;大量的基因能够生成一个个体基因工程,而这些个体(基因或元素)的组合又形成染色体,每个染色体则代表潜在的解决方案、一组交易规则或参数;其中,基因就是具体的值和计算步骤。而前述这些现象反过来又会代表最终形成的交易策略和规则的个体,例如染色体1可能代表一个强势买入的交易规则,即如果10日移动均值小于昨天的收盘价,5日随机数大于50,那么植入买单。染色体2可能是一个弱势买入的交易规则,即如果20日指数值小于昨日的低点,10日RSI指标值小于50,那么植入多单。

    如果我们用符号形式重新书写上述两个染色体,那么相应结构中的基因和个体则会变得更加明显,相应编辑指令为:

    染色体1:MA,10,<,C,[0],&,Stoch,5,>,50,1

    染色体2:Exp,20,<,L,[1],&,RSI,10,<,50,1

    相关染色体中的每一组都有11个基因,其中任何一个都可以被改变。此外,每个染色体有两个个体,由“&”操作符隔开。在表20-9中,基因的表述方式展现了那些可替换当前值的其他值。

    表20-9 染色体1和染色体2之中的基因表述功能

    表20-9以一般的形式表示染色体和个体。其中,我们可以很容易地发现:每个基因都是可以改变的,而每个变化都将代表一个新的交易规则,例如,染色体1和染色体2的基因2的10日和20日均值可以改变为5日和15日;或者,指示符Stoch和RSI指标可以更改为MACD和Momentum(动量)指标。交易规则或染色体的组合情境将创建相关的交易策略。在继续交易之前,我们需要先通过以下的步骤,应用基因演算法则来找出最佳的结果,即

    (1)以一种清晰的方式来表示染色体及其成分个体和基因。

    (2)判定一条染色体比另一条染色体更好的适应性准则。

    (3)应用传播过程,确定哪些染色体将以哪种方式生存。

    (4)应用突变(引入新特征)和交配(组合基因)的过程,使得具有更大潜力的染色体能够具有更好的存活机会。

    基因和染色体的表示方法如表20-9所示。然而,在开始前,我们还需要一个额外的步骤,即创建一个初始染色体库。

    20.11.2 初始染色体库

    在基因演算法则开始运行之前,我们必须创建一个初始的染色体库,如表20-9所示。然而,每个基因都可以从先前定义的候选列表中任意选择,其中需要11个列表,每个列表专门对应某个独特的基因:

    (1)趋势类型,在5种选择中任选1种:移动平均值、指数平滑、线性回归、破位模式或步进加权平均模式。

    (2)趋势计算周期,1到200之间的任意数字。

    (3)趋势关系运算符,3个选项中的1个<,<=,>。

    (4)趋势计算中使用的价格,4个选项中的1个:C(收盘价)、(H+L+C)/3、(H+L)/2、指数值。

    (5)参考数据或滞后因子:1到10之间的数字。

    (6)个体组合方式,2个选项中的1个:和/或。

    (7)指标类型,5个选项中的1个:RSI、随机、MACD、动量、费希尔变换指标(所有指标都必须转换为返回-100到+100之间的值)。

    (8)指标计算周期,1到50之间的数字。

    (9)关系运算符,2个选项中的1个:>或<。

    (10)指标和关系运算符的比较值:介于-100和+100之间。

    (11)市场行动,2个选项中的1个:买或卖。

    上述11个列表提供了48000000000种可能性。不管计算机速度如何,试图尝试每一种组合情境的方式将要完成一项艰巨的任务。然而,基因演算法所相关的测试过程很可能于不到1000次的区间之中就能找到最好的解决方案或者发现非常接近最好情境的解决方案。

    为了确保制订快速的解决方案,我们有必要从大型染色体库开始,通过从每个列表中随机选择一项来创建库中的每个染色体,而该染色体库则代表了遗传的种群。

    20.11.3 拟合度

    我们这里创建了一个与表20-9类似的染色体库,其中最好情境的确定模式是非常必要的,而这可以通过定义一个拟合度来判断染色体的标准或目标函数。因为适者生存,由此我们可以判定哪些染色体应该被丢弃、哪个应该生存下去,甚至于会变得非常重要。另外,拟合度的确定方式必须结合成功交易策略所相关的最重要的特征,即,

    ·每笔交易的净利润或利润。

    ·交易数量或样本的误差标准。

    ·测试结果的平滑性或收益/风险比率。

    在理想情况下,我们需要优先考虑利润大、交易量大且业绩表现稳定的系统,而要衡量此项指标,我们可以使用以下方程,即,

    式中 Rank——排序函数;

    PPT——每个交易的利润;

    NT——交易数量;

    GP——毛利润;

    GL——总损失。

    或者,GP/GL可以由信息比率AROR/ASD(年化收益率/(年化标准差或年化波动率))的形式所替代。

    拟合度标准的排名方法倾向于每笔交易所获取的高额利润、大量的交易次数以及毛利润与总损失的高比率情境,其是衡量收益平稳度的一个标准。前述这些因素没有加权,但是,它们可以作为染色体排序的简单测量方法,例如,在某种交易方法项下,每10次交易可获利500美元、损益比率为0.5,其排名为170.75;另一个系统每笔交易的收益只有250美元且超过100次交易,同时所保持的损益比率为1.4,那么,它将排在第315.00位。然而,相较于主要以总收益和总损失的比率为基本适应性标准的系统模式而言,那些具有较小收益的系统或许具有更加可接受的交易模式。所以,每个分析师都必须创建一个最符合需求的交易策略来达到生存的目的。

    20.11.4 染色体的传播功能

    自然界的规则是只会让最好的个体生存下来。因此,强势传播准则会鼓励那些由适应性测试所确定的具有最高排名的染色体形式存活下来,但是,弱势传播准则也会允许那些排名较低的染色体生存下去。前述选择模式的实践步骤来自进化的过程——当某一个体的适应性分数较高时,它就会被用来创造更多的后代,因此,它的后代占据着种群之中的较大部分;反之,当它的适应性分数较低时,它就只能被允许保留很少的后代或者没有后代,最终从种群当中消失。

    基因演算法则中的传播步骤是,根据其拟合度的分数来确定——每个现有染色体能够创建多少个新生代模式,例如,如果初始染色体库中只有10条染色体,其适应性评分从1到5(5是最好的),那么,按照拟合度降序排列的情境如下。

    传播准则表明:染色体繁殖时所获取的新生代的数量所相关的计算方法可以是每个染色体的拟合度乘以3且除以5;然后,新生代情境的数量与染色体的排序相同,如下所示。

    新生代的分数可以四舍五入或以截断(小数部分掉落)的方式取整。如果是四舍五入,那么排序最高的染色体将有3个后代;接下来的两个染色体可以有2个后代;余下的6个染色体可以有1个后代,总共为15个染色体。但是,由于染色体库的规模应该代表计算机 [2] 可用的最大空间,因此,我们必须将种群个体数固定为10,所以,底部的5个染色体不能存活。这里,我们应用原始染色体排序的发生而生成的新群体是:1、1、1、2、2、3、3、4、4和5,其中,来自拟合度最高值的染色体1的后代是最多的,因此它会有更好的生存机会,而接下来的几个个体也会有较好的生存机会,但是底部的个体则已经消失了。

    计算新生代数量的一种流行方式是:将一条染色体f的拟合度除以所有染色体F的平均拟合度,即

    当可供选择的模式很多且不只是10种可能性时,应用上述方法的效果更佳。然而,如果线性回归染色体的拟合度为4,并且所有染色体的平均值为2,那么线性回归模式将传播2个或3个后代,后代越多,在真正的进化以及基因演算法则实施的过程当中,其会具有更好的生存概率。

    20.11.5 染色体的匹配模式

    新生代染色体库可以继续运行下一个达尔文理论所相关的测试方法——交配。这里相应记住的是:基因演算法则是一种复杂的搜索方法,它需要以不同的方式结合那些已经通过适应性标准测试的个体基因,从而创造出更好的染色体,这与异花授粉的情境非常相似,即你可以继续对两种理想的、具有不同特征的鲜花进行授粉——希望获得具有最佳效果的新物种,而这是通过交配(也称为杂交)的方式来完成的。

    当进行匹配之时,我们必须小心地联合或交换整体的基因元素,而不仅仅是一个基因(记住个体被“&”符号隔开)。同时,构成个体的所有基因必须是一组的。如果我们将个体分开,那么其结果是,可能会生成一个较差的后代。现在,我们应用染色体1和染色体2,从而把第一个个体转换成:

    新生代1型:Exp,20,<,L,[1],&,Stoch,5,>,50,1

    新生代2型:MA,10,<,C,[0],&,RSI,10,<,50,1

    在实际的基因演算法则过程中,只有很小比例的新生代模式能够被匹配,也许是10%~15%。如果所有的新生代模式都可以被匹配,那么,我们就会失去最适合的组合模式。另外,我们不能保证任何新生代模式都会更好,因为新生代模式是随机选择的。由于拟合的染色体有更多的后代,所以在交配过程中,系统会有更多的机会去使用它们。

    20.11.6 基因突变情境

    突变是将新基因或基因组合引入基因库的过程。到目前为止,基因演算法则已经传播了拟合的染色体,然后,其通过配对方式将现有染色体的整体元素组合起来,进而创建新的染色体;最后一步是随机引入新基因,以便形成更好的染色体或更好的个体。

    新基因可以取代原染色体中的任何一个基因元素,然而,我们必须从该基因的相应列表中进行选择,如基因库的初始创建模式所示,例如,代表顺势系统计算方式的染色体的第一个基因只能从指定的五个选项当中选出。在基因突变时,随机选择相关的五种交易技术之一且不包括现有基因;同样,计算周期和交易规则的配置方式也是从对应的列表中随机选择。在通常情况下,染色体中一个个体只有一个基因会发生突变。然而,你却可以选择突变个体中的所有基因。应用改变染色体1中某项个体的所有基因的方法是:

    而第二个个体中的基因(Stoch,5,>,50,1)可能被突变为(RSI,10,>,40,1)。在所有染色体中,只有10%能够被随机选择用于突变模式——如果生成过多的突变情境,那么,你很有可能损失最好的染色体;如果突变情境太少,那么,你几乎没有机会引入一个新的更好的染色体。另外,在“配置”部分当中,我们对相同的平衡问题也进行了讨论。

    配置和变异这两种方法是于优化模式当中引入新特征且以各种方式组合相关特征所需的唯一工具。如果可以无限地重复这个过程,你就可以看到每一个可能的突变情境和组合模式所相关的结果。

    20.11.7 基因演算法则的收敛情境

    每一个新生代染色体都是通过基因演算法则所相关的程序而被创建的。通常,种群之中的个体数量会保持不变,但是,通过传播、交配和突变的模式,个体基因库的平均拟合度(成功测量)是不断增加的,相应的解决方案则是于以下两种情境之间而被发现的,即,

    (1)在创建几代新生代之后,整体基因库的平均适应度不会继续增加;

    (2)相对于具有最佳拟合度的染色体而言,它们没有改善。

    寻找最佳解决方案的模式需要处理多少染色体可以配对,以及多少新生代可以被突变的问题,同时,其还要处理好平衡的问题。如果只有一小部分(小于5%)发生变化,那么,你几乎没有机会创造出更好的新生代。在前述这种情况下,测试结果很快就会收敛,因为它们仅限于初始染色体库的选择和组合模式。而如果有大量的新生代(超过25%)染色体发生变化,那么,其间所存在的更大可能性是:最好的染色体将会丢失且相应流程将无法收敛。

    20.11.8 实证检验:绩效模拟测试

    应用基因演算法则的搜索技术需要遵循良好的测试程序才能获得成功,其中数据被分为测试部分和样本外部分,70%~80%的数据可以被测试;一旦找到解决方案,它就可适用于尚未测试的剩余20%~30%的数据。如果有大量数据,二者之间的比例则可能改变为60%-40%和50%-50%。样本数据的表现通常会出现恶化,但即使如此,其仍必须符合最低的成功标准,相应期望值的问题将在第21章讨论。同时,我们也可以应用前向测试方法;另外,测试程序相关的完整性的讨论和分析模式可以在第21章当中找到。

    20.11.9 染色体的多播功能

    基因演算法则和神经网络系统都能够在比连续搜索方法短得多的时间内找到相应的解。在有些情况下,解决方案可以在几秒钟内被发现,而不是几小时;然而,它可能不是最好的解决方案或只是一个比较好的解决方案。因为有太多的组合情境,所以你永远不会知道相应的解决方案是不是最好的,这将需要测试每一个组合模式。而最有可能的解决方案是:利用局部峰值,而忽略全局峰值,应用类比法可以很容易地在等高线上发现局部峰值。如果你将图上的某一随机点丢弃,那么你需要继续前往高点聚集处——寻找峰值;虽然你能够发现当期的高点,但是你仍然会错过那些位于山谷中的“更高地带”(可能是全局峰值)。

    因为传播、交配和突变的过程都是为了寻求具有更高拟合度数值,所以它们基本上都是从初始染色体库之中最佳的组合情境开始攀登的。其中,很有可能的测试结果是,在基因库的随机初始化期间,其不会引入能够生成最佳系统的趋势和指标的组合模式,且在随后的突变过程中也不会出现此种模式。

    这里,最有效的解决方案是多次运行基因演算法则或神经网络系统,从而查看基因库中的不同随机值于初始时刻能否导出相同的解。虽然这样依然不能保证你涵盖所有主要的组合情境,特别是在大幅变化的情况之下,但是,此种程序是规避严重疏忽问题的最简单的方法。另外,与顺序搜索方式相比,此类搜索工具的速度非常快,即使运行10次也只是需要很短的时间。如果联想到等高线图表,那么你就会发现:起始于10个不同点位的情境相较于从一个点位开始的模式而言,其发现最高峰值的成功概率要高得多。

    [1] 这种技术归功于John H.Holland,Adaptations in Natural Language and Artificial Systems(Ann Arbor:University of Michigan Press,1975)。

    [2] 第24章讨论了如何创建最大的库并保持该大小的需求。