English Русский Español Deutsch 日本語 Português
preview
利用灰色模型进行交易预测

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

MetaTrader 5 — 示例 |
219 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

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

由该公式清晰可见:只要已知参数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)的运行效果。

  • 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)
精通日志记录(第十部分):通过抑制机制避免日志重复输出 精通日志记录(第十部分):通过抑制机制避免日志重复输出
我们在 Logify 函数库中搭建了一套日志抑制系统。本文详细讲解 CLogifySuppression 类如何通过可配置规则过滤重复、无关日志消息,减少控制台冗余信息。同时本文还介绍外部配置框架、参数校验机制以及完整测试方案,保障 EA、指标开发过程中日志记录能力稳定、灵活。
人工原子算法(A3) 人工原子算法(A3)
本文介绍如何在 MQL5 中实现人工原子算法(A3)—— 一种受化学过程启发的元启发式优化算法。该算法只有两个可调参数:紧凑性和较小的种群规模,这保证了较高的运行速度,同时保持了足够的解质量。
我们如何打造最强大的机器学习驱动交易平台:通过档案、论坛与发布记录回顾 MQL 与 MetaTrader 的演进 我们如何打造最强大的机器学习驱动交易平台:通过档案、论坛与发布记录回顾 MQL 与 MetaTrader 的演进
MQL 演进的技术史:从功能有限的 MQL 和 MQL II 语言,到过程式的 MQL4,再到具有原生编译功能、丰富 API 和完备工程环境的面向对象的 MQL5。我们在此展示该语言的关键特性,以及其与 Python、OpenCL、ONNX、OpenBLAS、数据库、DirectX、代理式人工智能助手(Agentic AI Assistant)及模型上下文协议(MCP)的集成情况;其中,模型上下文协议(MCP)可将人工智能系统与终端、MetaEditor、市场数据、交易操作及开发工具相连接。本文探讨了 MetaQuotes 和 MetaTrader 的起源、MQL4.COM 和 MQL5.COM 的推出、各类锦标赛、Algo Forge 及其对生态系统的影响等档案资料。
从基础到中级:对象(三) 从基础到中级:对象(三)
在今天的文章中,我们将探讨如何实现一个极具吸引力和趣味性的交互系统,特别是对于那些刚开始学习 MQL5 编程的人来说。这里并没有任何全新的内容。得益于我对这个主题的处理方式,理解起来会容易得多,因为我们将通过实践,了解如何使用结构化的方法,以实用且引人入胜的目标来开发程序。