使用贝叶斯分类和基于奇异频谱分析的指标预测市场走势

Roman Korotchenko | 17 七月, 2017


概述

如今, 算法交易约占证券交易所交易的 60-70%, 在 FORTS 和外汇市场约占 90%。有鉴于此, 机器人在实际交易量中的份额增加。这是由于现代市场上短线波动极其活跃, "买入并持有" 的策略事实上不再适合。高效交易需要从被动投资转向主动交易。现代市场中成功基于使用有效的算法和一系列系统规则, 以便增加成功交易的数量, 并减少失败的数量, 最大限度地减少亏损。

达成此目标的一种有前途的方法是建立高效交易的推荐制系统, 将奇异频谱分析 (SSA) 的预测能力和贝叶斯原理基础之上的重要机器学习方法结合在一起。所选方法的价值在于, 数据的处理单纯地基于统计分析方法, 而非毫无根据的假设。这可清晰认识此方法的能力和局限性, 及创建自动交易系统的前景。

在开发此系统的过程中, 焦点是时间帧单位的尺度, 在 5 分钟到 1 小时的范围之间。在大部分成功率统计方法的理论描述当中, 基础尺度越大越受欢迎, 比如小时和日线 (由于混沌成份的影响减少)。然而, 这种方法在个人投机交易的实际操作中几乎从无应用。


应用 SSA 并预测价格系列的特点

SSA 方法可以解决这类问题:

  • 时间序列主要成份的分离 (趋势, 周期变化, 振荡) 和噪音过滤;
  • 搜索周期性;
  • 通过限定成份集合来平滑源数据;
  • 预测所观察依赖的进一步行为。


当处理非平稳序列时, SSA 是少数可用的统计方法之一。这种系列的完美实例就是包括趋势, 爆发, 脉冲排布的市场价格序列。与此同时, 价格在独立的非随机因素影响下形成, 当然影响和持续时间略有不同。假设市场大部分时间依赖于这种力量, 这就有可能使用与 SSA 方法相对应的基于不同尺度分量总和的模型。

有关 SSA 及其 "卡特彼勒" 版本的数学基础的信息, 可在 (参见文章附件中的参考清单) 里找到 [1]。从实际的角度来看, 关键是应注意到, 直到最近, 影响 SSA 在数据处理中流行的主要原因之一是缺乏与 FFT 类似的快速算法。这一难题已不复存在 — 这类算法已经开发出来, 且它们的有效性已得到证明 [2] (参见文章附件中的参考清单)。

使用 SSA进行预测使用隐藏的周期性模型: 将数据序列分离出分量, 在分析期间已确定其行为, 可根据行为参数扩展这些分量并汇总结果。产物是预测结果, 其品质取决于初始分量集合所定义的原始数据的好坏。自然地, 这种预测对于一个波动混乱的序列来说是不可靠的, 但对于在稳定因素影响下且噪音相对较小时形成的价格是合理的。此外, 在处理交易不活跃的金融工具时, 不宜依靠统计分析。在此情况下. 偶然因素和 "主力" 参与者的影响是不可预知且危险的。


结合指标来提高预测的可靠性

根据研究思路, 开发了三款预测指标。趋势识别及其预测 - 基于快速变换的 SSA 趋势预测和快速预测, SSACD (MACD 的改编) 和 SSA 随机振荡。每款指标都有两种变体: 简化和扩展。 

由于所有指标使用相同的数据, 但针对不同的处理特点, 每款指标都有其优点和缺点。结合所有指标, 实现协同效应, 增加总体情势评估的效率, 健壮性和准确性, 是一种很自然的愿望。

从投机策略的视角来看, 显然且必要的信息在于回答问题: "价格在不久的未来将会何去何从?"。有三种选择: 价格会上涨, 波动或下跌。

对于依据趋势识别预测价格的指标, 显然, 当价格上涨或下跌时, 导数的相似值必须或正或负。通过设置 EPS 的误差等级, 可以定义一个条件: 如果 "导数" 邻近零点, 半径为 epsilon (EPS), 那么价格变化可以忽略不计。

