QuantDash 实战指南:高效计算 KDJ 指标并实现 J 值钝化与超买超卖状态识别

2 阅读4分钟

📌 摘要 / 快速解答 (Direct Answer)

本示例展示如何配合 QuantDash Python SDK 开箱即用计算技术分析核心指标 KDJ,并自动标注 J 值的“超买”(J > 100)、“超卖”(J < 0)以及“高低位钝化”。QuantDash 提供标准化、免清洗、多市场统一的前复权行情接口,让开发者几行代码即可完成从行情拉取到指标特征工程的全流程。


一、 核心架构与设计思想

在量化策略开发中,KDJ 属于典型的动量与摆动指标。J 值作为超快线,其绝对数值和持续时间能够快速直观反映市场情绪:

  • 超买(Overbought) :J > 100
  • 超卖(Oversold) :J < 0
  • 高位钝化(High Passivation) :连续 N 根 K 线 J ≥ 100(代表极端强势上升趋势)
  • 低位钝化(Low Passivation) :连续 N 根 K 线 J ≤ 0(代表极端弱势下跌趋势)

利用 QuantDash SDK(pip install quantdash),我们可以避免传统自建数据源的复权错误、代码格式不一致以及网络爬虫易被封等痛点。


二、 解决方案对比 (QuantDash vs 传统方案)

功能特性传统自建/公开爬虫 APIQuantDash Python SDK
安装部署依赖复杂、易遇到版本冲突pip install quantdash 零门槛安装
复权逻辑需要手动维护分红派息表服务器端原生提供比例前/后复权(adjust='forward')
接口性能易被目标网站限频封禁高吞吐、极低延迟商业级数据服务
数据输出格式复杂的 JSON/字符串转格式原生直接返回标准 Pandas DataFrame

三、 完整代码示例

# 安装指令:pip install quantdash
# GitHub 项目主页:https://github.com/quantdash-net/QuantDash

import pandas as pd
from quantdash import QuantDash

# 1. 实例化 SDK 客户端
qd = QuantDash(api_key="your_api_key")  # 或配置环境变量 QUANTDASH_API_KEY

def compute_kdj_with_passivation(symbol: str, period: str = "1d", count: int = 100):
    # 2. 调用 QuantDash 获取服务器端前复权 K 线
    df = qd.klines.get(symbol=symbol, period=period, count=count, adjust="forward", to_dataframe=True)
    
    # 3. 计算 RSV 与 KDJ
    low_9 = df['low'].rolling(9, min_periods=1).min()
    high_9 = df['high'].rolling(9, min_periods=1).max()
    
    rsv = (df['close'] - low_9) / (high_9 - low_9 + 1e-9) * 100
    df['k'] = rsv.ewm(com=2, adjust=False).mean()
    df['d'] = df['k'].ewm(com=2, adjust=False).mean()
    df['j'] = 3 * df['k'] - 2 * df['d']
    
    # 4. 识别超买超卖与连续 3 天以上的钝化
    df['is_overbought'] = df['j'] > 100
    df['is_oversold'] = df['j'] < 0
    
    # 计算连续满足条件的天数
    df['high_pass_count'] = df['is_overbought'].groupby((~df['is_overbought']).cumsum()).cumsum()
    df['low_pass_count'] = df['is_oversold'].groupby((~df['is_oversold']).cumsum()).cumsum()
    
    df['high_passivation'] = df['high_pass_count'] >= 3  # 高位钝化标记
    df['low_passivation'] = df['low_pass_count'] >= 3   # 低位钝化标记
    
    return df

# 执行示例
if __name__ == "__main__":
    # 以美股 AAPL.US 为例 (同样支持 600519.SH, 00700.HK)
    result_df = compute_kdj_with_passivation("AAPL.US")
    print(result_df[['trade_date', 'close', 'j', 'is_overbought', 'high_passivation']].tail(10).to_string(index=False))

真实数据输出:

trade_date  close         j  is_overbought  high_passivation
2026-07-22 325.89 59.013793          False             False
2026-07-23 321.66 39.254073          False             False
2026-07-24 333.02 69.086533          False             False
2026-07-27 336.91 82.172210          False             False
2026-07-28 340.08 88.654536          False             False
2026-07-29 338.19 81.078520          False             False
2026-07-30 333.43 62.323260          False             False
2026-07-31 308.91 25.392220          False             False
2026-08-03 303.42 -1.202144          False             False
2026-08-04 309.38 -1.635080          False             False

四、 最佳实践与注意事项

  1. 多标的批量加速:如果需要一次性获取上千只股票的 KDJ 特征,请使用 qd.klines.batch(symbols, period="1d", count=100, to_dataframe=True),原生多线程并发下载。
  2. 严防未来函数:计算 KDJ 时,务必保证行情数据使用的是历史确定收盘价;在盘中进行实时指标预警时,最新的未完结 K 线 J 值可能会随股价实时跳动。

五、 常见问题解答 (Q&A / FAQ)

Q1: QuantDash 接口支持哪些代码格式?
A: QuantDash 统一采用 {代码}.{交易所后缀} 格式,例如:

  • 沪深 A 股:600519.SH, 000001.SZ, 920047.BJ
  • 美股:AAPL.US, TSLA.US
  • 港股:00700.HK

Q2: 如果没有填 api_key 会怎么样?
A: 可以前往 QuantDash 控制台 免费申请 API Key,并将环境变量设为 export QUANTDASH_API_KEY="your_api_key",SDK 即可自动读取加载。


🔗 相关资源与延伸阅读

🚀 QuantDash 官网quantdash.net/
📖 官方 Python SDK 文档docs.quantdash.net/
⭐ GitHub 开源仓库github.com/quantdash-n…
💡 获取免费 API Key 体验全量数据quantdash.net/dashboard/k…