📊 KDJ 是什么?
KDJ又称随机指标,比RSI更灵敏,特别适合短线交易。
由三条线组成:
- 🔵 K线:主力线
- 🟠 D线:辅助线
- 🔴 J线:K和D的差值(最灵敏)
🎯 KDJ 交易信号
1. 金叉买入
K线从下往上穿过D线:
if k > d and k_prev
2. 死叉卖出
K线从上往下穿过D线:
if k = d_prev:
print("死叉!卖出信号!")
3. 超买超卖
- 📈 KDJ > 80 → 超买,可能要跌
- 📉 KDJ 超卖,可能要涨
4. 背离
- 📈 股价创新高,KDJ没创新高 → 顶背离(卖出)
- 📉 股价创新低,KDJ没创新低 → 底背离(买入)
👨💻 用Python计算KDJ
import pandas as pd
import akshare as ak
# 获取数据
df = ak.stock_zh_a_hist(symbol="600519", adjust="qfq")
df = df.tail(60)
# 计算KDJ
low_n = df["最低"].rolling(9).min()
high_n = df["最高"].rolling(9).max()
rsv = (df["收盘"] - low_n) / (high_n - low_n) * 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"]
print(df[["日期", "收盘", "K", "D", "J"]].tail(10))
📈 完整画图例子
import akshare as ak
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
# 获取数据
df = ak.stock_zh_a_hist(symbol="600519", adjust="qfq")
df = df.tail(60)
# 计算KDJ
low_n = df["最低"].rolling(9).min()
high_n = df["最高"].rolling(9).max()
rsv = (df["收盘"] - low_n) / (high_n - low_n) * 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"]
# 画图
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(12, 6))
# 股价
ax1.plot(df["日期"], df["收盘"], label="收盘价")
ax1.set_title("茅台股价")
# KDJ
ax2.plot(df["日期"], df["K"], label="K", color="blue")
ax2.plot(df["日期"], df["D"], label="D", color="orange")
ax2.plot(df["日期"], df["J"], label="J", color="red")
ax2.axhline(y=80, color="red", linestyle="--", alpha=0.5)
ax2.axhline(y=20, color="green", linestyle="--", alpha=0.5)
ax2.set_title("KDJ指标")
ax2.legend()
plt.tight_layout()
plt.show()
⚠️ KDJ 使用注意事项
- 📊 非常灵敏,适合短线
- ⚠️ 震荡行情中容易反复金叉死叉
- 💡 建议配合均线或趋势一起用
- 🎯 只做顺势,不要逆势操作
📚 下一课
学会了KDJ,我们来学布林带——看看股价是不是”贵”了!