跳转至


课程  因子投资  机器学习  Python  Poetry  ppw  tools  programming  Numpy  Pandas  pandas  算法  hdbscan  聚类  选股  Algo  minimum  numpy  algo  FFT  模式识别  配对交易  GBDT  LightGBM  XGBoost  statistics  CDF  KS-Test  monte-carlo  VaR  回测  过拟合  algorithms  machine learning  strategy  python  sklearn  pdf  概率  数学  面试题  量化交易  策略分类  风险管理  Info  interview  career  xgboost  PCA  wavelet  时序事件归因  SHAP  Figures  Behavioral Economics  graduate  arma  garch  人物  职场  Quantopian  figure  Banz  金融行业  买方  卖方  story  量化传奇  rsi  zigzag  穹顶压力  因子  ESG  因子策略  投资  策略  pe  ORB  Xgboost  Alligator  Indicator  factor  alpha101  alpha  技术指标  wave  quant  algorithm  pearson  spearman  tushare  因子分析  Alphalens  涨停板  herd-behaviour  momentum  因子评估  review  SMC  聪明钱  trade  history  indicators  zscore  波动率  强化学习  顶背离  freshman  resources  others  AI  DeepSeek  network  量子计算  金融交易  IBM  weekly  LLT  backtest  backtrader  研报  papers  UBL  quantlib  jupyter-notebook  scikit-learn  pypinyin  qmt  xtquant  blog  static-site  duckdb  工具  colors  free resources  barra  world quant  Alpha  openbb  数据  risk-management  llm  prompt  CANSLIM  Augment  arsenal  copilot  vscode  code  量化数据存储  hdf5  h5py  cursor  augment  trae  Jupyter  jupysql  pyarrow  parquet  数据源  quantstats  实盘  clickhouse  notebook  redis  remote-agent  AI-tools  Moonshot  回测,研报,tushare 

factor&strategy »

节前迎来揪心一幕!谁来告诉我,A股现在有没有低估?


节前迎来揪心一幕,主要指数均创出今年最低周收盘。很自然,我们也想知道,现在处于什么状态,存在着低估机会吗?这篇文章,我们从市盈利的角度来探讨是存在机会,还是要警惕陷阱。

我们通过akshare来获取沪指导市盈率。实际上,akshare中的这个数据又来自乐咕乐股网站。

1
2
3
4
5
6
7
import akshare as ak

pe = ak.stock_market_pe_lg(symbol="上证")
pe.set_index("日期", inplace=True)
pe.index.name = "date"
pe.rename(columns={"平均市盈率": "pe", "指数": "price"}, inplace=True)
pe.tail(15)

我们将得到从1999年以来的所有数据。它的格式如下:

表1 市盈率与指数

低估的八月?

我们可以通过quantile函数,找出PE的25%, 50%和75%分位数:

1
2
3
4
5
percentiles = []
for i in range(1, 4):
    percentiles.append(pe["pe"].quantile(i/4))

percentiles

我们发现,从1999年以来,25%, 50%和75%分位数分别是 13.9, 17.4和 33.5。

那么,到上个月底(2024年8月),沪指的市盈率处于什么位置呢?

我们可以用以下方法来计算出这个位置:

1
2
3
rank = pe.rank().loc[datetime.date(2024,8,30), "pe"]
percentile = rank / len(pe)
percentile

结果显示,当前的市盈率处在10.6%分位数左右,也就是属于1999年以来较低的位置。

如果仅根据统计数据来看,显然沪指在2024年8月底,是被低估了,换句话说,这里出现了买入机会。

但是,分位数是静态的,它不能反映数据的运行趋势

趋势中的PE

如果你打开东财的客户端,找到沪指的资料页,就可以看到PE的历史走势。近十年的走势图如下:

不过这似乎也给出不了更多信息。从这个图来看,沪指目前也是在低估中。

那么,我们把历年的价格走势叠加到PE走势上,看看PE的峰谷是否真的会对应价格的峰谷。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

fig, ax1 = plt.subplots(figsize=(60,6))

color = "tab:blue"
ax1.plot(pe["price"], label="Index", color=color)
ax1.set_xlabel("Year")
ax1.set_ylabel("Index", color="tab:blue")
ax1.xaxis.set_major_locator(mdates.MonthLocator(bymonth=[2, 5, 8, 11]))
ax1.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m')) 

color = "tab:red"
ax2 = ax1.twinx()
ax2.plot(pe["pe"], label="PE", color=color)
ax2.set_ylabel("PE", color=color)

for i in range(1, 4):
    quantile = pe["pe"].quantile(i/4)
    ax2.axhline(quantile, color='gray', linestyle='--', label=f"{i/4:02.0%}")

plt.title("Index vs PE")

fig.tight_layout()
for date in pe.index[::3]:
    ax1.axvline(date, color='gray', linestyle=':', linewidth=0.5)
plt.gcf().autofmt_xdate()

plt.legend(loc="upper left")
plt.show()

我们会得到如下所示的绘图:

1999年-2024年

从图中可以看出,从1999年到2024年间,总体上存在沪指上涨,PE下降的趋势。沪指上涨应该是反应了GDP增长的长期趋势;而PE下降,则主要是由于资产供应数量的增加,导致资产泡沫不断被挤出的趋势。

为了能研究细节部分,我们将上图切割成为5个子图:

1999年1月-2004年5月

2004年6月-2009年5月

2009年6月-2014年7月

2014年6月-2019年10月

2019年8月-2024年8月

思考与结论

  • 思考: 在哪些阶段,PE走势与沪指完全一致?在这种走势中,谁是因变量,谁是自变量?它反应什么样的现象?

  • 回答:在1999年到2001年,2005年8月到2008年5月,以及2014年5月到1015年5月等时间段PE的走势与沪指完全一致。在这种走势中,由于市场炒作十分激烈,公司盈利的变化相对于股价的变化而言,完全可以忽略不计,PE的走势完全由股价决定,从而导致PE曲线与股价走势极为相似。一旦出现这种现象,就说明市场已经过度投机了。

  • 思考:大约从2023年8月起,似乎可以看出,沪指的下降速度快于PE的下降速度。比如,2024年2月,沪指出现阶段低点,PE也出现阶段低点。但2024年9月,沪指创新低之后,PE并没有创新低。这种背离反映了什么现象?能否用一个常见的术语来表述它?

  • 回答: 在2024年9月,沪指创新低之后,PE并没有创新低,出现了背离。这种情况其实从峰值分析也可以看出来。比如,2024年6月(参见表我1),PE值创2023年8月以来的新高,但沪指却低于2023年8月后任何一个高点。这种背离可以用低市盈率陷阱来描述。这个指标提醒我们,当前指数虽然在下跌,但上市公司的盈利能力也可能在下降,从而出现指数小涨,PE大涨;指数跌得多,PE跌得少的情况。

因此,如果仅从分位数统计来看,当下的A股是低估的。但如果考虑到市盈率总体上一直在下降的趋势,以及最近一年来PE与指数涨跌的背离情况,判断A股是否已经低估还存有疑问,应该纳入更多维度进行判断。

文章来源于《因子分析与机器学习策略》第2课的习题。