威廉姆斯 %R(Williams R)的计算方法
直接答案:威廉姆斯 %R 公式
威廉姆斯 %R(常写作“Williams R”或“%R”)是一种震荡指标,用于将当前收盘价与近期交易区间进行比较。标准计算使用长度为 N 根K线的回溯周期。
公式(标准形式): [ \text{威廉姆斯 %R} = -100 \times \frac{H_{N} - C}{H_{N} - L_{N}} ]
其中:
- (C) = 最近的收盘价(即当前计算K线的收盘价)
- (H_{N}) = 最近 N 根K线中的最高高价(包括当前K线)
- (L_{N}) = 最近 N 根K线中的最低低价(包括当前K线)
输出范围(可计算时): 当 (H_{N} \neq L_{N}) 时,结果通常介于 −100 和 0 之间。
机制与定义:输入参数的含义
要逐步计算威廉姆斯 %R,可将其视为滚动区间内的归一化位置。
-
选择回溯周期(N)。
- 示例假设用于说明:(N = 14) 根K线。
- N 的选择会影响指标对新高或新低的响应速度。
-
在这些 N 根K线中找出滚动极值。
- (H_{N}) 是窗口内“高价”的最大值。
- (L_{N}) 是窗口内“低价”的最小值。
-
将当前收盘价与区间进行比较。
- 分子 (H_{N} - C) 衡量当前收盘价低于窗口最高高价的程度。
- 分母 (H_{N} - L_{N}) 衡量窗口的总区间大小。
-
缩放为带负号的震荡指标。
- 乘以 −100 可将归一化位置表示在 −100 到 0 的范围内。
一个简单的计算示例(含明确假设)
假设你在某根K线上计算该指标,参数如下:
- 回溯周期 (N = 5)
- (C = 1.2000)
- 最近 5 根K线的最高高价 (H_{N} = 1.2100)
- 最近 5 根K线的最低低价 (L_{N} = 1.1950)
计算:
- (H_{N} - C = 1.2100 - 1.2000 = 0.0100)
- (H_{N} - L_{N} = 1.2100 - 1.1950 = 0.0150)
然后:
- (\frac{H_{N}-C}{H_{N}-L_{N}} = \frac{0.0100}{0.0150} = 0.6667)
- (\text{威廉姆斯 %R} = -100 \times 0.6667 \approx -66.67)
从纯数学角度解释:
- 如果 (C) 更接近 (H_{N}),分数更小,指标值趋近于 0。
- 如果 (C) 更接近 (L_{N}),分数更大,指标值趋近于 −100。
局限性与风险:计算可能失败或误导的情况
威廉姆斯 %R 在数学上简单明了,但实际使用中依赖于影响计算结果的细节。
1) 区间坍缩时的除零错误
如果在最近 N 根K线中:
- (H_{N} = L_{N})
则分母 (H_{N} - L_{N}) 等于 0,公式无定义。这种情况可能发生在价格在窗口内无波动时(例如,在流动性不足期间或数据异常后)。此时,平台可能显示“不可用”、空白值或采用其他处理方式。
2) 回溯周期选择影响响应速度
由于 (H_{N}) 和 (L_{N}) 来自滚动窗口,不同的 N 值会影响:
- 新的极值进入/离开窗口的频率
- 价格变动后指标的移动速度
这是一种参数敏感性,而非对未来预测准确性的保证。
3) 数据定义:高价、低价和收盘价的来源
威廉姆斯 %R 直接依赖于K线的 高价、低价 和 收盘价。实际上,不同提供商在构建K线时可能存在差异:
- 数据是基于买卖中间价、最后成交价还是其他数据源
- 交易时段如何切换
- 在有缺口的时间框架下如何选择“收盘价”
即使使用相同的公式,不同的输入数据也可能导致绘图结果不同。
4) 历史关系不意味着未来结果
即使计算出的震荡指标值与已知的历史行为一致,也不能保证未来类似条件会产生相同结果。市场状况可能变化,指标只是价格数据的转换,而非未来方向的直接度量。
5) 解读 %R 时未考虑计算区间
一种常见错误是只关注震荡指标值,而未检查其是否基于有意义的区间。
- 早期K线可能没有足够历史数据来计算 (H_{N}) 和 (L_{N})。
- 如果窗口内波动率异常低,微小的价格差异可能导致类似百分比的大幅变化。
验证与后续问题:如何自行验证
你可以仅使用公式和所需输入独立验证威廉姆斯 %R。
- 选择一个时间框架和图表上的某根K线。
- 确定你要测试的回溯周期 (N)。
- 手动确定该窗口内的 (H_{N})(最高高价)和 (L_{N})(最低低价)。
- 读取或记录同一K线的收盘价 (C)。
- 代入公式: (\text{威廉姆斯 %R} = -100 \times \frac{H_{N} - C}{H_{N} - L_{N}})
- 确认你的计算值是否与图表工具显示的结果一致(允许四舍五入误差)。
如果不一致,通常是因为以下处理方式不同:
- 窗口包含(极值是否包含当前K线)
- K线构建(高价/低价/收盘价的定义方式)
- 缺失数据或未定义情况的处理方式
你可以比较不同设置(例如,改变 (N))以观察灵敏度变化,或分析该指标与其他动量震荡指标的关系。