blackcat1402

一个能让你的指标自适应市场周期的算法库

SZSE:399006   创业板指
立身以立学为先,立学以读书为本——欧阳修

对于很多有数字信号处理背景的交易者,可能很容易理解约翰 艾勒斯的周期理论。他把市场看作一个离散数字信号系统,把大量现代数字信号算法用到他的指标里面。其中,他认为市场是一个变周期,富含各种谐波分量的数字信号系统。既然是变周期,所以很多技术指标的参数如果是固定的,就只能在某一段时间内符合市场特征,能够正确地反映市场的真实状态。一旦市场调频后,固定参数指标的“频率”就会和市场“失谐”,从而会失效。简而言之,就像是日常生活中用的FM收音机,频率能对上就能享受美妙的音乐,一旦频率偏移就只能听到噪声了,这是一个道理。另外,艾勒斯的周期理论认为趋势只是大循环,大周期分量占主导地位的上升或下降阶段,在大周期分量里还混杂各种节奏的小周期。但是无论如何,是可以采用众多频率的正弦波合成进行表达,只不过分量众多,而且频率是变化的。这其实不仅和道氏理论,艾略特波浪理论相对应,而且也能和中国缠中说禅的“级别”概念相对应。这就解释为什么很多人学习波浪和缠论仍旧炒不好股,因为这个“主控级别”是变化的,并不是一成不变的,如果交易者不能够快速跟上市场“变频”的节奏,就会大概率吃面。一个狙击手要命中一个高速移动的目标,肯定要调整倍镜的倍数。使用固定倍数倍镜射击超出范围的目标,失手的概率就会增加,使用技术指标是一个道理。

自动调参数的技术指标

目前有很多人尝试各种方法使得技术指标能够快速适应市场变化,也就是自适应指标(Adaptive Indicators)。这里不乏使用AI机器学习算法,甚至采用最新的Transformer算法的交易者。但是,传统机器学习算法训练需要大量样本和训练才能保证算法收敛,获得有效的参数。但是这种及时性往往不能够满足快速变化的市场走势。这时就可以考虑采用艾勒斯周期理论中一些自适应算法对指标参数进行自适应。

举个例子,下图是一个通过离散傅里叶变换计算主控周期,并用主控周期对RSI指标参数进行“调谐”的自适应RSI。简单地说,这个自适应RSI的参数既不是14也不是7,而是根据市场变化计算出一个动态的参数N,你可以设定这个N的变化范围,算法会自动计算出这个N值,并让RSI在不同参数中自动调整。

SZSE: 399006 创业板指数行情来自TradingView

为了对比看出加不加自适应对于指标的影响,我用下面ESCGO振荡器进行对比,上面是我写的固定参数的ESCGO指标,下面是我采用了自适应的ESCGO指标,是不是能看出什么差别来呢?

SZSE: 399006 创业板指数行情来自TradingView

我阅读了艾勒斯的4本英文著作,把其发表的文章都仔细研究后,总结了12种计算市场主控周期(Dominant Cycle)的算法,并将其写成TradingView代码库dc_ta公开分享在社区。



1. EhlersHoDyDC()。这是艾勒斯采用希尔伯特变换(Hilbert Transform)结合零差鉴别器(Homodyne Discriminator)计算主控周期的算法。零差(Homodyne)意味着市场信号被自身相乘。更准确地说,我们希望将当前K线的信号与前一根K线的信号的复数值相乘。根据定义,复共轭是一个复数,其虚部的符号已反转。

2. EhlersPhAcDC()。这是采用希尔伯特变换(Hilbert Transform)结合相位累加器(Phase Accumulator)计算主控周期的算法。市场主控周期测量采用相位累加法总是使用一个完整周期的历史数据。这既是优点也是缺点。优点是在获得的主控周期的滞后性直接与循环周期有关。也就是说,短周期的测量比较长周期的测量具有更少的滞后。然而,用于进行测量的样本数量意味着平均周期随循环周期而变化。与信号相比,更长的平均时间会降低噪声水平。因此,较短的周期周期必然具有较高的输出信噪比 ( SNR )。因此,这种算法更适合计算小周期,以保证较少的周期计算滞后性。

3. EhlersDuDiDC()。这是采用希尔伯特变换(Hilbert Transform)结合双差分(Dual Differential)算法计算主控周期的方式。市场信号分量经过复杂的平均并在 EMA 中进行平滑处理,以避免在随后的乘法步骤中出现任何不希望的叉积。周期直接从平滑的同相和正交分量求解。分母的临时计算作为 Value1 执行,以确保分母不会有零值。Valuel 的符号相对于理论方程是相反的,因为差异是在时间上向后看的。

4. EhlersCycPer()。这是周期算法(Cycle Period)。它显示了如何计算当前周期周期,即当前峰值或谷值与下一个峰值或谷值之间的大致K线数。

5. EhlersCycPer2()。这是周期算法(Cycle Period)另一个版本。

6. EhlersBPZC()。这是带通滤波过零(Bandpass Zero Crossings)法。对于数字滤波器理论比较理解的交易者会知道,可以通过约束带通滤波器带宽找到主控周期,并滤除其他周期分量,然后输出信号会像一个正弦波,当正弦波从一个零点开始上穿到下一次上穿零为一个周期。

7. EhlersAutoPer()。这是自相关周期图(Autocorrelation Periodogram)法。自相关周期图的构建从使用最小三个平均K线的自相关函数开始。使用自相关结果的离散傅里叶变换 (DFT) 提取循环信息。与其他频谱估计技术相比,这种方法特定的优势(不代表实际应用中这些优势更加明显)。

8. EhlersHoDyDCE()。这是艾勒斯采用带通滤波(Bandpass Filtering)结合零差鉴别器(Homodyne Discriminator)计算主控周期的算法。

9. EhlersPhAcDCE()。这是艾勒斯采用带通滤波(Bandpass Filtering)结合相位累加器(Phase Accumulator)计算主控周期的算法。

10. EhlersDuDiDCE()。这是艾勒斯采用带通滤波(Bandpass Filtering)结合双差分(Dual Differential)算法计算主控周期的方式。

11. EhlersDFTDC()。这是通过离散傅里叶变换提取主控周期的方法。

12. EhlersDFTDC2()。这是利用多个带通滤波结合离散傅里叶变换提取主控周期的方法。

dc_ta库可以赋能传统指标,但是这里也有难点,就是动态自适应参数的定标问题:以哪个值为基准,振幅多少才是最优。我理解采用dc_ta自适应库只能将跟踪市场变化的一部分工作由算法承担,仍需控制算法长期的漂移。我也仍在研究阶段,目前来看除了定标,就是计算出来的周期滞后性问题仍需要评估。也就是计算出来的周期如果已经是“昨日黄花”,对于当下市场的意义就不大了。欢迎感兴趣的朋友和我交流相关见解。



Donate TRC20 USDT to below address, 5USDT per monthly sub, 50USDT per yearly sub: TNz84MjJTWUUUyQFpPNjaAU7J2SwhJJ7j9
Note: USDT_TRC20 deposits sent from decentralized exchanges are not yet supported.
免责声明

这些信息和出版物并不意味着也不构成TradingView提供或认可的金融、投资、交易或其他类型的意见或建议。请在使用条款阅读更多信息。