TATrend
TA.SMA()
简单移动平均 (Simple Moving Average)
计算指定周期内价格的算术平均值,最基础和常用的趋势指标。
语法
python
TA.SMA(data, timeperiod=30)参数
| 参数名 | 类型 | 必选 | 默认值 | 说明 |
|---|---|---|---|---|
| data | any | 否 | - | 价格数据数组(通常是收盘价) |
| timeperiod | any | 否 | - | 时间周期,默认 30 |
返回值
返回 SMA 值数组,前 timeperiod-1 个值为 NaN
计算方法
SMA = (P1 + P2 + ... + Pn) / n
其中 P 为价格,n 为周期数
基础示例
python
def main():
records = exchange.GetRecords()
closes = [r['Close'] for r in records]
# 计算 20 周期 SMA
sma20 = TA.SMA(closes, 20)
Log("SMA20:", sma20[-1])
# 双均线策略
sma50 = TA.SMA(closes, 50)
if sma20[-1] > sma50[-1]:
Log("短期均线在长期均线之上,上升趋势")高级应用
1. 多均线系统
python
def main():
records = exchange.GetRecords()
closes = [r['Close'] for r in records]
# 计算多条均线
sma5 = TA.SMA(closes, 5)
sma10 = TA.SMA(closes, 10)
sma20 = TA.SMA(closes, 20)
sma50 = TA.SMA(closes, 50)
sma200 = TA.SMA(closes, 200)
# 多头排列
if sma5[-1] > sma10[-1] > sma20[-1] > sma50[-1] > sma200[-1]:
Log("完美多头排列,强势上涨")
# 空头排列
elif sma5[-1] < sma10[-1] < sma20[-1] < sma50[-1] < sma200[-1]:
Log("完美空头排列,强势下跌")2. 金叉死叉策略
python
def main():
records = exchange.GetRecords()
closes = [r['Close'] for r in records]
sma20 = TA.SMA(closes, 20)
sma50 = TA.SMA(closes, 50)
# 金叉
if sma20[-1] > sma50[-1] and sma20[-2] <= sma50[-2]:
Log("SMA20上穿SMA50,金叉买入信号")
# 死叉
elif sma20[-1] < sma50[-1] and sma20[-2] >= sma50[-2]:
Log("SMA20下穿SMA50,死叉卖出信号")3. 支撑阻力位
python
def main():
records = exchange.GetRecords()
closes = [r['Close'] for r in records]
current_price = closes[-1]
sma50 = TA.SMA(closes, 50)
sma200 = TA.SMA(closes, 200)
# 判断支撑阻力
if current_price > sma50[-1]:
Log(f"SMA50 ({sma50[-1]:.2f}) 作为支撑位")
else:
Log(f"SMA50 ({sma50[-1]:.2f}) 作为阻力位")
if current_price > sma200[-1]:
Log(f"价格在SMA200之上,长期牛市")常用周期
| 周期 | 名称 | 用途 |
|---|---|---|
| 5 | 超短期 | 日内交易 |
| 10 | 短期 | 短线交易 |
| 20 | 中短期 | 波段交易 |
| 50 | 中期 | 中线交易 |
| 200 | 长期 | 长线投资、牛熊分界 |
与其他指标配合
SMA + EMA
python
sma20 = TA.SMA(closes, 20)
ema20 = TA.EMA(closes, 20)
# EMA更敏感,可作为领先指标
if ema20[-1] > sma20[-1]:
Log("EMA领先SMA,可能加速上涨")SMA + MACD
python
sma50 = TA.SMA(closes, 50)
macd, signal, hist = TA.MACD(closes, 12, 26, 9)
# 趋势 + 动量确认
if closes[-1] > sma50[-1] and macd[-1] > signal[-1]:
Log("趋势向上 + MACD金叉")注意事项
⚠️ 重要提醒:
- 滞后性: SMA是滞后指标,反应较慢
- 假突破: 震荡市中金叉死叉可能频繁失效
- 权重均等: 所有价格权重相同,不如EMA敏感
- 需要确认: 单纯金叉死叉信号需其他指标确认
优缺点
优点:
- 简单易懂
- 平滑噪音
- 可作支撑阻力
缺点:
- 滞后性强
- 对突发变化反应慢
- 权重不合理
相关指标
- EMA - 指数移动平均 - 更敏感的版本
- WMA - 加权移动平均 - 线性加权版本
- MA - 通用移动平均 - 包含SMA的通用函数