SSACD 指标是 MACD 的改编版, 为避免信息延迟经过调整, 这在移动平均线中很常见。为了防止使用太多的术语, 下文将其称为 MACD。MACD 在图表上显示为直方图和其平滑指数移动均线, 称为信号线。相应地, 平滑线的变化相对于 MACD 稍有延迟。因此, 如果价格上涨, 则 (MACD-Signal)>0, 如果下跌, 则 (MACD-Signal)<0。为 EPS 设置邻近零点的确定范围, 定义不稳定价格行为的过渡区域。

SSA 随机振荡指标是经过改编的快速随机振荡器, 与之前的情况类似。随机振荡器的曲线通常与其局部趋势相同。即为, 形成价格上涨, 下跌和不稳定行为的条件可以通过随机指标的 "导数": 在 epsilon 邻近范围之内大于或小于零。

由于指标提供了局部预测, 所以上述测量值的评估可给出价格行为在不远未来的信息。匹配的指标值能够增加预测可靠性, 并降低误差概率。

为了验证所选方法的正确性, 有必要评估如何组合指标来减少历史数据上的严重预测误差数量。误差是指短期预测指示一个方向, 而价格变化却反方向发展的情形。

使用上述指标的用户可能会对选择的控制参数值感兴趣, 以及为什么。但既然最感兴趣的是最近预测点, 所以无需为这些参数指定长期选择。指标的适当参数, 其行为应与该序列的主要 (非预测) 部分相一致, 结合价格行为的平滑度和精细度, 并适用于广泛的金融工具类别。以下应予以选择:

  1. 基于趋势预测价格 (SSA 快速趋势预测, 版本 2.5):
    算法: 复发性预测,
    N: 数据片段 = 256,  
    时间依赖性滞后 = N/3,
    趋势    高频限制= 0.25,
    预测 高频限制= 0.25,
    预测变换 = S[i]/Max(:),
    预测平滑 = 平滑 MA(3)。
  2. 对于 SSACD 预测 (受限) 版本 2.5:
    算法: 复发性预测,
    N: 数据片段 = 512,  
    时间依赖性滞后 = N/4,
    快速趋势 高频限制 = 0.4
    慢速趋势 高频限制= 0.6
    信号 SMA 周期 = 4
    数据准备 = {ln(S[i]-Smin+1)}/Max(:)
    预测准备 = S[i] /Max(:)
    预测平滑 = 平滑 MA(3)。
  3. 对于 SSA 随机振荡 (受限) 版本 2.0:
    算法: 复发性预测,
    N: 数据片段 = 256,  
    时间依赖性滞后 = N/4,
    %K 高频限制 = 0.3,
    %D 高频限制 = 0.6,
    数据准备 = S[i] /Max(:),
    预测平滑 = 平滑 MA(3)。

用于分析的历史数据片段已经在不同的时间间隔当中进行:

对于周期为 M5, M15, H1 的 GOLD 期货;

BRENT — M5, M15;

Si-USD/RUB — M15,

对于 EUR/USD 外汇报价 — M15。

不改变指标参数, 对不同周期、不同金融工具的交易进行处理, 可以研究预测值的稳定性和品质。在长度约为 1000 点的数据序列上迭代, 并在每个历史点上进行预测计算, 这提供了预测与真实进行比较的机会。

我们用图表上的收盘价数据来描绘指标预测的结果。



图例 1. 实际收盘价与其预测值, 和经过三点平滑的预测值的比较片段

图例. 1 显示 "按趋势" 预测的大部分时间略有延迟。这并不奇怪, 因为趋势为基础的价格预测是针对不同金融工具的应用多功能性设置的, 因为高频振荡的绝大部分被滤除, 因此它是平滑的。对于其它金融工具 (BRENT, GOLD), 在不同的时间帧 (5 分钟和 1 小时) 上的预测行为也类似。

我们拿另一款指标 (MACD-信号) 的预测评估与其实际值进行比较。


