移动平均策略的计算方法

移动平均策略的计算公式、数据参数及局限性。

移动平均策略的计算方法

“移动平均策略”计算的含义

移动平均策略是指使用价格序列的移动平均线的策略。“计算”通常包含两层意思:

  1. 移动平均值如何从历史数据中计算得出,以及
  2. 这些移动平均值如何转化为一条规则,用于跟踪某种状态(例如,高于/低于某一阈值,或与其他序列交叉)。

移动平均本身并不是一种预测。它是对一个序列(如收盘价)的平滑表示,旨在减少短期波动的干扰。

核心计算:从价格数据得出移动平均

第一步:选择输入序列

选择一个价格时间序列,例如:

  • 每个时间点的收盘价
  • 典型价格(由最高价、最低价、收盘价构成的函数)
  • 其他一致的价格定义

计算假设:该序列在时间上是等间隔的(例如每小时或每天一个值)。如果数据不规则,需先使用重采样或对齐方法处理。

第二步:选择回看窗口长度(window)

设 (n) 为平均窗口中的周期数。

  • (n) 越大:结果越平滑,但滞后性越强。
  • (n) 越小:响应越快,但对噪声越敏感。

在序列开始时,历史数据少于 (n) 个。许多实现方式会:

  • 在数据不足时输出“不可用”,或
  • 等第一个完整窗口形成后才开始计算。

第三步:计算移动平均值

两种常见的移动平均公式为:

简单移动平均(SMA)

在时间点 (t),价格为 (P_t),SMA 为 [ \text{SMA}t = \frac{1}{n}\sum{i=0}^{n-1} P_{t-i} ] 即最近 (n) 个观测价格的平均值。

指数移动平均(EMA)

EMA 使用加权方案,赋予近期数据更高权重。常用平滑因子 (\alpha) 定义: [ \alpha = \frac{2}{n+1} ] 然后 [ \text{EMA}t = \alpha P_t + (1-\alpha)\text{EMA}{t-1} ] 需要初始化 (\text{EMA}_{t-1})。常用方法是将初始 EMA 设为前 (n) 个点的 SMA,或使用第一个可用价格。不同的初始化方式会影响早期数值。

第四步:应用规则比较移动平均

“策略”通常指基于计算出的移动平均值运行的规则。常见规则形式包括:

  • 阈值规则:将 (\text{MA}_t) 与价格、固定水平或区间进行比较。
  • 交叉规则:使用两个不同窗口(例如 (n_1) 和 (n_2))的移动平均。当 (\text{MA1}_t - \text{MA2}_t) 的符号变化时,即发生交叉。

状态规则示例(通用,非推荐):

  • 若 (\text{MA}_t > P_t),定义状态 (S_t) 为“高于”,否则为“低于”。
  • 每个时间步使用最新的 (\text{MA}_t) 和 (P_t) 更新状态。

要计算策略的内部输出(如状态历史),只需:

  • 选定的移动平均公式(SMA 或 EMA),
  • 窗口长度,
  • 价格序列定义,
  • 以及比较规则。

实际计算示例

假设你有一个每日收盘价序列 (P_1, P_2, \dots)。选择:

  • SMA,(n=5)
  • 计算 (\text{SMA}_5) 至 (\text{SMA}_t)

对于 (t=5): [ \text{SMA}_5 = \frac{P_5+P_4+P_3+P_2+P_1}{5} ] 对于 (t=6): [ \text{SMA}_6 = \frac{P_6+P_5+P_4+P_3+P_2}{5} ]

使用另一种 SMA 进行交叉比较时,采用相同方法计算两次。例如,设 (\text{SMA}^{(5)}_t) 和 (\text{SMA}^{(10)}_t) 分别使用窗口 5 和 10 计算。策略规则可跟踪 [ \text{SMA}^{(5)}_t - \text{SMA}^{(10)}_t ] 的正负性,并在符号翻转时记录变化。

验证的关键假设:两个移动平均必须使用相同的时间戳和价格定义,否则计算结果不一致。

相关局限性与失效模式

1) 滞后性(对转折点反应迟缓)

移动平均总结的是历史数据。SMA 特别明显,因其固定窗口平均,通常在价格已变动后才反应。EMA 反应更快,但仍滞后,因其本质是平滑处理。

2) 横盘时的反复震荡(Whipsaws)

当价格震荡时,交叉可能频繁发生。即使平均值计算正确,基于变化(如交叉)的规则也可能多次翻转状态,导致行为不稳定。

3) 对参数选择的敏感性

策略行为强烈依赖于窗口长度、平均类型(SMA vs EMA)和规则定义。(n) 的微小变化可能显著改变计算出的 (\text{MA}_t) 序列,从而影响策略的内部状态历史。

4) 数据与实现陷阱

即使公式正确,以下常见问题仍会改变结果:

  • 混用收盘价与其他价格定义
  • 对前 (n) 个周期的不同处理
  • 时间索引错位(差一错误)
  • 未重采样处理缺失数据

5) 交易成本与执行影响(非公式输入)

尽管移动平均计算本身由输入决定,但任何后续解释(如规则如何执行)可能受交易成本、延迟和执行限制影响。由于这些因素不属于纯移动平均公式,若需评估绩效,必须单独处理。

验证:如何独立检查你的计算

可在不假设任何市场结果的情况下验证计算:

  • 单元测试移动平均:手动或用简单脚本计算一组已知价格的 SMA 或 EMA,并与你的实现对比。
  • 确认索引:检查 (\text{MA}_t) 是否使用截止于 (t) 的价格,并对 SMA 包含 (n) 个周期。
  • 验证 EMA 初始化:明确记录 (\text{EMA}_{t_0}) 的初始值;然后从该种子重现结果。
  • 重新计算比较规则:若使用两个平均值,从同一价格序列重新计算两者,并确认符号变化或阈值匹配。

若输出不同,差异通常源于输入定义(价格序列)、窗口长度处理或索引错位,而非移动平均的数学本身。

下一步需明确的问题

要无歧义地计算特定“移动平均策略”,需定义以下内容:

  • 使用哪种价格序列(收盘价、典型价格等)
  • SMA 或 EMA(或其他平均方法)
  • 单一窗口长度或多个窗口
  • 将 (\text{MA}_t) 值转化为策略状态的精确规则
外汇和差价合约交易具有重大风险。FoxiForex的信息仅用于教育,不构成个人财务建议。赞助内容会被清楚标注。