3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在股票估值(如市盈率 PE 或市净率 PB 估值通道)中,1stdv 和 -1stdv 指的是历史估值均值加减一倍标准差(Standard Deviation)。这是一种基于统计学正态分布假设的估值分析方法。
在聚宽平台中,我们可以使用 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 时触发卖出信号,从而构建一个经典的估值均值回归策略。