TAStatistics
TA.STDDEV() - 标准差
标准差 (Standard Deviation)
计算价格的标准差,衡量价格波动性和离散程度。
语法
python
TA.STDDEV(close, timeperiod=5, nbdev=1)参数
| 参数名 | 类型 | 必选 | 默认值 | 说明 |
|---|---|---|---|---|
| close | any | 否 | - | 收盘价数组 |
| timeperiod | any | 否 | - | 计算周期,默认 5 |
| nbdev | any | 否 | - | 标准差倍数,默认 1 |
返回值
返回标准差数组,单位与价格相同。
计算方法
标准差衡量数据偏离平均值的程度:
plaintext
标准差 = √(Σ(x - μ)² / N)
其中:
x = 每个价格
μ = 平均价格
N = 周期数标准差越大,价格波动越剧烈。
信号解读
波动性判断
- 标准差上升:波动性增加
- 标准差下降:波动性减少
- 标准差极低:市场平静,可能酝酿突破
- 标准差极高:市场剧烈波动
应用场景
- 风险评估:标准差大 = 风险高
- 止损设置:根据标准差设置动态止损
- 布林带构建:中轨 ± N×标准差
- 仓位管理:波动大时减仓
基础示例
波动性监控
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 | 长线投资 |
| 倍数 | 说明 |
|---|---|
| 1σ | 68%数据在此范围 |
| 2σ | 95%数据在此范围 |
| 3σ | 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 双重确认高波动")注意事项
- 单位问题:标准差单位与价格相同,不同资产不可比
- 正态分布假设:市场数据可能不符合正态分布
- 极端值影响:异常值会显著影响标准差
- 滞后性:标准差是过去数据的统计
- 波动聚集:高波动后通常伴随高波动
- 周期选择:长周期更平滑,短周期更敏感
相关指标
- VAR - 方差 - 标准差的平方
- ATR - 平均真实波幅
- BBANDS - 布林带
实战要点
波动性应用
✅ 标准差大时缩小仓位 ✅ 标准差小时等待突破 ✅ 用标准差设置动态止损 ✅ 波动率变化判断市场状态
风险控制
- 2σ止损适合中等风险
- 3σ止损适合保守策略
- 波动率上升时降低杠杆
- 极端波动时避免交易