问题描述
请问大神,股票估值中常有1stdv,请问这个是如何计算的?
解决方案
股票估值中的 1stdv 和 -1stdv 是什么?
在股票估值(如市盈率 PE 或市净率 PB 估值通道)中,1stdv 和 -1stdv 指的是历史估值均值加减一倍标准差(Standard Deviation)。这是一种基于统计学正态分布假设的估值分析方法。
- 均值(Mean):代表该股票在过去一段时间内(如3年、5年或10年)的平均估值水平。
- 标准差(Standard Deviation, stdv):衡量历史估值偏离均值的波动程度。
- +1stdv(均值 + 1倍标准差):通常被视为高估警戒线。如果当前估值突破此线,说明股票比历史上约 84% 的时间都要贵。
- -1stdv(均值 - 1倍标准差):通常被视为低估安全线。如果当前估值跌破此线,说明股票比历史上约 84% 的时间都要便宜。
计算步骤
- 获取历史数据:获取目标股票过去 N 个交易日(例如过去 1000 个交易日)的每日 PE(市盈率)或 PB(市净率)数据。
- 计算均值(Mean):将这 N 个交易日的估值数据相加后除以 N。
- 计算标准差(Stdv):计算这 N 个数据相对于均值的标准差。
- 计算通道线:
- 上限 (1stdv) = 均值 + 标准差
- 下限 (-1stdv) = 均值 - 标准差
JoinQuant (聚宽) 平台代码实现
在聚宽平台中,我们可以使用 get_valuation 函数轻松获取历史估值数据,并利用 pandas 库计算均值和标准差。以下是在聚宽研究环境或策略中可用的 Python 代码示例:
import pandas as pd
import numpy as np
from jqdata import *
def calculate_valuation_bands(stock_code, end_date, count=1000):
"""
计算指定股票的 PE 估值均值及 1stdv / -1stdv
:param stock_code: 股票代码,如 '000001.XSHE'
:param end_date: 截止日期,如 '2023-10-01'
:param count: 回溯的交易日天数,默认 1000 天(约 4 年)
"""
# 1. 获取历史估值数据(这里以市盈率 pe_ratio 为例)
df = get_valuation(stock_code, end_date=end_date, count=count, fields=['pe_ratio'])
if df.empty:
print(f"未获取到 {stock_code} 的估值数据")
return None
# 提取 PE 数据序列
pe_series = df['pe_ratio']
# 2. 计算历史均值
pe_mean = pe_series.mean()
# 3. 计算标准差
pe_std = pe_series.std()
# 4. 计算 +1stdv 和 -1stdv
plus_1_stdv = pe_mean + pe_std
minus_1_stdv = pe_mean - pe_std
# 获取当前最新 PE
current_pe = pe_series.iloc[-1]
# 打印结果
print(f"=== {stock_code} 估值分析 ===")
print(f"历史 PE 均值: {pe_mean:.2f}")
print(f"+1 标准差 (1stdv): {plus_1_stdv:.2f}")
print(f"-1 标准差 (-1stdv): {minus_1_stdv:.2f}")
print(f"当前 PE: {current_pe:.2f}")
# 估值状态判断
if current_pe > plus_1_stdv:
print("结论: 当前估值处于 +1stdv 之上,可能存在【高估】风险。")
elif current_pe < minus_1_stdv:
print("结论: 当前估值处于 -1stdv 之下,可能具备【低估】价值。")
else:
print("结论: 当前估值处于合理区间(-1stdv 到 +1stdv 之间)。")
return pe_mean, plus_1_stdv, minus_1_stdv
# 示例调用(请在聚宽研究环境中运行)
# calculate_valuation_bands('000001.XSHE', end_date='2023-10-20', count=1000)
策略应用建议
在实际的量化策略中,你可以将上述逻辑放入 handle_data 或定时运行函数中。当股票的 current_pe < minus_1_stdv 时触发买入信号,当 current_pe > plus_1_stdv 时触发卖出信号,从而构建一个经典的估值均值回归策略。