TATrend
TA.WMA() - 加权移动平均线
Weighted Moving Average (WMA) 加权移动平均线,赋予近期数据更高权重,对价格变化更敏感。
语法
python
TA.WMA(data)
TA.WMA(data, timeperiod=30)参数
| 参数 | 类型 | 说明 | 默认值 |
|---|---|---|---|
| data | array | 价格数据(通常为收盘价) | - |
| timeperiod | int | 计算周期 | 30 |
返回值
返回加权移动平均线数组。
计算方法
plaintext
WMA = Σ(Price[i] × Weight[i]) / Σ(Weight[i])
其中:Weight[i] = n - i + 1(最近的权重最高)
示例(周期5):
价格:[100, 102, 104, 103, 105]
权重:[1, 2, 3, 4, 5]
WMA = (100×1 + 102×2 + 104×3 + 103×4 + 105×5) / (1+2+3+4+5)
= (100 + 204 + 312 + 412 + 525) / 15
= 103.53特点
- 加权机制:近期价格权重更高
- 响应速度:比SMA快,比EMA慢
- 平滑效果:比SMA好,保持趋势追踪
- 适用场景:短期趋势跟踪
基础示例
python
def main():
records = exchange.GetRecords()
if len(records) < 50:
return
closes = [r['Close'] for r in records]
wma5 = TA.WMA(closes, 5)
wma10 = TA.WMA(closes, 10)
wma20 = TA.WMA(closes, 20)
# 多周期趋势判断
if wma5[-1] > wma10[-1] > wma20[-1]:
Log("多头排列,趋势向上")
elif wma5[-1] < wma10[-1] < wma20[-1]:
Log("空头排列,趋势向下")高级应用
WMA交叉策略
python
def wma_cross_strategy():
records = exchange.GetRecords()
closes = [r['Close'] for r in records]
wma_fast = TA.WMA(closes, 10)
wma_slow = TA.WMA(closes, 30)
# 金叉做多
if wma_fast[-1] > wma_slow[-1] and wma_fast[-2] <= wma_slow[-2]:
exchange.Buy(-1, 0.5)
Log("WMA金叉,开多仓")
# 死叉做空
elif wma_fast[-1] < wma_slow[-1] and wma_fast[-2] >= wma_slow[-2]:
exchange.Sell(-1, 0.5)
Log("WMA死叉,开空仓")与SMA/EMA对比
| 指标 | 灵敏度 | 滞后性 | 噪音 | 适用 |
|---|---|---|---|---|
| SMA | 低 | 高 | 少 | 长期趋势 |
| WMA | 中 | 中 | 中 | 中期趋势 |
| EMA | 高 | 低 | 多 | 短期趋势 |
注意事项
- WMA对突发异常值仍敏感
- 权重分配线性,不如EMA指数衰减合理
- 实际应用中EMA更常用
- 适合与其他指标结合