利用灰色模型进行交易预测
引言
现代金融市场波动剧烈且变化迅速,因此,精准及时的预测对交易决策至关重要。每一位交易者都希望研发并使用预测方法,以此预判未来价格走势,并实现收益最大化。
技术分析提供了种类繁多的预测手段,但很多预测方法都存在自身的局限性。例如,统计类预测方法需要大量历史数据,还有部分方法仅对平稳时间序列效果良好,诸如此类。
在此背景下,能够处理有限和残缺信息的预测方法越来越受到关注。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

我们对结果再做一步手工化简,公式就会呈现最终形式。
![]()
由该公式清晰可见:只要已知参数a和b,就可以估算价格数值。换句话说,可以对原始时间序列进行平滑处理。为了估算这两个参数,我们需要对微分方程进行离散化。为此,我们采用如下变换:
![]()
经过这一变换,即可得到离散形式的方程:
![]()
这类方程的系数可以很方便地通过最小二乘法(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)的运行效果。
|
| 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
注意: MetaQuotes Ltd.将保留所有关于这些材料的权利。全部或部分复制或者转载这些材料将被禁止。
本文由网站的一位用户撰写,反映了他们的个人观点。MetaQuotes Ltd 不对所提供信息的准确性负责,也不对因使用所述解决方案、策略或建议而产生的任何后果负责。
人工原子算法(A3)
新手在交易中的10个基本错误
从基础到中级:对象(三)