企业微信

估值百分位的定义与计算

估值百分位(Valuation Percentile)是将当前估值指标(如市盈率PE、市净率PB)与其历史数据进行比较,得出该指标在历史区间中的相对位置。其数学表达为:当前值高于历史百分之多少的数据。例如,某指数PE当前分位为20%,意味着历史上80%的时间其PE值低于当前,表明估值相对较低。计算方法简单:收集一段历史区间内的估值数据(通常5-10年),排序后,计算当前值所处的位置。常用百分位包括20%、50%、80%作为分界,但具体阈值可依据策略调整。

量化交易中,估值百分位的核心价值在于提供客观、稳定的市场热度度量,避免主观判断陷阱。它强调均值回归思想——极端分位往往预示着价格向价值中枢靠拢。

搭建基于估值百分位的量化策略

量化交易需要系统化规则,将估值百分位作为输入信号时,常见策略模式有两种:择时策略与选股/指数轮动策略。

择时策略:以指数或ETF为交易标的,当估值分位低于特定阈值(如10%)时买入,高于阈值(如90%)时卖出或减仓。该策略依赖历史分位的稳定性,需注意市场结构性变化可能使历史分位失真。

估值百分位在量化交易中如何应用?

指数轮动策略:计算多个行业或资产的历史分位,做多低估品种,做空或规避高估品种。例如,每季度调仓一次,选择分位最低的5个行业指数等权配置,分位最高的5个剔除。

量化交易强调回测验证,避免数据窥探偏差。设计策略时需设定明确的调仓周期(如月度/季度)、交易成本、滑点模型,以贴近实盘。

风险控制与局限

估值百分位并非万能,其有效性与市场环境、历史区间选择密切相关。成长股可能长期处于高分位,价值陷阱可能使低分位持续低迷。风险控制上,结合波动率指标、最大回撤限制、仓位管理,避免单一信号过度暴露。

止损规则必不可少。当估值分位继续恶化(如买入后分位不降反升)时,应设定时间止损或价格止损。分散化投资,跨市场、跨资产类别应用,降低集中性风险。

案例演示:基于Python的简单回测框架


import pandas as pd

import numpy as np

# 假设data有Date, PE, Close三列

def cal_percentile(series):

    return series.rank(pct=True)

data['percentile'] = data['PE'].rolling(window=250, min_periods=1).apply(lambda x: (x[-1] < x).mean())

# 策略规则:当percentile<0.1时买入,>0.9时卖出,信号产生后次日交易

data['signal'] = 0

data.loc[data['percentile'] < 0.1, 'signal'] = 1

data.loc[data['percentile'] > 0.9, 'signal'] = -1

data['position'] = data['signal'].diff().fillna(0).cumsum().clip(lower=0, upper=1)

data['ret'] = data['Close'].pct_change().shift(-1)  # 次日收益

data['strategy_ret'] = data['position'] * data['ret']

print(data[['Date', 'percentile', 'position', 'strategy_ret']].dropna())

真实回测需处理手续费、滑点,并加入做空逻辑等。此处仅为演示计算框架。

优化与迭代

量化交易中,参数优化容易过拟合。常用方法包括滚动的前视窗口优化、交叉验证。对于估值分位,应尝试不同历史长度(如3年、5年、10年),评估稳定性。结合多因子模型,将估值分位与其他因子(动量、质量)合成,提高信号鲁棒性。市场状态切换识别(如牛熊判断)可动态调整阈值。

估值百分位在量化交易中是基础而有效的工具,可生成明确的交易信号。但需配合严谨回测、风险控制与持续迭代。交易者应理解其统计意义,避免机械套用,在动态市场中灵活调整策略参数,使量化模型适应市场变化,最终实现超额收益。