概述
文中提出的交易策略, 由弗拉基米尔·克拉夫丘克 (Vladimir Kravchuk) 首先在 2001 - 2002 年的 "货币投机者 (Currency speculator)" 杂志上进行了阐述。该系统基于数字滤波器的使用, 以及离散时间序列的频谱估值。
实时报价图表的变化也许会有任何形式。在数学中, 这被称为非分析性函数。著名的傅利叶定理意味着有限时间间隔上的任何函数均可以表示为无限累加的正弦函数。因此, 任何时间信号都可以由频率函数唯一地表示, 此即被称为它们的频谱。
对于非随机信号, 使用傅利叶变换来进行从时域到频域表达的变换 (即, 频谱的计算)。随机过程是由过程的 "功率谱密度 (PSD)" 表达, 这不是随机过程自身的傅利叶变换, 而是其自相关函数。
编辑切换为居中
添加图片注释,不超过 140 字(可选)
1. 策略的理论层面
请记住, 滤波是对信号频谱在正确方向上的一种修正。这样的转换可以在一定范围内放大或削弱频率分量, 抑制或隔离它们中的任何一种。数字滤波器是用来转换仅在离散时刻所定义信号的数字系统。
当使用数字滤波器和离散时间序列操作时, 有一些重要的层面。
首先, 众多流行的技术工具 (MA, RSI, Momentum, Stochastic, 等) 均是基于信号频谱的变化, 因此是数字滤波器。其转移函数的增益取决于频率。然而, 这种转移函数被许多人所忽视。因此, 大多数用户不知道信号频谱波动的方向, 因此不了解指标对信号的影响性质。这对于指标的调整和其价值观的解释变得复杂化。
第二, 货币报价的运动过程看起来总是像一个离散的信号, 在开发技术指标时必须考虑其一般性质。例如, 离散信号的频谱总是周期性函数。忽略此属性也许会导致输入的时间序列不可挽回的失真。
第三, 价格走势的频谱密度在不同的行情上也有很大的差别。在这种情况下, 用户没有配置指标参数的不同算法: 无奈之下他们不得不任意选择参数并在实践中测试其持续性。
经常有这样的情形, 一款优化过的指标或智能交易系统, 昨天还运作良好, 但今天却出现异常糟糕的结果。这是由于时间序列的不稳定性。实际上, 当比较同一行情在两个时间帧内计算的两个 PSD 估值时, 频谱峰值的幅度发生偏移并改变其形式。这可以解释为多普勒效应的体现, 即移动的谐波源相对于接收者改变了波长。这再次证明了趋势运动存在于行情中。
自适应性行情跟踪方法的目的是寻找合理的最小技术工具, 这将允许以最小的风险创建具有最大盈利能力的交易算法。这是通过若干连续的步骤实现的。
-
研究特定行情价格波动的频谱组成。
-
非递归数字滤波器被自适应地配置。此过程的结果即产生一组优化的脉冲响应 (脉冲响应函数, IRF)。
-
输入的时间序列被过滤, 最后确定一组指标, 这在文章中会进一步研究。
-
开发交易算法。
自适应方法可以应用于任何行情。但应当指出的是, 没有效率损失的最大持仓规模将受到所选择的特定市场的资本化和流动性的影响。
1.1. 选择频谱分析方法
开发基于自适应行情跟踪方法的交易系统, 始于对特定金融工具的价格走势频谱的研究。显然, 整个系统的最终效果取决于这个阶段的结果。
该解决方案看起来很浅显: 必需进行频谱或谐波分析。但是选择哪种方法?如今, 已知两种主要的频谱分析方法: 参数和非参数。
光谱分析的参数化方法 是定义某种频谱密度模型, 且其参数基于有限时间段内相应过程的观测结果来估值。在这一点上, 原来的模型可以有多种形式。
特别地, 时间序列的频谱密度表现为有理函数, 可以作为源模型。在这种情况下, 可以实现自回归模型, 移动平均模型, 和自回归移动平均模型。所以, 当评估模型参数时要使用不同的方法论。
为了解决这一问题, 赫兹量化还可以使用变分原理和相应的质量评估功能。此处, 将采用拉格朗日乘数作为评估参数。此方法应用在通过最大熵方法评估频谱密度, 其需要根据相关函数的已知单独数值来最大化过程的熵。
频谱分析的非参数方法, 与参数化不同, 不必有任何预定的模型。它们当中最流行的方法, 是在初始阶段确定过程的周期性 (即, 现有实现的傅利叶变换的绝对值的平方)。之后, 任务就降低到选择合适的窗口, 满足某种需求。
Blackman-Tukey 方法也被广泛使用。它查找所分析时间序列相关序列的加权估值的傅利叶变换。
另一种方法是减少评估时间序列频谱密度的问题来解决基本积分方程, 通过具有正交增量的随机过程来描述所分析时间序列的傅利叶变换。
根据提议交易系统的作者, 使用基于时间序列离散傅利叶变换计算的经典非参数频谱估值方法, 不可能定性地评估汇率波动功率谱密度。唯一的方法是使用频谱分析的参数化方法, 它们能够在相对短的离散时间样本中获得 PSD 的一致评估, 其中过程即可是静止的, 亦或可以通过去除线性趋势来进行。在频谱评估的各种参数化方法中, 最大熵方法得到最高程度的关注。
1.2. 应用技术分析工具
所提议策略的主要区别是自适应趋势线。其方向指示当前趋势方向。
自适应趋势线 是输入时间序列的低频分量。它是经低通滤波器 (LPF) 获得。LPF 的截止频率 fc 越低, 趋势线越平滑。
自适应趋势线的端点之间存在内部连接, 其强度与它们之间的距离成反比。如果点间距离大于等于所谓的奈奎斯特间隔 TN=1/(2 fc) 则它们之间的连接不存在。因此, 过滤器截止频率的降低增强了这种连接, 并将趋势逆转的时刻推迟。
交易系统采用两种具有不同时间帧的自适应趋势线来识别趋势。
FATL (快速自适应趋势线)。需要 LPF-1 滤波器进行绘制。它可抑制高频噪声和振荡周期非常短的行情轮换。
SATL (慢速自适应趋势线)。需要 LPF-2 滤波器进行绘制。与 LPF-1 不同, 它可令振荡周期较长的行情轮换通过。
上述滤波器的参数 (截止频率 fc 和阻带中的衰减 σ) 基于所分析金融工具的频谱评估计算。LPF-1 和 LPF-2 在阻带中提供至少 40 dB 的衰减。使用它们对通带中的输入信号的幅度和相位没有影响。数字滤波器的这种性质提供了有效的噪声抑制, 与简单的 MA 相比, 它们产生的假信号较少。
从数学角度来看, FATL(k) 的值是 Close(k) 的预期值, 其中 k 是交易日的数量。
RFTL (参考快速趋势线) 和 RSTL (参考慢速趋势线)。它们表示数字滤波器 LPF-1 和 LPF-2 对输入信号响应的输出值, 其延迟等于相应的奈奎斯特间隔。
FTLM (快速趋势线动量) 和 STLM (慢速趋势线动量) 展示 FAT 和 SALT 的偏移。它们的计算类似于动量指标, 但替代收盘价的是, 它们使用已过滤的平滑趋势线。所得到的示意线比常规动量更平滑和规则。
FTLM 和 STLM 示意线根据离散数学规则计算。它是两个独立相邻点之间的差值, 限于过程的频带。在正常计算动量时经常忽略了这一要求, 结果在输入信号的频谱中出现了不可挽回的失真。
RBCI (范围界限通道指数)。它是经由带通滤波器计算的, 它执行以下操作:
-
删除低频趋势, 由周期大于 T2 = 1/fc2 的低频频谱分量形成;
-
删除高频噪声, 由周期小于 T1 = 1/fc1 的高频频谱分量形成。
选择周期 Т1 和 Т2, 以便满足条件 Т2 > T1。与此同时, fc1 和 fc2 截止频率应考虑到所有主要行情。
简单地说, RBCI(k) = FATL(k) - SATL(k)。事实上, 当 RBCI 接近局部极值时, 价格接近交易区间的上边界或下边界 (分别取决于是最高价还是最低价)。
PCCI (完美商品通道指数)。其计算公式: PCCI(k) = close(k) – FATL(k)。
其计算方法与商品通道指数 (CCI) 相似。实际上, CCI 是当前价格与其移动平均线之间的常规化差值, PCCI 是每日收盘价与其预期值之间的差值 (如前所述, 取自 FATL 值)。
这意味着 PCCI 指数是价格波动的高频分量, 常规化为标准偏差。
编辑切换为居中
添加图片注释,不超过 140 字(可选)
编辑切换为居中
添加图片注释,不超过 140 字(可选)
1.3. 指标信号解释规则。
我们来梳理 交易系统的主要原则。
-
它属于基于趋势的系统, 顺势交易。使用 SATL 来识别趋势。
-
根据 FTLM 和 STLM "快" 和 "慢" 趋势的动态特征判定入场点。
-
计算使用由 RBCI 指数确定的当前行情状况 (中性, 超买, 超卖, 局部极端)。
-
入场方向则是使用趋势指标确定的。振荡器只能在横盘的情况下使用。
-
它会强制设置停止订单 (基于 RBCI, PCCI 指数和行情波动)。
上述工具应该根据这些规则来解释。
-
如果 SATL 指标线方向朝上, 那么行情体现为上涨趋势, 如果朝下 - 下跌。局部极端情况的出现表明趋势开始逆转。与 RSTL 的交汇是趋势彻底逆转的信号。在此情况下, STML 改变其符号。
-
如果 SATL 指标线是水平的, 或者几乎是水平的, 那么行情就会体现为横盘。
-
STLM 为正则趋势看涨, 为负则趋势看跌。它被认为是一个领先的指标。其局部极端情况总是先于相应的 SATL 极端情况出现。STLM 的绝对值与趋势强度成正比。如果 STLM 和 SATL 向同一方向移动, 趋势正在增强。方向不同表明趋势在减弱。水平的 STLM 指标线意味着趋势完全形成。
-
如果 "快速" 和 "慢速" 趋势线 (FATL 和 SALT) 具有相同的方向, 则趋势强度较高。否则, 行情即可能处于巩固亦或调整阶段。
-
如果 FATL 和 SATL 指标线开始向相同的方向移动, 那么趋势就会逆转。如果经历多方向周期之后再次收敛, 那么行情调整已经结束, 价格又开始向 SATL 方向移动。
赫兹量化遵循上面的规则制定 主要交易信号。
-
可靠的反转信号出现在长线趋势开始时: STLM 下降, 参考自适应的收敛, 并参考 "慢速" 趋势线 (SATL 和 RSTL)。在信号形成过程中, 价格波动急剧增加。这是趋势变化的一个特征。因此, 在选择交易入场点时必须考虑 PCCI。在看跌信号时, 如果 PCCI 振荡器在最后一根蜡烛收盘时超过 -100 级别, 则卖出。如果 PCCI 值低于 -100, 不要做单, 等待振荡器超过这个级别。
-
经过短暂的修正后, 下一个信号会指明形势延续和趋势强化。照例, 这种情形下的波动比趋势反转时要低。因此, 此处的信号产生条件更加严格, 信号本身更加可靠。 如果 FATL, FTLM 和 RBCI 指标同步移动, 则进行交易。假信号被 STLM 指标滤出 (其绝对值即可增长, 亦或无变化)。如果 STLM 下降, 则表示 SATL 和 RSTL 收敛。同时, 当 RBCI 收到看跌信号时, 检查行情是否超卖。入场价格的选择要等于或优于信号柱线随后的开盘价。
-
该信号基于给定频带中经 RBCI 指数确定的活跃轮换的总和。STLM 线的方向, 以及 SATL 与 RSTL 的收敛/发散被忽略。唯一重要的就是 STLM 值是正数还是负数, 其指示行情的主要趋势形成方向。FATL 指标行的方向和行为作为一个附加的过滤器。 在中性或长线下降趋势期间, 复合波轮换在强超买区域触及局部最小值时信号形成。在横盘时, 由行情轮换引发的走势潜能将高于由波动引发的走势潜能。如果已形成趋势, 那么基于行情轮换的走势潜能将与长线趋势的潜能叠加。 交易开单价的选择要等于或优于信号柱线随后的开盘价。
-
信号的基础是两个背离: RBCI 的走势方向和 FATL 指标线之间, 以及 RBCI 和 FTLM 指数之间。如果 FATL, RBCI 和 FTLM 指数在某个周期内向不同的方向移动, 则待命状态被激活。看跌信号 — 局部 FTLM 最小, FATL 和 RBCI 未改变它们的移动方向。在图表上, 这看起来好似 FTLM 向 FATL 方向 "点头"。 该信号最常出现在 "快速" 下降趋势的末段附近 (FTLM 值接近 "0")。该系统为短线趋势走势形成相当准确的信号。 这是一个领先信号, 前瞻趋势逆转。 入场价的选择要等于或者优于信号蜡烛随后的开盘价。
-
信号在长期趋势中形成。RBCI 和 PCCI 指数同时抵达行情超买值 (对于下降趋势)。这种信号往往形成于趋势的最后阶段, 即报价迅速反向运动, 然后再次 "突破" 原来的主要趋势, 表明依然强劲。 入场价的选择也要等于或者优于出现信号蜡烛随后的开盘价。
-
当长线看跌趋势形成时 (SATL 已经下跌, 但 STLM 值依然为正), PCCI 指数达到 100 以上 (行情超买区域)。反转信号是基于趋势形成时行情的高波动性。 入场价的选择要等于或者优于信号蜡烛随后的开盘价。
-
最强趋势反转信号是在 SATL 指标线向下突破 FATL 指标线之后, 在第一次技术性向上修正结束时观察到的。在这之后要卖出。该技术调整的完成由 FATL 的局部最大值示出。 卖出价高于或等于信号蜡烛之后开盘价。
-
最后, 当两个交叉点同时发生时形成另一个反转信号: "快速" 和 "慢速" 自适应指标线 FATL 和 SATL, 以及 FATL 和 RFTL (下破时卖出, 上破时买入)。这个信号标志着在这个久远且衰弱的趋势中急剧突破的时刻。信号蜡烛之后的卖出价格高于或等于蜡烛的开盘价。
2. 构建低通滤波器
现在赫兹量化已经概括描述了策略的主要层面, 现在是进行操作的实施阶段了。当然, 赫兹量化从构建一个低通滤波器开始这个工作, 因为这样的滤波器是这个策略的基础。
为了构建一个低通滤波器, 有必要定义其主要参数: 截止频率和衰减。如果策略的作者明确告知滤波器在阻带中应至少提供 40dB 的衰减, 那么为了确定截止频率就需要对金融工具的价格数据进行频谱分析。
如上所述, 作者使用最大熵方法来估算功率谱密度。该方法属于参数化方法, 并根据数学模型执行。数学模型将使用自回归方法来构建。
2.1. 功率谱密度的分析。
将创建 CSpertrum 类来估算频谱密度 (完整的代码可以在附件中找到)。在初始化阶段, 要传递金融工具的名称, 操作时间帧和所需分析的柱线数量。
class CSpectrum { private: int ci_HistoryBars; //用于分析的柱线 string cs_Symbol; //品名 ENUM_TIMEFRAMES ce_Timeframe; //时间帧 double cda_AR[]; //自回归系数 int ci_NumberCoeffs; //系数数量 public: CSpectrum(int bars=2880, string symbol=NULL, ENUM_TIMEFRAMES period=PERIOD_CURRENT); ~CSpectrum(); }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ CSpectrum::CSpectrum(int bars=2880, string symbol=NULL, ENUM_TIMEFRAMES period=PERIOD_CURRENT) { ci_HistoryBars = bars; cs_Symbol = (symbol==NULL ? _Symbol : symbol); ce_Timeframe = period; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ CSpectrum::~CSpectrum() { }
自回归函数和功率谱密度函数的计算将根据 Victor 提议的方法进行。对这个算法的细节感兴趣的人建议阅读 这篇文章。区域频谱分析函数的结果是一组数据, 为了清楚起见, 可以将其表示为图形。