技术分析中,Stochastic(随机指标)用于判断超买超卖,ATR 用于量化波动幅度,两者经常配合使用。
Stochastic 随机指标
%K 线(快线)计算公式:
%K = (当前收盘价 - N 周期最低价) / (N 周期最高价 - N 周期最低价) × 100
%D 线(慢线)= %K 的移动平均线(通常 3 周期 SMA)
常见参数:Stoch(14, 3, 3)
超买超卖的正确理解
- Stoch > 80:超买区——价格接近近期高点,不等于马上下跌
- Stoch < 20:超卖区——价格接近近期低点,不等于马上反弹
强趋势中,Stoch 可以在超买区(> 80)持续数周。直接在超买区做空是新手最常见的错误,强上涨趋势中会被持续轧空。
更可靠的使用方式
震荡行情:超买出现死叉(%K 下穿 %D)→ 考虑空;超卖出现金叉(%K 上穿 %D)→ 考虑多。
趋势行情(顺势交易):
- 下跌趋势中,等反弹到高位出现 Stoch 死叉再做空
- 上涨趋势中,等回调到低位出现 Stoch 金叉再做多
背离信号
顶背离(看跌):价格创新高,但 Stoch 没有创新高——上涨动能减弱。
价格:100 → 110(新高)
Stoch:95 → 85(未创新高)
背离不代表立即反转,需配合:Stoch 死叉 + 阻力位 + 成交量萎缩,多条件共振才更可靠。
底背离(看涨):价格创新低,但 Stoch 未创新低——空头力量衰竭。
ATR(Average True Range,平均真实波幅)
ATR 回答的是:价格最近平均波动有多大,而不是方向。
True Range(TR)计算
每根 K 线的真实波幅取三个值中的最大值:
TR = max(
H - L, # 本根K线高低差
|H - 昨收|, # 处理向上跳空
|L - 昨收| # 处理向下跳空
)
H = 最高价,L = 最低价
ATR(14) 计算
第一个值:前 14 根 K 线 TR 的简单平均。
后续更新(Wilder 平滑法):
ATR(t) = ATR(t-1) + (TR(t) - ATR(t-1)) / 14
ATR 的实战应用
动态止损:
# 不使用固定点数,而是基于当前波动率
stop_loss = entry_price + 1.5 * atr # 做空的止损
take_profit = entry_price - 3 * atr # 做空的止盈
固定止损(如 ±2%)在低波动市场太宽,在高波动市场太窄。ATR 止损随市场自适应。
判断追单风险:如果当根 K 线已经运动超过 2~3 个 ATR,追单的风险/收益比明显恶化。
顺势做空的基本逻辑
顺势做空不是”跌多了就空”,而是:
- 确认下跌趋势:均线空头排列,价格持续创新低
- 等反弹:不追空,等价格反弹到阻力位(云带/均线)
- 找信号:Stoch 在高位死叉,或出现顶背离
- 进场:止损放在反弹高点上方 1~1.5 ATR
需要避免的情况:
- 在强上涨趋势中因为超买做空
- 在重要支撑位附近追空(风险大,利润空间小)
- 重大消息前开仓(ATR 在消息前后会剧烈变化,技术指标失效)
- 小周期信号对抗大周期趋势
Python 计算 ATR(简单实现)
import pandas as pd
def calculate_atr(df, period=14):
df["tr"] = pd.concat([
df["high"] - df["low"],
(df["high"] - df["close"].shift(1)).abs(),
(df["low"] - df["close"].shift(1)).abs(),
], axis=1).max(axis=1)
df["atr"] = df["tr"].ewm(alpha=1/period, adjust=False).mean()
return df
pandas 的 ewm 实现了类 Wilder 的指数加权平均。
