Pharos
TATrend

TA.SMA()

简单移动平均 (Simple Moving Average)

计算指定周期内价格的算术平均值,最基础和常用的趋势指标。

语法

python
TA.SMA(data, timeperiod=30)

参数

参数名类型必选默认值说明
dataany-价格数据数组(通常是收盘价)
timeperiodany-时间周期,默认 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金叉")

注意事项

⚠️ 重要提醒

  1. 滞后性: SMA是滞后指标,反应较慢
  2. 假突破: 震荡市中金叉死叉可能频繁失效
  3. 权重均等: 所有价格权重相同,不如EMA敏感
  4. 需要确认: 单纯金叉死叉信号需其他指标确认

优缺点

优点

  • 简单易懂
  • 平滑噪音
  • 可作支撑阻力

缺点

  • 滞后性强
  • 对突发变化反应慢
  • 权重不合理

相关指标

返回目录

← 返回趋势指标目录