ROE,即Rate of Return on Common Stockholders' Equity,中文名称为:净资产收益率,又称股东权益报酬率、净值报酬率、权益报酬率、权益利润率、净资产利润率,是衡量上市公司盈利能力的重要指标。ROE是指利润额与净资产的比值,公式为: 净利润/净资产。这里,净资产=总资产-负债。该指标越高,说明投资带来的收益越高;净资产利润率越低,说明企业所有者权益的获利能力越弱。
在《巴菲特致股东的信》中,巴菲特表达了一个想法,衡量一个公司是否优秀,如果只用一个财务指标,那就是净资产收益率(ROE),如果一个公司长期的ROE保持15%以上,基本上可以算作一个好公司。可想而知,ROE这个指标是个非常重要的指标。
接下来,我通过python调用baostock里季频杜邦指数的“dupontROE”数据寻找ROE较高且长期稳定的证券作为投资目标。具体代码如下:
import baostock as bs
import pandas as pd
def computeROE(code, year, quarter):
# 查询杜邦指数
dupont_list = []
rs_dupont = bs.query_dupont_data(code, year, quarter)
while (rs_dupont.error_code == '0') & rs_dupont.next():
dupont_list.append(rs_dupont.get_row_data())
result_profit = pd.DataFrame(dupont_list, columns=rs_dupont.fields)
# 打印输出
return result_profit
def compute_total_ROE():
# 登陆系统
lg = bs.login()
# 显示登陆返回信息
print('login respond error_code:' + lg.error_code)
print('login respond error_msg:' + lg.error_msg)
# 获取全部证券基本资料
rs = bs.query_stock_basic()
# rs = bs.query_stock_basic(code_name="浦发银行") # 支持模糊查询
print('query_stock_basic respond error_code:' + rs.error_code)
print('query_stock_basic respond error_msg:' + rs.error_msg)
result_profit = pd.DataFrame()
while (rs.error_code == '0') & rs.next():
# 获取一条记录,将记录合并在一起
code = rs.get_row_data()[0]
for year in range(2022, 2025):
df = computeROE(code, year, 4)
if df.empty:
continue
else:
if result_profit.empty:
result_profit = df
else:
result_profit = result_profit.append(df)
# 原始数据存储
result_profit.to_csv("D:\\dupont_data_row.csv",
encoding="gbk", index=False)
# 筛选有用数据
result = result_profit[['code', 'dupontROE']]
result = result[result['dupontROE'] != '']
result['dupontROE'] = result['dupontROE'].astype(float)
series_mean = result.groupby(by=['code'])['dupontROE'].mean()
series_std = result.groupby(by=['code'])['dupontROE'].std()
df2 = pd.DataFrame({'mean': series_mean, 'std': series_std},
columns=['mean', 'std'], index=series_mean.index)
df2 = df2.sort_values(['mean'])
df2.to_csv("D:\\dupont_data_sorted_by_roe.csv", encoding="gbk", index=True)
# 登出系统
bs.logout()
if __name__ == '__main__':
compute_total_ROE()
在文件“dupont_data_row.csv”存放所有下载的原始数据,具体见下图:

在文件“dupont_data_sorted_by_roe.csv”中存放按照ROE从小到大排序后的证券代码,ROE均值(‘mean’)和ROE的波动率(‘std’)。具体见下图:

简单地来说,我们只要在ROE在15%-25%之间的证券中选择波动率较小的部分证券作为长期投资的标的物。为何不是ROE很大的证券呢?首先,连老巴都觉得ROE为15%的公司就相当不错了,这可是人家几十年的总结。那么,我觉的ROE的标准没有问题。其次,超过25%的ROE公司,其股票价格一般不便宜,会被高估。最后,还有一部证券ROE特别大的证券,他们的财务水分到底有多少?那就只能“呵呵呵”。

