English Русский Português
preview
利用灰色模型进行交易预测

利用灰色模型进行交易预测

MetaTrader 5示例 |
34 0
Aleksej Poljakov
Aleksej Poljakov

引言

现代金融市场波动剧烈且变化迅速,因此,精准及时的预测对交易决策至关重要。每一位交易者都希望研发并使用预测方法,以此预判未来价格走势,并实现收益最大化。

技术分析提供了种类繁多的预测手段,但很多预测方法都存在自身的局限性。例如,统计类预测方法需要大量历史数据,还有部分方法仅对平稳时间序列效果良好,诸如此类。

在此背景下,能够处理有限和残缺信息的预测方法越来越受到关注。GM就是其中之一,当数据有限、可靠性差或者噪声干扰严重时,GM能够发挥很大作用,此类情况在金融市场中十分常见。本文将讲解GM的基础原理,以及如何将其用于金融时间序列预测。


经典GM(1,1)模型

GM可解决多种问题。借助GM,我们可以对时间序列进行分析、平滑处理,或识别价格走势的主要趋势;同时,该模型也可用于预测。GM最主要的优势是不强制要求时间序列具有平稳性。举例来说,简单移动平均线(SMA)只有在时间序列平稳、数值服从正态分布的条件下,才能发挥最佳效果。如果时间序列是非平稳的(也就是存在趋势),那么SMA会出现严重滞后。而GM不受上述条件约束,可以处理任意时间序列,至少理论上如此。灰色模型的使用条件简单,容易满足:

  • 时间序列样本长度至少为4;
  • 序列数值必须全部为正数,采样时间间隔相等,不存在数据缺失。

任意灰色模型的构建,第一步都要执行累加生成算子(AGO)。该运算的核心逻辑十分简单:将时间序列当前值与前面所有数值依次累加。后文我们把经过累加得到的新序列称为灰色序列(GS)。以5个价格数据为例,对其执行AGO运算的效果如下:

累加生成主要有两个作用:第一,降低噪声带来的影响;第二,生成的新序列可预测性显著提升,序列呈严格递增形态,形态如下图所示:

获得新序列数据之后,我们就可以构建GM(1,1)模型。该命名格式中,第一个数字代表微分方程阶数,第二个数字代表所处理灰色序列的数量。GM(1,1)模型由一个线性微分方程描述。

要解此方程,需要一套符号数学系统。我使用的是Maple。首先,写出初始方程,然后指定初始条件,进而求得解析解。在Maple中,完整操作流程如下:

de:=diff(x(t),t)+a*x(t)=b; #original equation cond:=x(1)=X[1];           #initial condition dsolve({de,cond},x(t));    #solving the equation


由此,我们得到了GS随时间变化的关系式。需要注意的是,下标t代表时间,从过去到未来递增,起始值为1。通过该方程,我们可以推导出价格变化的对应关系式:

在Maple中,该方程的求解方式如下:

eq:=price[t]=(b+(a*X[1]-b)*exp(-a*t))/a-(b+(a*X[1]-b)*exp(-a*(t-1)))/a;#difference between 2 consecutive GS values simplify(eq);#simplify the result

我们对结果再做一步手工化简,公式就会呈现最终形式。

由该公式清晰可见:只要已知参数ab,就可以估算价格数值。换句话说,可以对原始时间序列进行平滑处理。为了估算这两个参数,我们需要对微分方程进行离散化。为此,我们采用如下变换:

经过这一变换,即可得到离散形式的方程:

这类方程的系数可以很方便地通过最小二乘法(OLS)进行估计。接下来到了有趣的部分。我们可以得到GS的平滑估计值,但这种平滑更多只是学术上的演示意义,在实践中几乎没有用途。

或者可以直接对原始时间序列进行平滑。

现在,我们可以进入下一步。您应该还记得,价格计算公式对时间的增长没有任何限制。换句话说,我们可以按需继续向后构造新的时间序列。这样就能得到价格走势预测。当然,这一预测建立在一个前提之上:原始时间序列的特征保持不变。下面我对未来5个周期进行预测。