图例 2. 根据 MACD 指标, 价格演变方向的实际值和预测值的片段 


图例 3. 价格变化形成的趋势与根据 MACD 预测的价格变化保持一致

方向不确定度 (EPS) 设为 0.25, 此值来自序列值 (MACD-信号) 经归一化后 (按照最大振幅) 的标准。

在 "SSA 随机" 指标的帮助下, 在每个点上形成的随机值与初步预测值的比较片段如下图所示。


图例 4. 随机指标的实际值和预测值 

图例 2 和 4 说明根据 SSACD 和 SSA 随机指标数据产生的实际结果与预测值几乎完全相同。当针对许多振荡器应用 SSA 进行预测时, 这是可以预期的。

由于图例 1 呈现的价格预测包含一组方向上的错误, 从中我们可以看出, 指标组合是如何减少这种错误数量的。图例 1 中实际价格和预期价格的差值是无关紧要的, 因为当立场一致时它不会造成损失。 

这些数值: (MACD-信号), 真实和预测价格序列的差分导数, 以及随机值, 三点平滑。早前已定义条件的一致性, 表明价格变化的方向, 进一步用于分析其组合的效率。 


图例 5. 使用这三款指标时, 价格变化的实际和预测方向并行

 

图例 6. 如果仅使用基于趋势的预测, 价格变动方向的预测会出现相当大的误差


图例 7. 基于趋势和 (MACD-信号) 的价格预测组合中的预测误差


图例 8. 基于趋势、MACD 和随机指标的价格预测组合中的预测误差

图例 6 — 8 展示使用三款指标的协同效应 — 在预测进一步的价格变动方向时的粗略错误数量不坏于指标函数商定值的 5 至 7 倍。 


基于指标预测值的可能价格走势的贝叶斯分类器

贝叶斯定理是在概率论的基础课程里中提出的, 关联条件  事件 x 的发生概率必须是事件 y 已经发生。

根据定义:  ,  此处 是 x 和 y 的联合概率, 而 p(x)p(y) 是每个事件的单独概率。相应地, 联合概率可以用两种方式表示:

贝叶斯定理:

贝叶斯定理

 

对于基于指标预测价格走势方向的研究情形, 定理可以用以下形式进行重写:


此处:

V — 对应于给定方向上的实际价格变动 (其变化的迹象) 的事件。三个可能的选项: V1= -1 "向下", V2 = 0 "不确定", V3 = +1 "向上"。

F — 对应于价格方向预测, 或已预测导数符号的事件 (三个可能的选项: F1 = -1 "向下", F2 = 0 "不确定", F3 = +1 "向上")。

M — 对应于 (MACD-信号) 符号预测的事件, 与价格行为一致 (三个可能选项: M1 = -1 "向下", M2 = 0 "不确定", M3 = +1 "向上"),

S — 对应于已预测随机导数符号的事件 (三个可能选项: S1 = -1 "向下", S2 = 0 "不确定", S3 = +1 "向上")。

公式的左边部分可以转换为人类可读的形式, 如下所示: "如果预测指标给出 F, M, S 的具体值, 那么价格向 Vk={-1,0,1} 方向移动的概率是多少?"。

接着, 为了简化表述, 我们令指标取值为 -1, 0, +1, 这意味着导数的符号或 (MACD-信号) 的符号。 

为了评估并比较价格是否下跌、上涨或仍然微弱波动的概率, 有必要了解公式右侧的含义。若做到这一点, 需要解决两个任务:

  1. 针对历史数据进行 "学习",
  2. 研究学习结果在训练间隔之外数据上的 "稳定性"。

在不同的数据片段、不同的时间帧和金融工具上进行多种训练。训练样本的长度为数百根柱线。结果证明是类似的, 正如所预期的那样, 这是由于本文第三部分研究的指标所选参数的普遍性。

我们来描述期货 USD/RUB 15分钟 "收盘" 价格数据的分析结果。 

