遗传算法及其在交易中的应用

简介

遗传算法似乎是一个专属于有经验的程序员或者量化研究员的花哨术语。虽然,咋一眼看起来,遗传算法对于一般交易员来说过于复杂,但是当你真正了解它的时候会发现其实并没有那么复杂。本文将带你一步一步认识遗传算法以及它在构建交易系统中的应用。

为了理解遗传算法的原理及其在交易中的应用,有必要了解一些基本的生物学理论。遗传算法的概念源于达尔文的“适者生存”理论。该理论指出,拥有具有适应自然环境变化的良好特质的物种将能够生存下来。每个物种的个体之间是存在差异的。这些能够更好的适应变化的物种,也会更有可能生存和发展。

从达尔文的理论来看,豹子能够跑得快,并不仅仅是他们的本能,也是因为只有跑得快才能捕获到更多的食物,那些动作不够快的豹子就不能为自己获得足够的食物。因此,尽管可能以前会有比你我跑得慢的豹子,但是今天只有速度足够快的豹子留在了这个世界。这个自然选择的过程解释了在我们这个不断变化的世界里,所有生物的进化过程。

世界在不断的变化,市场也一样。如果你正在读这篇文章,我相信你知道市场的变化有多么地快。没有策略能够不断的战胜其他人并保持盈利能力而本身并没有任何进化机制。也没有一个机构能够永远使用它们的“神奇”组合并保持账户的不断增长。有的策略能在外汇市场1分钟的时间周期下获利,但是在迷你标普500期货市场上失效。所有的市场参与者都需要不断的跟着市场的变化而变化。只有好的交易员和对冲基金以及他们的策略可以生存。我们需要一个随着时间的推移而不断动态调整的交易系统或策略。有时候我们需要调整策略的参数,而有的时候我们可能需要完全使用不同的规则来生成我们的交易信号。这时候,遗传算法可以派上用场了。

遗传算法本质上是一种优化方法,可以帮忙寻找合适的参数组合、策略规则、组合分配权重等等。相比标准的优化方法,它属于比较另类的一种。遗传算法模拟自然选择的过程——适者生存。当需要测试的不同组合的数量太大时,其他测试方法在实际交易中可能都不太实用。

在了解更多细节之前,让我们先对遗传算法的步骤有个大概的了解。
第一步,算法将从我们感兴趣的种群中随机生成第一代个体。每个个体都会被随机赋予一定的属性,比如身高、体重和年龄。
第二步,算法将把这些个体放到指定的环境,并让它们各自为生存而竞争。有些人能生活的更好而有些则难以为继。
第三步,得分排名靠前的个体(比如前20%)将会被算法选定,其他的都将被无情的淘汰。
第四步,算法将利用这保留下来的20%个体进行杂交,从而得到其他80%的种群,即得到第二代物种。
第五步,当新一代物种产生后,算法将重复第二到第四步以让物种一代一代的进化。最后,只有优良的个体存活下来。算法将把这些个体的信息反馈给我们,例如组合的最优参数、交易规则或是组合分配权重。

问题开始

首先,让我们来看一个常见的现实问题。假设我想找一个策略来交易美国的股票。为了简化说明起见,假设有4只股票(AAPL,GOOG,IBM,AMZN),都是我们比较熟悉且想要交易的,但我们尚无法确定哪只股票或哪个股票组合,适合我们的策略进行交易。我们可以把它设为我们交易系统中的一个非确定性变量,比如说基因1(Gene_1)。

这个变量被看作是遗传算法中的一个基因(Gene)。它包含哪个股票将进入我们的策略这样的信息。基因1(Gene_1)在最开始的时候将由算法随机赋值。

但是,我们应该注意到,为了让遗传算法正常工作,我们应该把每一个变量或参数编码成字符串,看起来就像0100100010110101101110101...也就是信息存储在基因和我们电脑中的格式。

然后,我们可以选择一种方法来分配值。例如,我们可以使用下表来表示Gene_1的值:

+



“0”表示策略将不会对这只股票进行交易,“1”表示策略将对这只股票进行交易。例如,如果Gene_1=0101,表示我们将对GOOG和AMZN进行交易,而非AAPL或IBM。该表将涵盖所有可能的股票组合。

其次,为了确定我们的交易频率,我们创建另一个基因(Gene)。变量Gene_2用于储存我们的交易频率信息。同样的,我们使用如下规则进行编码:

+



例如,如果Gene_2=0100,表示我们的策略将在1小时级别周期进行交易。我们应该注意到,如何选择规则来分配基因的值并不重要。只要我们能用字符串表示并知道它到底代表什么意思,我们就可以自由选择我们偏好的任何规则。

接下来,假设我们正在使用移动平均线交叉开发一种多头趋势跟踪策略(同样,我们用最简单的例子来做说明),在这种情况下,当短期均线上穿长期均线,我们买进股票。

在这里,我们应该确定两件事情:简单移动平均还是指数移动平均,以及长短移动平均线的周期。我们指定短期移动平均线参数为5,10,15,或20;长期移动平均线周期为30,40,50,或60。因此,我们创建第三个基因,在算法中Gene_3的编码规则如下:

