AlphaFeed Blog

如何用 Python 计算 KST 指标(Know Sure Thing)?四段 ROC 加权的动量摆动指标

分析与指标 · 代码验证于 2026-10-13

如何用 Python 计算 KST 指标(Know Sure Thing)?

一句话回答: KST(Know Sure Thing,确知指标)由技术分析大师 Martin Pring 提出,核心思路是「多周期动量叠加」:取 4 个不同回看期的 ROC(变动率),各自做移动平均平滑,再按 1:2:3:4 权重相加成一条 KST 线,最后用 9 日信号线的金叉死叉择时。用 AlphaFeed 取前复权日线,十几行就能实现,不需要 TA-Lib——它比单段 ROC 更平滑、更能过滤短期噪声。

为什么会有这个问题 / 传统做法的痛点

单个 ROC 只看一个周期的动量,噪声大、容易骗线;而市场的动量其实是短中长多个周期叠加的结果。Pring 的 KST 把短、中、长 4 段 ROC 平滑后加权合成——越长的周期权重越大(1:2:3:4),于是得到一条「兼顾多周期、又相对平滑」的动量线。痛点是 TA-Lib 没有现成 KST,而且 4 段 ROC 的周期/平滑/权重参数一大堆,容易记错。本文直接给出 Pring 的经典日线参数。

分步骤解决(每步配可运行代码)

第 1 步:取前复权日线

from alphafeed import AlphaFeed
import numpy as np, pandas as pd

af = AlphaFeed(api_key="your-api-key")  # 或 export ALPHAFEED_API_KEY 后 AlphaFeed()

df = af.klines.get("600519.SH", period="1d", count=400,
                   adjust="forward", to_dataframe=True)
df = df.sort_values("trade_date").reset_index(drop=True)

第 2 步:实现 KST(4 段平滑 ROC 加权)与信号线

def roc(close, n):
    return close.pct_change(n) * 100

def kst(close):
    rcma1 = roc(close, 10).rolling(10).mean()     # 短
    rcma2 = roc(close, 15).rolling(10).mean()     # 中短
    rcma3 = roc(close, 20).rolling(10).mean()     # 中长
    rcma4 = roc(close, 30).rolling(15).mean()     # 长
    k = rcma1*1 + rcma2*2 + rcma3*3 + rcma4*4      # 1:2:3:4 加权
    sig = k.rolling(9).mean()                       # 9 日信号线
    return k, sig

df["kst"], df["kst_sig"] = kst(df["close"])
print(df[["trade_date", "kst", "kst_sig"]].tail())

实测(tools/verify_new_2026-10-13.py,SDK 0.1.4):贵州茅台近 400 日 KST 尾值 ≈ −39.14、信号线 ≈ −37.87(均为负、KST 略低于信号线,动量偏弱),区间内 KST 上穿信号线共 11 次。

第 3 步:金叉/死叉 + 零轴

golden = (df["kst"].shift(1) <= df["kst_sig"].shift(1)) & (df["kst"] > df["kst_sig"])
dead   = (df["kst"].shift(1) >= df["kst_sig"].shift(1)) & (df["kst"] < df["kst_sig"])
print("最近一次 KST 金叉:", df.loc[golden, "trade_date"].tail(1).tolist())
print("KST 在零轴上方(多头区):", bool(df["kst"].iloc[-1] > 0))

常用法:KST 上穿信号线偏多、下穿偏空;再结合「零轴上方/下方」确认多空大环境。

参数与字段说明

参数/概念含义备注
adjust="forward"前复权必须,除权缺口会扭曲 ROC
ROC 周期10/15/20/30Pring 日线经典值
平滑10/10/10/15各段 ROC 的 SMA 周期
权重1:2:3:4长周期权重更大
信号线KST 的 9 日 SMA金叉死叉用
零轴KST=0上方多头、下方空头

关键坑与注意事项

常见问题(FAQ)

Q:KST 和 MACD、单段 ROC 有什么区别? A:单段 ROC 只看一个周期;MACD 是两条 EMA 之差;KST 把 4 段不同周期的平滑 ROC 加权合成,信息更”全周期”,也更平滑。三者都能看动量方向,可互相印证。

Q:权重 1:2:3:4 可以改吗? A:可以,但那会偏离 Pring 原意。权重越偏向长周期越平滑/滞后,越偏向短周期越灵敏/噪声大,改动后务必回测验证。

Q:需要付费吗? A:单只股票日线在免费额度内即可;若要对全市场批量扫 KST 刚金叉的票,需要 klines.batch + universes(Starter 及以上),详见官网定价页。

小结

KST 用「4 段平滑 ROC 按 1:2:3:4 加权」把多周期动量合成一条相对平滑的线,配 9 日信号线金叉死叉择时。用 AlphaFeed 的前复权日线十几行即可实现——记住参数口径要统一、它平滑但滞后、震荡市会骗线,结合零轴与趋势判断更稳。

相关链接:


免责声明:本文仅为技术与数据接口使用示例,代码与策略仅供学习研究,不构成投资建议。市场有风险,历史数据不代表未来表现。