我们限定自己只研究价格 "上行" 和 "下行" 的可能性, 因为这两个值被用于开仓或平仓交易的决策基础。

在价格实际下跌的情况下, 指标信号也必须为负 ("向下") 或接近零 ("中性"), 这是可以理解的。当价格下跌时, 将由联合预测概率的首次条件评估事件进行确认。不过, 从 USD/ RUB-15M 期货数据的培训结果中获得的其它概率指示出偏离预期值的可能性, 如表 1, 2 所示。

表 1 和 2


基于贝叶斯公式的计算结果得出一份根据指标值的实际走势概率分布的有趣信息。表 3 和 表 4 示意根据预测值价格下行 (事件 V1 = -1) 和上行 (事件 V3 = +1) 的最大条件概率。

表 3 和 4


分类级别很简单: 如果 "向下运动" 事件的条件概率在当前时刻大于 0.5, 同时大于 "向上" 运动的概率, 走势预测就会向下。价格 "向上" 运动的条件与此类似。

此处是带有分类标记的价格图表形式的培训结果。

图例 9. 根据培训数据计算的 USD/RUB-15 期货价格走势的预测分类 

图例 9 中所示的分类结果看起来值得注意: 最近未来方向的预测, 结论将会快速切换移动方向指针并维护它。 

主要问题还有待进一步验证: 由条件概率矩阵表示训练结果的健壮性 P(V|FMS), 令它们可以传播到外部情况 (相对于训练数据)。

其它时间帧内的其它金融工具的历史序列将被用来检查其健壮性。利用每个独立时刻的已知指标预测值, 使用已准备就绪的为 USD/RUB-M15 期货所计算的条件概率矩阵, 按照方向进行分类。将分类结果与实际情况进行比较。

图例 10. EUR/USD-15M 报价走势的预测分类 (已在 USD/RUB-15M 期货上训练)


图例 11. GOLD-15M 期货的预测分类 (已在 USD/RUB-15M 期货上训练)


图例 12. GOLD-5M 期货的预测分类 (已在 USD/RUB-15M 期货上训练)


图例 13. BRENT-5M 期货的预测分类 (已在 USD/RUB-15M 期货上训练)

结果显示在图例 10 — 13 看起来很乐观。使用 USD/RUB-15M 期货准备的分类器经验证适用于其它时间帧和其它金融工具。


基于贝叶斯分类器的推荐制系统

所展现的分类器可以用作设计建设性推荐制系统的基础, 然后是具有很少控制参数的交易系统。有限数量的参数能够有效的优化。

为避免毫无根据, 我们来研究系统对历史数据的应用。当然, 结果与真实情况尚有差距, 因为一切都从根本上简化了, 但它显示了系统的潜力。

它有 4 个主要控制参数:

  1. 风险比率 — 停止级别作为波动倍数。
  2. 固定风险     — 当开仓交易并持有盈利仓位时允许在反方向上波动 (作为波动的倍数)。
  3. 最小交易概率 — 允许的持仓概率。
  4. 交易确定概率 — 在此推荐交易的概率。

在这种情况下, 将会通过所处理数据片段上的开盘价和收盘价差价的均方根值来衡量波动率。停止级别与先前收盘价挂钩, 并在一个方向上平移。入场和离场的决策将在 柱线收盘之后 制定。

在 USD/RUB-15M 期货数据上训练的推荐制系统结果将用来模拟单独训练 GOLD-15M 期货, 数据来自图例 11 所示历史收盘价以及由控制参数 3 和 4 控制的预测分类。下面的图表显示依据 "时间" 的盈利能力的变化, 以柱线数量衡量。



图例 14. 交易推荐概率值对于 GOLD-15M 期货独立交易 (已在 USD/RUB-15M 期货上训练) 的盈利能力影响



图例 15. 停止级别参数对于 GOLD-15M 期货独立交易 (已在 USD/RUB-15M 期货上训练) 的盈利能力影响



图例 16. 交易推荐概率值对于 EUR/USD-15M 报价独立交易 (已在 USD/RUB-15M 期货上训练) 的盈利能力影响

