William Blau 指标系统:动量、TSI、Ergodic 与 MQL5 实现
一、William Blau 指标系统的背景
William Blau 提出用“双重指数平滑(double smoothing)”处理价格的变化量,而非直接平滑价格本身,从而得到对动量更敏感、噪声更低的指标。其中最有名的是 TSI(True Strength Index,真实强弱指数),以及 Ergodic 系列(把双平滑思路套用到 Tick Volume、RSI、MACD 等)。核心思想一致:先取价格变化 d,再对 d 做两次 EMA 平滑,滤掉短期噪声、保留趋势方向。
二、TSI 的计算步骤与公式
标准 TSI 分四步,设第一次平滑周期为 r(典型 25),第二次为 s(典型 13):
- 1) 价格变化 d[i] = close[i] − close[i−1]。
- 2) 对 d 做第一次 EMA 平滑:ema1 = EMA(d, r)。
- 3) 对 ema1 做第二次 EMA 平滑:ema2 = EMA(ema1, s)。
- 4) 对 |d| 同样做两次 EMA 平滑得分母 den = EMA(EMA(|d|, r), s)。
- 5) TSI = ema2 / den × 100。
三、MQL5 实现:双平滑函数
可用 iMA 句柄取 EMA,但更干净的是写一个 double-smoothing 函数,内部用 EMA 递推(只需前一值),避免多次 CopyBuffer:
// 双平滑:先对序列做 EMA(r),再对结果做 EMA(s)
double DoubleSmooth(double value, double &state1[], double &state2[], int r, int s, int bar)
{
// state1 存第一次平滑结果,state2 存第二次
double a1 = 2.0/(r+1);
state1[bar] = a1*value + (1-a1)*state1[bar-1];
double a2 = 2.0/(s+1);
state2[bar] = a2*state1[bar] + (1-a2)*state2[bar-1];
return state2[bar];
}
// OnCalculate 中
double d = close[bar] - close[bar-1];
double num = DoubleSmooth(d, s1, s2, R, S, bar);
double den = DoubleSmooth(MathAbs(d), s1a, s2a, R, S, bar);
TSI[bar] = (den!=0) ? num/den*100 : 0;
四、Ergodic 系列与信号解读
Ergodic 指标(如 Ergodic Tick Volume Index、Ergodic RSI)只是把“双平滑”套到不同输入上:对 TVI 输入用 tick volume 的变化,对 Ergodic RSI 输入用 RSI 的变化,算法骨架完全一样。TSI 本身的信号:上穿 0 线看多、下穿 0 线看空;与一条信号线(TSI 再做一次短 EMA,如 7 或 25)交叉产生买卖点;TSI 与价格出现背离预示趋势衰竭。
五、参数与优缺点
六、TSI 公式:双指数平滑的动量
William Blau 的 TSI(真实强度指数)核心是对「价格动量」做两次指数平滑:先算每根的价格差(动量),再对动量做 EMA、对结果再做一次 EMA,最后除以对应的双平滑绝对动量做归一,得到 -100 到 100 的区间指标。
双平滑把噪音压得很干净,TSI 比裸动量线平滑得多,信号更可信;代价是滞后比单平滑更大,适合趋势确认而非抢拐点。
七、用 TSI 判背离与趋势
TSI 经典用法:上穿零轴看多、下穿看空;更稳的是看背离——价格新高但 TSI 不新高,提示动能衰竭。因为 TSI 已归一,背离的「高度差」可直接比较,不用像 RSI 那样猜超买超卖。
double mtm = close[0]-close[1]; double ema1 = EMA(mtm, r); double ema2 = EMA(ema1, s); double tsi = 100 * ema2 / EMA(EMA(Abs(mtm),r),s);
八、参数调校
TSI 默认 r=25、s=13(长周期),短线可缩短。调参看「信号噪声比」:太灵敏满屏假穿越,太迟钝漏掉真反转。配合价格结构(如通道突破)过滤,比单看 TSI 穿越可靠。
回测时 TSI 参数要和持仓周期匹配:日内用短参数、波段用长参数,别一套参数打天下。