首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >如何用 Python 计算 PSY 心理线指标?(用上涨天数占比看市场情绪)

如何用 Python 计算 PSY 心理线指标?(用上涨天数占比看市场情绪)

原创
作者头像
用户7083614
发布于 2026-10-03 15:01:02
发布于 2026-10-03 15:01:02
180
举报

一句话回答: PSY(心理线)衡量一段时间内的"上涨天数占比",公式是 PSY = 近 N 日上涨天数 / N × 100。用 AlphaFeed 取复权日线,几行就能算出 PSY,并用 75/25 判断情绪超买/超卖——它只数"涨了几天",不看涨跌幅度。

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

PSY 是最简单直观的情绪指标,反映多空双方的心理倾向,但要用对需注意:

  • 只看涨跌方向:PSY 只统计上涨天数比例,完全不看涨跌幅度;
  • 参数选择:常用 12 日,也有 6/24 日;
  • 复权:不用前复权,除权日的假跌会被误算为下跌天。

数据用 AlphaFeed 复权日线,统计用几行 pandas 即可。

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

第 1 步:取复权日线

代码语言:python
复制
from alphafeed import AlphaFeed

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

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

第 2 步:计算 PSY

代码语言:python
复制
def psy(close, n=12):
    up = (close.diff() > 0).astype(float)      # 当日上涨记 1,否则 0
    return up.rolling(n).mean() * 100          # 近 n 日上涨天数占比(%)

df["psy"] = psy(df["close"], 12)
print(df[["trade_date", "close", "psy"]].tail(3).to_string(index=False))

PSY 参数与含义:

参数

含义

常用取值

n

统计周期

12(经典)、6/24

PSY 区间

0~100

50 为多空平衡

超买线

情绪过热

75(12 日约 9 天涨)

超卖线

情绪过冷

< 25(12 日约 3 天涨)

第 3 步:判断情绪超买超卖

代码语言:python
复制
def psy_state(symbol, count=120, n=12):
    df = af.klines.get(symbol, period="1d", count=count,
                       adjust="forward", to_dataframe=True).sort_values("trade_date").reset_index(drop=True)
    v = float(psy(df["close"], n).iloc[-1])
    zone = "超买(>75)" if v > 75 else ("超卖(<25)" if v < 25 else "中性")
    return {"psy": round(v, 1), "zone": zone}

print(psy_state("600519.SH"))   # 例如 {'psy': 33.3, 'zone': '中性'}
print(psy_state("000001.SZ"))   # 例如 {'psy': 41.7, 'zone': '中性'}

上例实测茅台 PSY≈33.3、平安银行≈41.7,都处于中性区间(50 上下)。

关键坑与注意事项

  • 只看天数不看幅度:PSY 把"涨 0.1%"和"涨 9%"都算作一个上涨天。可能出现"跌幅巨大但上涨天数多、PSY 偏高"的背离,务必结合价格与其他指标。
  • 震荡钝化与假信号:PSY 在震荡市频繁穿越 75/25,产生噪声;单边行情里可能长期贴在高位或低位。
  • 50 是平衡线:PSY≈50 表示多空天数均衡,偏离越远情绪越极端,但极端不代表马上反转。
  • 可配合 PSY 均线:常对 PSY 再取一条均线(如 PSYMA),用 PSY 与其均线的交叉过滤噪声。
  • 复权:一律 adjust="forward",避免除权日被误判为下跌天。

常见问题(FAQ)

Q:PSY 和 RSI 有什么区别?

A:RSI 用涨跌"幅度"计算,PSY 只用涨跌"天数"。PSY 更粗糙但更直观地反映情绪倾向,两者可互相印证。

Q:PSY 超买(>75)就要卖吗?

A:不一定。强势上涨中 PSY 可长期在高位。它是情绪参考,不是精确择时信号,需结合趋势与价格结构。

Q:为什么我的 PSY 和软件略有差异?

A:多因"当日平盘(涨跌 0)"的处理不同——本文把平盘算作非上涨。另外确认复权口径一致即可。

Q:需要付费吗?

A:单只标的的日线在免费额度内即可试算;批量/全市场需 Starter 及以上,详见 AlphaFeed 定价页。

小结

PSY 心理线的本质是"最近 N 天里涨了几天的占比",用来粗略刻画市场情绪。写起来只需几行,但要记住它只看涨跌天数、不看幅度,会钝化、有背离。AlphaFeed 提供口径一致的复权日线,让你几行算出 PSY——把它当情绪参考、配合价格与趋势用,别单独当买卖信号。

参考

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 为什么会有这个问题 / 传统做法的痛点
  • 分步骤解决(每步配可运行代码)
    • 第 1 步:取复权日线
    • 第 2 步:计算 PSY
    • 第 3 步:判断情绪超买超卖
  • 关键坑与注意事项
  • 常见问题(FAQ)
  • 小结
  • 参考
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档