+



例如,如果Gene_3=10110,这意味着我们的策略是当10周期指数移动平均线上穿50周期指数移动平均线时买进股票。

最后,对离场策略,我们使用固定百分比跟踪离场并对Gene_4编码如下:

+



如果Gene_4=011,意味着策略使用的是3%跟踪离场。

现在,我们已经创建了4个基因,因此,这4个基因可以形成一个染色体(Chromosome),它包含了我们交易策略的所有选择,所选择的股票、交易频繁、均线类型、计算周期、跟踪止损百分比等。

12144431_46ZS.jpg


因此,我们上述策略的染色体= 0 1 0 1 0 1 0 0 1 0 1 1 0 0 1 1

这种染色体,或策略,是第1步中所描述的“个体”。每一个基因是“个体”的一个“属性”或“特征”。每个基因的值给出了关于“属性”的信息,就像“身高”、“体重”、“年龄”这样的信息。

对于我们的交易策略的设计,算法首先将对染色体中的每个位置随机分配“0”和“1”,然后重复上述步骤,创建第一代的染色体(“个体”),在这种特殊的情况下,每一个染色体都是一个策略。每个策略的所有信息都存储在染色体的字符串里。我们生成45个“个体”作为我们的第一代策略。因此,我们就完成了第一步,并得到我们的第一代策略。

自然选择

这是前面所述的第二步。自然选择就是,我们把所有的“个体”放在野外,看看谁可以获得“更长”和“更好”。在我们的案例中,我们通过历史回溯测试来实现。

在测试中,我们将每个策略的染色体(字符串)输入回溯测试算法。回溯测试算法将读取字符串,并把它翻译为相应的策略并进行测试。经过测试,该算法将给出每个策略的业绩。在这里,你可以就如何评估策略使用任何你喜欢的指标或指标组合。在这里,我们使用最常见的夏普比率来举例说明。经过测试和评估,只有表现最好的才会被留下来,其他的都将被淘汰。

+


上图左边的45个染色体是由算法随机生成的,然后对历史数据进行测试得到夏普比率。染色体(策略)根据夏普比率进行排序。只有夏普比率排名前10位的染色体将被留到下一步。现在,我们完成了第3步。

配对

配对(Mating)又被称为杂交(Hybridization)。接下来,用从前面步骤中选出的优胜者进行杂交,并创建它们的后代。我们对优胜者从1到10进行重新编号,对它们进行配对以产生第二代策略。我们得到了45个新的个体。

+


在我们的例子中,父代是第一代中的优胜者。子代这些新策略是从父代繁衍下来的。但究竟两种策略是如何生成一个新策略的呢?了解杂交过程的细节对于在任何交易系统中实现遗传算法是至关重要的。这个过程包括两个部分:交叉和变异。

交叉

使用我们当前的例子,策略表示如下:

+


当这两个策略进行配对的时候,类似于在现实生活中,染色体中大约有比如说70%的部分会进行互换。也就是说,从某个随机点开始,染色体1的一些基因变换到染色体2的相同位置,而原来属于染色体2的基因则跑到染色体1,如下图所示。

+


正如我们看到的,两个策略的字符串从某个随机点开始进行互换。这样,我们就得到了两个新的策略。

变异

类似于遗传学中的变异,遗传算法中染色体的某些基因会由于一些未知的原因而突然改变。这个过程一般是进化的主要来源,因为它将引入一些新的元素进入系统。在遗传算法中,这个过程是一般是基于突变率而随机改变基因值,通常大约为0.05%-0.1%。也就是说,如果这个幸运的Bit原本是“0”,变异后将变为“1”,反之亦然。

+



交叉和变异后,我们得到了新一代的策略,并准备进行历史回溯测试,这是第4步。

请注意,我们最好将历史数据分为不同的时间段(可重叠),比如说时间段1,时间段2,…,时间段n。在每一轮测试第i代策略的时候使用第i时间段的数据,这样它可能包含时间段i-1的信息,但不会包含未来时间段的信息。这对于避免过度优化和前视偏差,从而得到一个可靠的结果非常重要。

经过上述步骤,遗传算法将一代又一代重复步骤2到步骤4,并返回一个优化的字符串。最后你要做的事情就是把这些字符串转换成关于策略设置或资金分配的有用信息。

结束语

此处描述的遗传算法只是为了让你对它如何构建一个策略有个直观的理解。算法中的每一步都有许多的变量。例如,你可以使用不同的机制来产生第一代“个体”。这个通常是合理构建模型并找到好的解决方案的最重要的一步。此外,还有许多其他的“目标函数”可以用于评估每一个策略的性能,有的人可能会认为换手率、最大回撤或CVaR,与夏普比率同样重要,因此可以给它们分别赋予一定的权重,作为一个综合指标对策略绩效进行评估。

到目前为止,你应该知道了遗传算法的基本思路,以及它是如何工作的。这是一个非常强大的计算工具,相比于传统的方法能极大地提高了优化的性能。希望你了解了足够的信息在你的交易系统中构建你的遗传算法。


转载于:https://my.oschina.net/darkness/blog/365723

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值