← 返回博客列表

【Python量化实战全攻略 #11】质量因子手册:ROE、毛利率、资产负债率(附代码)

2026年10月16日 08:38 · 智兔数服 · Python量化实战全攻略

摘要:【Python量化实战全攻略 #11】质量因子手册:ROE、毛利率、资产负债率(附代码) 手册定位:模块二第 3 篇。质量因子筛「赚钱能力强、负债健康」的公司——ROE、毛利率、资产负债率。和估值/成长搭配,过滤「虚

手册定位:模块二第 3 篇。质量因子筛「赚钱能力强、负债健康」的公司——ROE、毛利率、资产负债率。和估值/成长搭配,过滤「虚胖」与「高杠杆」陷阱。
数据来源复用 #04 财务三表(资产负债表 + 利润表)。

1. 你将得到什么

  • ROE、毛利率、资产负债率三个质量指标的计算公式与取数字段;
  • 把三个指标合成一个质量综合分的方法;
  • 资产负债率作为「反向因子」的处理;
  • 质量因子的 4 个坑(杠杆虚高 ROE、行业差异、金融股剔除、一次性收益)。

2. 取数约定(复用)

指标 公式 来源端点 见
ROE 净利润 / 归母净资产 利润表+资产负债表 #04
毛利率 (营收−成本) / 营收 利润表 #04
资产负债率 总负债 / 总资产 资产负债表 #04

3. 数据来源(复用,不重复罗列)

详见 #04 财务三表接口手册(/hs/fin/balance、/hs/fin/income)。

4. 核心模板函数(自包含可跑)

import pandas as pd

_MOCK = True


def build_quality(df):
    out = df.copy()
    out["ROE"] = out["净利润"] / out["归母净资产"].replace(0, pd.NA)
    out["毛利率"] = (out["营业收入"] - out["营业成本"]) / out["营业收入"].replace(0, pd.NA)
    out["资产负债率"] = out["总负债"] / out["总资产"].replace(0, pd.NA)
    return out


def quality_score(df):
    s = df.copy()
    s["ROE_s"] = s["ROE"].rank(pct=True)
    s["毛利_s"] = s["毛利率"].rank(pct=True)
    s["杠杆_s"] = s["资产负债率"].rank(pct=True, ascending=False)
    s["质量分"] = s[["ROE_s", "毛利_s", "杠杆_s"]].mean(axis=1)
    return s


def run_check():
    df = pd.DataFrame([
        {"代码": "600519", "净利润": 7.5e10, "归母净资产": 7.5e11, "营业收入": 1.5e11,
         "营业成本": 9.0e10, "总负债": 4.0e10, "总资产": 1.2e11},
        {"代码": "000001", "净利润": 3.0e10, "归母净资产": 4.0e11, "营业收入": 1.3e11,
         "营业成本": 8.2e10, "总负债": 3.8e10, "总资产": 1.1e11},
        {"代码": "600036", "净利润": 1.4e11, "归母净资产": 9.0e11, "营业收入": 3.0e11,
         "营业成本": 1.0e11, "总负债": 9.0e10, "总资产": 2.0e11},
    ])
    q = quality_score(build_quality(df))
    assert (q["ROE"] > 0).all() and q["毛利率"].between(0, 1).all() and q["资产负债率"].between(0, 1).all()
    assert q["质量分"].between(0, 1).all()
    print("校验通过 | ROE:", q["ROE"].round(3).tolist(), "质量分:", q["质量分"].round(2).tolist())
    return q


if __name__ == "__main__":
    run_check()

5. 跑通示例

q = run_check()
print(q.sort_values("质量分", ascending=False)[["代码", "ROE", "毛利率", "资产负债率", "质量分"]])

6. 坑与注意事项

  1. 杠杆虚高 ROE:高负债能抬高 ROE,质量因子要把资产负债率反向加权。
  2. 行业差异:银行/地产天然高杠杆,质量分要做行业中性再排名。
  3. 金融股剔除:金融业资产负债表结构特殊,通常整体剔除。
  4. 一次性收益:处置资产带来的净利润会抬高 ROE,优先用扣非口径。

7. 小结与下一篇预告

质量因子就位,与估值、成长组成「便宜+成长+质量」三因子雏形。下一篇讲资金流因子——主力净流入与北向,引入资金面维度。

下一篇预告:《【Python量化实战全攻略 #12】资金流因子手册:主力、北向因子构建(附代码)》

8. 免责声明

本文为因子构建方法示例,演示数据为虚构,不构成投资建议。


关于数据来源:本文因子所需的财务数据来自智兔数服(www.zhituapi.com)官方文档接口(详见本系列 #04),覆盖 200+ 已验证路径,注册可领免费 token 做研究测试。
更多实战手册见技术博客:zhituapi.com/blog.html。
本系列《Python量化实战全攻略》共 32 篇,下一篇讲资金流因子。

想亲自试一下?免费获取证书