由此可见,该模型对线性趋势的拟合效果很好,但也正因如此,它可能会忽略其他重要的价格波动。下面我们尝试使用更复杂的GM,看一下表现如何。


GM(1,1)改进版

经典GM(1,1)最简单的扩展形式称为滚动灰色模型(RGM)。其核心思想非常简单:选取多个不同周期的GM模型计算结果,然后取平均值。采用这种方式,可以得到更平滑的价格估计值,预测曲线也会更加平滑。我们用周期4至24的多个GM(1,1)组合构建一个RGM,显示在图表上的效果如下:

RGM模型还可以做进一步优化。其核心思路是为每个GM分配不同权重。权重可以是固定值,也可以根据预测误差动态调整。第一种情况很简单,我们可以按某种规则人为指定权重,然后对多个模型结果进行加权求和。

如果权重随预测误差自适应变化,就得到了自适应RGM,此处,每个GM的权重可按如下方式确定。首先,分别计算每个GM的预测误差:

模型的权重与误差相关 —— 误差越大,权重越低:

这样一来,RGM会更侧重那些与实际价格走势最吻合的趋势,预测质量也会相应地提升。

另一种进一步扩展的方法,是先对原始时间序列进行预处理。例如,不直接使用价格,而是先用SMA平滑后,再输入GM(1,1),结果会更加平缓。在实际应用中,该方法可用于确定趋势边界。

趋势通道也可以用另一种方式构建,首先计算GM(1,1)的参数,这里,我们只需要增长参数a。之后对每一个真实价格,计算其对应的b参数:

我们只关注该参数的最大值与最小值,利用它们就可以构建趋势通道的上轨与下轨。

该通道在图表上的效果如下:

GM有非常多的改进版本。一部分仅适用于特定类型的时间序列,另一部分如GM(1,1)则通用性较强。所有这些改进的目标都是一致的 —— 提高预测精度,更好地捕捉时间序列特征。


离散型GM

求解微分方程的形式固然优雅,但模型只要稍加复杂,解析解就会变得极其繁琐。此外,参数估计过程还可能出现数值不稳定的问题,小数点后某一位的微小误差,就可能导致整个图表失效。

离散型GM则不存在这些问题。下面我们为GM (1,1)构建一个离散版本,该模型可以用如下线性递推方程表示:

简单来说,就是建立GS当前值与前一期值的线性关系。该方程的参数估计并不复杂。接下来,我们需要求解方程参数:

re:=x(n+1)=a*x(n)+b;              #original equation

cond:=x(1)=X[1];                  #initial condition
simplify(rsolve({re,cond},x(t))); #solving the equation

最终,我们会得到一个直接给出GS值的显式方程。

通过该方程,我们就可以得到价格的估计值。

基于该模型的指标效果如下:

实验结果是成功的。现在,我们尝试构建GM(0,2)模型。从命名格式可以看出,该模型不再使用微分,同时纳入的影响因子数量有所增加。顺带一提,该模型仅存在离散形式。

该模型会用到两组GS。假设模型周期为N。第一组GS按常规方式构建,从下标为N‑1的价格开始计算。构建第二组灰色序列(记为Y)时,价格序列整体向后偏移一根K线,从下标为N的价格开始。该模型的方程如下:

当然,我们可以写出递推方程并求解。但如果只做单步预测,该模型的运算会大幅简化。首先,使用OLS估计模型参数。X序列无法向后递推,因为未来价格尚未可知;但Y序列的下一期价格是已知的,因此,我们可以算出Y的新序列值。

得到Y序列的新值之后,就可以进一步估算X序列的未来取值。

在此基础上,完成价格预测就不再困难。基于该模型实现的指标效果如下:

GM(0,2)模型与线性回归十分相似。增加纳入计算的GS数量,可以提升模型灵活度,改善预测效果。当指标周期较短时,这种提升会尤为明显。

接下来,我们构建离散GM(1,2)模型。它融合了前面两种模型的思路,公式表达如下:

换句话说,就是针对两组GS做线性回归。利用回归得到的参数,即可估算未来价格。基于该模型的指标效果如下:

采用离散的方式,可以很方便地构建高阶模型。这里以GM(2,1)为例。如果采用传统方式求解、估计参数,难度很高。但转为离散形式之后,方程将变为:

求解该模型的参数并不复杂,为简化处理,我们同样只做单步预测。图表上该指标的表现如下:

该指标并不适合当作平滑指标使用,但它对市场状态的变化响应速度很快,因此值得关注。如果想要曲线更加平滑,可以考虑使用滚动灰色模型(RGM)。

综上所述,离散型GM的计算逻辑更加简单,这是它们毋庸置疑的优势。但这种简便也带来限制:预测范围不能太长。离散模型大多只在单步预测时表现良好,强行拉长预测周期会带来大量额外复杂度,在实际交易中实用性很低。


结论

GM在金融时间序列建模与分析方面是具有潜力的工具。GM可以用于序列平滑、趋势识别、价格预测,也可以用来绘制趋势通道。

GM的突出优势是可以根据几乎任何外部条件进行调整和改造,其显著缺点是部分方案数学运算复杂。无论如何,GM仍值得深入研究,交易者需要筛选出最适配自身场景的模型变体。

本文附带以下程序文件:

名称 类型 描述
sGM 脚本 该脚本演示了GS的构建以及使用GM(1,1)模型进行平滑的过程。如果启用ScreenShot(截图)功能,将图片保存至Files文件夹中。
GM11 指标

该指标演示经典版GM(1,1)的运行效果。

  • iPeriod:指标周期;
  • Forecast:预测范围;
  • Shift:指标偏移量。
RGM11 指标 该指标显示多个GM(1,1)模型结果的平均值。
GM11sma 指标 以SMA值替代原始价格作为模型输入。
GM11Ch 指标 该指标基于GM(1,1)构建趋势通道。
DGM11 指标
离散版GM(1,1)模型。
DGM02 指标
二元线性回归的等效实现。
DGM12 指标
包含两个输入因子的离散型GM(1,1)模型。
DGM21 指标
二阶GM的离散等效实现。

本文由MetaQuotes Ltd译自俄文
原文地址: https://www.mql5.com/ru/articles/19012

附加的文件 |
sGM.mq5 (2.25 KB)
GM11.mq5 (6.85 KB)
RGM11.mq5 (8.01 KB)
GM11sma.mq5 (3.64 KB)
GM11Ch.mq5 (4.63 KB)
DGM11.mq5 (3.37 KB)
DGM02.mq5 (2.98 KB)
DGM12.mq5 (3.43 KB)
DGM21.mq5 (3.26 KB)
交易策略 交易策略
各种交易策略的分类都是任意的,下面这种分类强调从交易的基本概念上分类。
人工原子算法(A3) 人工原子算法(A3)
本文介绍如何在 MQL5 中实现人工原子算法(A3)—— 一种受化学过程启发的元启发式优化算法。该算法只有两个可调参数:紧凑性和较小的种群规模,这保证了较高的运行速度,同时保持了足够的解质量。
新手在交易中的10个基本错误 新手在交易中的10个基本错误
新手在交易中会犯的10个基本错误: 在市场刚开始时交易, 获利时不适当地仓促, 在损失的时候追加投资, 从最好的仓位开始平仓, 翻本心理, 最优越的仓位, 用永远买进的规则进行交易, 在第一天就平掉获利的仓位,当发出建一个相反的仓位警示时平仓, 犹豫。
从基础到中级:对象(三) 从基础到中级:对象(三)
在今天的文章中,我们将探讨如何实现一个极具吸引力和趣味性的交互系统,特别是对于那些刚开始学习 MQL5 编程的人来说。这里并没有任何全新的内容。得益于我对这个主题的处理方式,理解起来会容易得多,因为我们将通过实践,了解如何使用结构化的方法,以实用且引人入胜的目标来开发程序。