显示在图例 14 — 16 中的类似结果表明盈利稳定增长且无重大损失。参数值对盈利能力增长的影响表明优化效率的可能性。 


快速评估市场动态的程序

下一步工作是描述自动交易系统的结构, 规则和测试结果。不过, 提供一个设计用来在实时交易中快速评估状况并 "建议" 的软件模块是合乎逻辑的。此工作附带了一个解决分类问题的模块, 可与不同的指标对一起使用: a) SSACD 预测 (有限)SSA 随机 (有限), b) SSACD 预测SSA 随机。SSACD 必须至少为版本 2.5, 且随机 — 至少 2.0。若使用完整版本的指标情况下, 程序能够更好地定制分类控制参数, 并提供针对不同数据的训练选项, 这样就可以为预测分类选择已准备好的 "最接近" 模型。"按趋势" 预测在模块内部执行, 因此, 不需要单独的 SSA 快速趋势预测 指标。

但应注意, 程序使用了合并模式, 因此无法保证, 但对于评估活跃交易工具的价格发展是有帮助的。不应依赖少量交易情况下的价格统计预测, 因为个别的刺激可能会产生极大的影响。这同样适用于具有价格 "缺口" 行为的时间间隔或周期。

专家智能交易系统称为 SSA 贝叶斯观察者。在启动时, 它可为上述参数提供数值设置。

图例 17. 启动 SSA 贝叶斯观察者程序, 参数省缺

除了观察者的主要数值之外, 还可以设置基于趋势的预测指标 SSACD 和 SSA 随机指标的参数。它们的含义和目的已经在指标本身的描述中进行了讨论, 但可以依赖于预设的省缺值。

如果最新版本的 SSACD 和 SSA 随机指标已经安装在系统中, 用户将看到类似于以下内容的界面:


图例 18. SSA 贝叶斯观察者 程序的界面

当程序运行时, 可通过选择相应的选项卡来更改当前设置。

图例 19. 分类参数 


可以在 MODELS 选卡上选择作为分类基础的模型:

图例 20. 选择训练模型的选卡

在图例 18 — 20 当中所示的控制参数可在程序运行时进行调整。选择训练模型只有在 SSACD 和 SSA 随机指标的完整版本里可用。

在操作当中, 程序的界面类似如下:


图例 21. SSA 贝叶斯观察者的操作模式 

正如图例 20 中所见, 界面窗口的底线显示 FIX 和 STOP — 针对不同交易模式的级别。如果价格超过它们, 持仓应离场。FIX 级别是为交易进展成功的情况而设计的。STOP 级别意味着无条件地平仓。假设持仓离场的决定是在所分析的时间间隔完毕之后 (READY 标签) 进行的。

结论

本此工作呈现建立高效交易的推荐制系统的方法和算法, 结合了奇异频谱分析 (SSA) 的预测能力, 以及贝叶斯定理基础之上的重要机器学习方法。已经落实了建模, 以便检测应用一组确定数据进行训练的系统, 分析其它时间帧和其它金融工具的时间序列的可行性。已经提请了一款程序, 它可考验该方法分析实践中真实数据的可行性。程序结构的说明和代码的说明将在下一篇文章中提供。

实时分类的实际应用揭示了一些问题, 必须加以解决, 以便制定适合自动交易的策略。它们也将在下一部分工作中讨论。

我想特别感谢 Anatoli Kazharski 开发的图形界面 [3], 令人从艰苦而耗时的工作中解脱, 以及那些为优秀数学库 ALGLIB 提供了 MQL 实现的专家们 [4]。

参考清单

  1. N. E. Golyandina "卡特彼勒"-SSA 方法: 时间序列预测。学习指南。Saint-Petersburg, 2004。
  2. Korobeynikov, SSA 计算和空间效率的实现。// 统计及其界面。3, 2010, 3, 357-368.
  3. https://www.mql5.com/zh/articles/3173
  4. https://www.mql5.com/zh/code/1146