Pharos
TAStatistics

TA.STDDEV() - 标准差

标准差 (Standard Deviation)

计算价格的标准差,衡量价格波动性和离散程度。

返回统计函数目录


语法

python
TA.STDDEV(close, timeperiod=5, nbdev=1)

参数

参数名类型必选默认值说明
closeany-收盘价数组
timeperiodany-计算周期,默认 5
nbdevany-标准差倍数,默认 1

返回值

返回标准差数组,单位与价格相同。

计算方法

标准差衡量数据偏离平均值的程度:

plaintext
标准差 = √(Σ(x - μ)² / N)

其中:
x = 每个价格
μ = 平均价格
N = 周期数

标准差越大,价格波动越剧烈。

信号解读

波动性判断

  • 标准差上升:波动性增加
  • 标准差下降:波动性减少
  • 标准差极低:市场平静,可能酝酿突破
  • 标准差极高:市场剧烈波动

应用场景

  1. 风险评估:标准差大 = 风险高
  2. 止损设置:根据标准差设置动态止损
  3. 布林带构建:中轨 ± N×标准差
  4. 仓位管理:波动大时减仓

基础示例

波动性监控

python
def main():
    while True:
        records = exchange.GetRecords()
        if len(records) < 50:
            Sleep(1000)
            continue
        
        closes = [r['Close'] for r in records]
        current_price = closes[-1]
        
        # 计算20周期标准差
        stddev = TA.STDDEV(closes, 20)
        current_std = stddev[-1]
        
        # 标准差占价格的百分比
        std_percent = (current_std / current_price) * 100
        
        Log(f"标准差: {current_std:.2f}")
        Log(f"标准差百分比: {std_percent:.2f}%")
        
        # 波动率判断
        if std_percent > 5:
            Log("⚠️ 高波动性市场")
        elif std_percent < 2:
            Log("💤 低波动性市场")
        else:
            Log("📊 正常波动性市场")
        
        # 波动率变化
        if stddev[-1] > stddev[-2] * 1.5:
            Log("波动率急剧上升")
        
        Sleep(60000)

高级应用

动态止损策略

python
def main():
    position = None
    entry_price = 0
    stop_loss = 0
    
    while True:
        records = exchange.GetRecords()
        if len(records) < 50:
            Sleep(1000)
            continue
        
        closes = [r['Close'] for r in records]
        current_price = closes[-1]
        
        # 计算标准差
        stddev = TA.STDDEV(closes, 20)
        current_std = stddev[-1]
        
        # 开仓
        if position is None:
            # 假设买入条件满足
            position = "long"
            entry_price = current_price
            stop_loss = entry_price - 2 * current_std
            Log(f"✅ 开仓: {entry_price}")
            Log(f"止损: {stop_loss} (-2σ)")
        
        # 止损检查
        elif position == "long":
            if current_price < stop_loss:
                Log(f"❌ 触发止损: {current_price}")
                position = None
            else:
                # 跟踪止损
                new_stop = current_price - 2 * current_std
                if new_stop > stop_loss:
                    stop_loss = new_stop
                    Log(f"📈 移动止损: {stop_loss}")
        
        Sleep(5000)

波动率突破策略

python
def main():
    while True:
        records = exchange.GetRecords()
        if len(records) < 100:
            Sleep(1000)
            continue
        
        highs = [r['High'] for r in records]
        lows = [r['Low'] for r in records]
        closes = [r['Close'] for r in records]
        current_price = closes[-1]
        
        # 标准差
        stddev = TA.STDDEV(closes, 20)
        std_avg = sum(stddev[-20:]) / 20
        
        # 检测低波动
        if stddev[-1] < std_avg * 0.6:
            Log("💤 低波动环境,准备突破")
            
            # 等待突破
            resistance = max(highs[-20:])
            support = min(lows[-20:])
            
            if current_price > resistance:
                Log("✅ 向上突破")
                # exchange.Buy(...)
            elif current_price < support:
                Log("❌ 向下突破")
                # exchange.Sell(...)
        
        Sleep(60000)

参数优化建议

周期推荐值适用场景
短期5-10日内交易
中期20波段交易
长期50-100长线投资
倍数说明
68%数据在此范围
95%数据在此范围
99.7%数据在此范围

与其他指标配合

标准差 + 布林带

python
stddev = TA.STDDEV(closes, 20)
upper, middle, lower = TA.BBANDS(closes, 20, 2, 2)

# 布林带宽度 = 4 × 标准差
bb_width = upper[-1] - lower[-1]
Log(f"布林带宽度: {bb_width:.2f}")
Log(f"4倍标准差: {4 * stddev[-1]:.2f}")

标准差 + ATR

python
stddev = TA.STDDEV(closes, 20)
atr = TA.ATR(highs, lows, closes, 14)

# 双重确认波动性
if stddev[-1] > sum(stddev[-20:])/20 * 1.5:
    if atr[-1] > sum(atr[-20:])/20 * 1.5:
        Log("标准差 + ATR 双重确认高波动")

注意事项

  1. 单位问题:标准差单位与价格相同,不同资产不可比
  2. 正态分布假设:市场数据可能不符合正态分布
  3. 极端值影响:异常值会显著影响标准差
  4. 滞后性:标准差是过去数据的统计
  5. 波动聚集:高波动后通常伴随高波动
  6. 周期选择:长周期更平滑,短周期更敏感

相关指标

实战要点

波动性应用

✅ 标准差大时缩小仓位 ✅ 标准差小时等待突破 ✅ 用标准差设置动态止损 ✅ 波动率变化判断市场状态

风险控制

  • 2σ止损适合中等风险
  • 3σ止损适合保守策略
  • 波动率上升时降低杠杆
  • 极端波动时避免交易

返回统计函数目录 | 返回 TA 指标总目录