内容发布更新时间 : 2025/2/21 3:31:27星期一 下面是文章的全部内容请认真阅读。
基于浮点数编码的遗传算法来实现股票趋势的预测
程强1+, 张永昌2+, 李冰季+3 123
?
?
(华中师范大学 计算机科学与技术系,武汉 430079) (华中师范大学 计算机科学与技术系,武汉 430079) (华中师范大学 计算机科学与技术系,武汉 430079)
Technical Indicators Optimization in Stock Trend Following Using Float-encoding Genetic Algorithm*
Chengqiang1, Zhang Yongchang2, Li Binji3
(Department of Computer Science and Technology, Centre china normal University, Wuhan 430079,China) (Department of Computer Science and Technology, Centre china normal University, Wuhan 430079,China) (Department of Computer Science and Technology, Centre china normal University, Wuhan 430079,China)
123
Abstract: Stock trend following plays an important role in algorithmic trading . In this paper, we establish a model employing Float-encoding Genetic Algorithm (FGA) to determine when to buy and sell calledP&Qfollowing the amount of an uptrend and downtrend respectively. In our model, we firstly smooth the closing price by Exponential Moving Average (EMA) and partition the sample data into two parts respectively for training and testing. Then in the training section, the P&Qvalues are optimized with the objective of gaining highest profits by FGA within the given scopes based on the risky that users can take. Finally we examine the performance of the model by trading on the testing data. The experiment conducted on Hang Sang Index (HSI), Hong Kong shows that the model is very promising.
Keywords: Stock trend following,P&Q, Float-encoding Genetic Algorithm, Exponential Moving Average 摘 要: 股票趋势预测在遗传算法交易中起到了重要作用,在这篇文章里,我们建立一个根据相对的上升量和下降量来决定什么时候买和什么时候卖的所谓P&Q点的基于遗传算法的模型。在我们的模型里,我们首先利用指数平均来平滑我们的股票数值而且我们把样本数据化为两部分,一部分用来训练模型,另一部分用来测试模型。在训练阶段,这个P和Q值根据我们获得的股票收益的最大值而用遗传算法来优化的,当然这也与我们设计的能够承受的最大风险率相关。最后我们利用测试数据来交易,通过这我们可以检验这个模型的表现怎么样。这个实验是基于恒生指数的,通过实验,反应这个模型非常有前途。
Keywords:股票趋势预测,p&q,遗传算法的浮点数编码,指数平均平滑
1 引言
股票趋势的跟踪和趋势的预测变比而言是一种不同的交易技巧。它根据市场的趋势和基于已经规定的原则做交易。这个原则就是什么时候买和什么时候这个核心问题。因此在这篇论文里我们建议一个P和Q的技术指标来指明上升的或者下降的量,这个量用来激发买或者卖的信号,这个信号是由基于浮点数的遗传算法决定的。
一旦用户根据他们所能承受的风险而给定P和Q值,我们就会根据p和Q的范围以及过去十年使这个收益达到最大值的原则来精确计算出P和Q的值。然后用户就可以根据这两个值来做交易。不仅如此,这两个值会根据最新的股票数据来定期更新。
这篇文章提供遗传算法来优化P和Q的值。遗传算法的能力是基于自然和人类基因的机制。它能根据以前的解决方案来改进未来的解决方案的变现。遗传算法的第一个优势是它针对搜索空间利用随机操作来代替确定的准则。例外它的一个优势是并行搜索更多的优化解。
传统的基于二进制表示的遗传算法面对多维或者大取值范围的数据有很多缺点。举一个例子,在我们的模型中,如果用户提供P和Q值范围比较大得话。对应的用二进制表示的染色体就会非常长,这对于我们的计算会浪费很长的时间。然而对于我们在浮点数编码用到的浮点数编码的基因就可以避免上面提到的问题,因而它能为我们的模型提供一个令人满意的结果。
在这篇文章里,我们首先介绍趋势跟踪的概念,然后我们是用来平滑我们股票市场的股票价格的指数平均平滑方法的介绍,接着是在我们模型中用到的用来优化P和Q值的浮点数表示的遗传算法。最后是我们在恒生股票的实验和我们最终的结论。
2 股票趋势跟踪的交易模型
2.1 取票趋势跟踪
趋势跟踪即指跟趋势一起走,或者就是努力跟踪方向。如果市场在上升,那么一个人有理由相信它会
继续上升一段时间,如果市场在下降,他们就会相信市场还会持续下降一段时间,因此他们开始卖出或卖空。趋势跟踪来源于股票市场交易的“势头理论”,这个理论指出,只要上升,就会上升一段时间,只要下降,就会继续下降一段时间,因此我们可以利用这种趋势跟踪来获益。 2.2 指数平均平滑
在真实的市场中,股票价格波动不是线性的,相反它非常不稳定,即价格会重复的上升或者下降。因此我们不可能(不现实)在这种趋势下来应用P和Q值。因此,我们需要通过技术指标来平滑这种波动的指数价格。公式如下:
EMA(t)?(price(t)?EMA(t?1))?2n?1?EMA(t?1)
其中:t是交易的那一天,n是平滑之后的那一天,n的值越小,那么EMA数值就能更好的跟踪股票价格。Price(t)就是t这一天股票的价格。 2.3 遗传算法模型中的浮点数编码
同遗传算法中的二进制编码不同,浮点数编码在染色体中应用真实的数值和一些特殊的操作。这样它避免了二进制编码中编码和解码需要耗费大量计算时间和存储空间。在二进制遗传算法中,有三个基本的操作:选择,交叉,变异。每一代中,每一个个体的适应值被计算出来。适应值更大的个体在进化中可以更好的生存,同时,适应度更差的个体会更容易被清除出来。 2.3.1 遗传算法染色体的编码
正如上面所说,我们在遗传算法中迭代的目的就是要找出P和Q的两个值,这个值会使我们的收益值达到最大,当然P和Q的范围是根据用户所能承受风险确定的。染色体如下:
Q P
在遗传算法的迭代中,P和Q值会变化,使适应值最大,一旦它满足最终的条件,迭代就会结束。
2.3.2 遗传算法的适应度函数
适应度函数是用来衡量个体的生存能力的。这意味着适应度更大的个体在竞争中就可以更好的生存下来,在这篇论文里,适应度函数就是在训练模型阶段股票获得的最大总收益。在我们的实验中我们仅仅应用卖出价格和买进价格之间的差值。公式如下:
Nprofits??(sellingprii?1ce(i,t)?buyingprice(i,t))
''其中:buyingprice(i,t)和sellingprice(i,t) 指的是在第i次中卖出价格和买进价格。t,t’是对应的时间。N是在训练数据中交易的次数。 2.3.3 选择
选择的目的就是要在进化中选取适应环境最好的个体,这些被选中的个体会根据他们适应值被存进交配库里。在这篇论文里,我们采取轮盘赌选择算法来执行这个操作,描述如下:
(1) 计算每个个体的适应值。 (2) 计算每个个体的比例:
Pr(i)?fitness(i)
?Npi?1fitness(i)(3) 计算每个个体的选择概率:
P(i)??ij?1Pr(j)
(4) 然后在(0-1)之间任意选取一个R。选择满足条件P(i)?R?P(i?1)的第(i+1)th个体,
重复这个步骤直至制定的个体被选择到。
2.3.4 交叉
在遗传算法中交叉是一个特别重要的操作。在指定的P概率下,这是一个基因的结合并产生新个体的过程,交叉的过程如下:
?P1'?(1??)?P1???P2,?'?P'2?(1??)?P2???P1,?''?if(Pi?L)thenPi?L,i?1,2?''?if(Pi?R)thenPi?R,i?1,2'0??,??r
其中:P1,P2是父代的基因,P1’,P2’是交叉后对应的后代的基因,?,?是在(0-r),r<=1。L,R是P的取值范围。Q的情况和P类似。 2.3.5 变异
变异是一种使染色体中一个或多个基因从当前的状态中变化出来,这样就扩大了搜索空间,这样有助于减小操作陷入局部优化最优解的概率,过程如下:
?P?k?(R?P)??,when'P???P?k?(P?L)??,whenrandom(0,1)?0,random(0,1)?1
其中:k是恒定的学习参数。Q的情况类似。