「离散哈特莱变换在行情周期提取里的位置」
「离散哈特莱变换在行情周期提取里的位置」
离散哈特莱变换(DHT)是一种实数域正交变换,和 FFT 不同,它不生成复数结果,对 CPU 和内存的压力更小,适合在 MT5 的实时 OnCalculate 里跑。它的基函数是 cas(θ)=cos(θ)+sin(θ),能把价格序列直接投影到一组实正弦/余弦混合基底上,用来分离不同尺度的周期成分。 在 MT5 里做周期分析时,DHT 比复数 FFT 少一次虚实拆分,输出长度等于输入长度 N,没有镜像冗余。对一个 256 根的 H1 黄金报价序列做 DHT,核心循环大约只需 256·log2(256)≈2048 次乘加,普通 EA 在 tick 级调用也不会明显卡顿。 外汇和贵金属杠杆高、滑点随机,周期提取只给出当前波段可能的尺度倾向,不能当方向依据。实盘前务必用历史数据验证你选的窗口长度是否和品种波动特性匹配。
哈特莱变换为什么没火起来
1942年 Ralph Hartley 在《应用于传输问题的更对称傅立叶分析》里给出了傅立叶变换的一种模拟形式,后来被称为哈特莱变换(HT)。它和 FT 一样,也是把原始信号拆成三角函数的求和。 关键差别在输出类型:标准傅立叶变换把实数信号映射成复数,而 HT 只产出实数结果。对当时的科学家和工程人员来说,这种纯实数输出没带来肉眼可见的便利,大家继续用 FT,HT 就此沉寂了几十年。 转折点在1983年,Ronald Bracewell 提出了离散哈特莱变换(DHT)。实数运算在当年算力吃紧的设备上更省事,这一版才让 HT 重新进入实用视野。外汇与贵金属波动序列做频域拆解时,DHT 可绕开复数类库,但高频噪声下误判概率仍偏高,属高风险信号实验。
◍ 用实数变换把行情搬进频域
离散哈特莱变换(DHT)只吃实数、只吐实数,能力和离散傅立叶变换等价,但工程上更轻——不用处理复数,MT5 里写指标或脚本时直接拿 double 数组就能跑。 假设你手里有一段长度为 N 的实序列 h[0]…h[N-1],做一次 DHT 会得到同样长度的实序列 H[0]…H[N-1],相当于把价格或差值序列从时域搬到了频域。H[0] 装的是信号最底层的直流分量信息,H[1] 到 H[N-1] 则分别对应不同谐波的强度:下标越大,说明该谐波在原始 N 个采样里塞进了越多周期,也就是频率越高。 想从频域回到时域用逆哈特莱变换即可,式子里的 cas(θ) 就是 cos(θ)+sin(θ)。这个核函数其实可以换成别的基,变换本质不变。外汇与贵金属波动高、跳空多,直接拿 DHT 看谐波前先确认 N 是 2 的整数幂,否则自写循环会踩边界。开 MT5 用一段 64 根 K 线的收盘价跑一遍,对比 H[1] 和 H[32] 的量级,就能直观看到短周期噪声和长周期趋势在频域里是怎么分开的。
「用离散哈特莱变换在频域里揉信号」
把 15 根开盘价排成一条时间序列送进 DHT,信号就从时域翻进了频域。画出来的频谱里 H[0] 因量纲差异通常不显示,但能直接看到 H[1] 到 H[14] 各自强度悬殊——有的谐波几乎平躺,有的拔得很高。 时域里把某一个价格改成 0,均线多半就废了;频域里却可以精准把任意谐波归零。实测把 H[1]–H[14] 全设 0 只留基频,再做逆变换,曲线退化成一条最粗的轮廓线;若只拿掉高频段 H[10]–H[14],逆变换后原始序列就被顺手磨平了一层毛刺。 落地做法:一条均线照旧吃价格(红线),另一条均线吃 DHT 平滑后的值(蓝线),两者叠在 MT5 副图就能比出差别。除了硬砍谐波,还可以把全部谐波同除以一个数统一衰减,或按频率加权——频率越高除得越多,得到天然更狠的低通平滑。 只留最强谐波也行:先算所有谐波绝对值的均值,仅保留超过均值的那些,重构出来就是主趋势加最强周期分量。更野的路子是给谐波翻符号,逆变换会得到相位反转的镜像,原上涨变下跌,拿来反推支撑阻力位有实操价值。上述频域操作能单用也能串着用,比如先筛最强谐波再翻符号,出来的就是一波可能的逆趋势脉冲。外汇与贵金属杠杆高,这类频域重构只作信号预处理,实盘须自担回测与滑点风险。
用频谱反推低滞后指标系数
线性指标本质上是一组加权系数,把它丢进哈特莱变换(DHT)就能看到频域里的光谱。SMA 的系数全是 1/N,变换后只有主信号 H[0] 能过,其余谐波被压到零,所以它就是个纯低通滤波器;LWMA 相反,输入信号的所有谐波几乎全放行,SMMA 则只挑一部分过。 想自己造一个频谱匹配信号的指标,路子是反着来的:先对价格序列做 DHT 拿到 H[],再把每个谐波除以 H[0] 做归一化(构造时 H[0]=1 是硬条件),最后做逆哈特莱变换,出来的就是指标权重系数。 这套系数和 SMA 长得像,但实测滞后更小,跟普通移动平均线比,跟踪贵金属或外汇小时线拐点的反应会快半拍到一拍。外汇和贵金属杠杆高,信号快不等于胜率高,拿去回测再上实盘。
◍ 把价格波动拆成有色噪声看
处理金融时间序列时,所谓噪声就是信号里不需要的失真,SMA 这类滤波器常用来压掉它。但如果反过来,把市场价格波动直接看成不同噪声的叠加,就得借用彩色噪声的概念——它在不同频率上能量分布不同,名字借自可见光:红是低频、紫是高频。 按 p 参数分,噪声有五种原色:-2 红、-1 粉、0 白、+1 蓝、+2 紫。红噪声往往对应长期趋势或周期,白噪声像平盘,紫噪声偏向随机不可预测。外汇和贵金属波动里套这套框架,能挖出传统画线看不出的隐藏分量,但杠杆市场高风险,结论只能当概率倾向。 实操上,先算原始信号频谱、把各谐波值平方得到能量,再用 p 估缩放因子让噪声总能量和信号相等,接着开方得 HN[] 噪声频谱。给谐波随意配 +/- 号,噪声就和原信号同相;取反号则反相;只取正或负调和值,能在频域框出噪声运动的边界。最后逆哈特莱变换,价格图上就出噪声曲线。 做指标时先定功率 E>0 控灵敏度,走完同样的流程得 HI[] 光谱(记得 HI[0]=1),配号后逆变换出系数。收到 coefficient[] 后必须归一化:先求所有系数和,再逐个除掉它。红+紫组合谱、红白谱差异都能直接比。p 取分数值(如黑噪声 p<-2)时,用 E[] 能谱算四个系数拟合,参数随行情漂,是观察市场状态切换的一个硬数据点。
「把 cas 数组预分配当成提速开关」
离散哈特莱变换(DHT)本身有快速算法,但真正在 MT5 里跑出响应速度的关键,是预先为 cas 函数估值建一张静态表。数组尺寸要开到 (N-1)^2+1,N 就是你给指标的 period 参数;表里每个元素按 cas 定义一次性算好,后续每根 K 线直接查表,避免反复做三角函数。 这套思路落在这组随文指标里:DHT 用 iPeriod 与 CutOff 控制保留谐波数,CutOff=0 即全保留;DHT LWMA 把 LWMA 搬进频谱域处理;Spectrum 做频谱保形,Noise Levels / Noise Indicator / Fractional Noise 则按噪声颜色与分数维参数分离市场噪讯。外汇与贵金属杠杆高、滑点随机,频谱降噪只降低干扰概率,不消除方向误判风险。 实操建议:把 DHT.mq5 拖进 MT5 先用默认 iPeriod=30、CutOff=5 看 EURUSD 小时图,再改 CutOff=0 对比毛刺量;若卡顿,检查 (N-1)^2+1 数组是否按上文预分配,而不是每 tick 重算。