A股量化数据工程:从 REST 接口到策略信号(第 8 篇):成长能力因子:营收与利润增速

A股量化数据工程:从 REST 接口到策略信号(第 8 篇):成长能力因子:营收与利润增速

前言

盈利能力看「现在多能赚」,成长能力看「将来能不能更赚」。营收增速、净利增速、净资产增速是景气度的三盏灯。接口 hicw/cz 给出这些同比/环比增速,本篇落库并自研成长因子,与前一篇盈利因子互补。

一、接口原始字段梳理

1)成长能力接口

接口地址:https://api.biyingapi.com/hicw/cz/{LICENCE}

字段 说明
dm 股票代码
mc 股票名称
zyzzl 主营业务收入增长率
jlrzzl 净利润增长率
jzczzl 净资产增长率
zzczzl 总资产增长率
mgzzl 每股增长
gdzzl 股东增长
y 年
q 季
yq 年季标识

二、自研衍生统计指标

  1. 成长综合分 :z(zyzzl) + z(jlrzzl) + z(jzczzl) 等权合成。
  2. 质量过滤 :jlrzzl 远高于 zyzzl 可能是非经常性收益,标记「利润增速异常高」供人工排查。
  3. 可持续性 :jzczzl(净资产增速)为正且平稳,说明增长靠内生而非举债。

增速字段均为接口原始同比值,z-score 与合成规则为自研。

三、数据表设计

sql 复制代码
CREATE TABLE IF NOT EXISTS fin_cz (
    dm    TEXT,
    yq    TEXT,
    zyzzl REAL, jlrzzl REAL, jzczzl REAL,
    zzczzl REAL, mgzzl REAL, gdzzl REAL,
    PRIMARY KEY (dm, yq)
);

CREATE TABLE IF NOT EXISTS factor_growth (
    dm    TEXT,
    yq    TEXT,
    score REAL,
    profit_alert INTEGER,
    PRIMARY KEY (dm, yq)
);

四、完整代码

python 复制代码
import requests
import sqlite3
import time

LICENCE = "YOUR_LICENCE"
BASE = "https://api.biyingapi.com"
DB_PATH = "quant.db"

def biying_api_get_retry(url, timeout=15, max_retry=3):
    for i in range(max_retry):
        try:
            r = requests.get(url, timeout=timeout)
            r.raise_for_status()
            return r.json()
        except Exception as e:
            if i == max_retry - 1:
                raise
            time.sleep(1 + i)

def fetch_cz():
    data = biying_api_get_retry(f"{BASE}/hicw/cz/{LICENCE}")
    return data.get("data", []) if isinstance(data, dict) else []

def zscore(vals):
    xs = [v for v in vals if v is not None]
    if len(xs) < 2:
        return {}
    mu = sum(xs) / len(xs)
    var = sum((x - mu) ** 2 for x in xs) / len(xs)
    sd = var ** 0.5 or 1
    return {v: round((v - mu) / sd, 3) for v in xs}

def build_factor(rows):
    valid = [r for r in rows if None not in
             (r.get("zyzzl"), r.get("jlrzzl"), r.get("jzczzl"))]
    zy = zscore([r["zyzzl"] for r in valid])
    jl = zscore([r["jlrzzl"] for r in valid])
    jz = zscore([r["jzczzl"] for r in valid])
    out = []
    for r in valid:
        score = round(zy.get(r["zyzzl"], 0) + jl.get(r["jlrzzl"], 0)
                      + jz.get(r["jzczzl"], 0), 3)
        # 利润增速远超营收增速 -> 标记排查
        alert = 1 if (r["jlrzzl"] - r["zyzzl"]) > 50 else 0
        out.append((r["dm"], r["yq"], score, alert))
    return out

if __name__ == "__main__":
    rows = fetch_cz()
    con = sqlite3.connect(DB_PATH)
    con.executemany(
        "INSERT OR REPLACE INTO fin_cz"
        "(dm,yq,zyzzl,jlrzzl,jzczzl,zzczzl,mgzzl,gdzzl) VALUES(?,?,?,?,?,?,?,?)",
        [[r.get("dm"), r.get("yq"), r.get("zyzzl"), r.get("jlrzzl"),
          r.get("jzczzl"), r.get("zzczzl"), r.get("mgzzl"), r.get("gdzzl")]
         for r in rows])
    con.commit()
    fac = build_factor(rows)
    con.executemany(
        "INSERT OR REPLACE INTO factor_growth(dm,yq,score,profit_alert) VALUES(?,?,?,?)",
        fac)
    con.commit(); con.close()
    top = sorted(fac, key=lambda x: x[2], reverse=True)[:5]
    print("成长因子 Top5:")
    for dm, yq, s, alert in top:
        print(f"  {dm} 综合分={s} {'[利润增速异常高]' if alert else ''}")

五、关键业务说明

  • 增速是同比口径 :hicw/cz 返回的增速为同比/环比值,比较时保证同 yq 窗口。
  • 利润增速需甄别:净利增速远高于营收增速常来自非主营收益,因子合成时标记但不剔除。
  • 与盈利因子互补:高盈利 + 高成长 = 优质;高盈利 + 低成长 = 成熟现金牛。

六、拓展练习

  1. 把成长因子与第 7 篇盈利因子做「盈利×成长」九宫格分类。
  2. 对 profit_alert=1 的公司逐一看 hicw/lr 利润细分,定位非经常性收益来源。
  3. 用 jzczzl 连续两季为正,筛选「内生增长」标的池(仅统计演示)。

下篇预告

A股量化数据工程:从 REST 接口到策略信号(第 9 篇):偿债与运营能力因子

下一篇用 hicw/cznl 与 hicw/yy 拉取偿债、运营指标,自研安全因子与周转因子,补齐财务三张表的解读。
免责申明 :本篇全部代码、接口调用仅作为量化编程学习演示,仅为数据演示,不构成投资建议。市场有风险,投资需谨慎。

相关推荐
Wang's Blog18 小时前
Java 项目实战: 交友项目 - 圈子互动
java·开发语言·交友
Rain的Java大神之路18 小时前
北漂 13 年,我把 Java 家底钉成了这张知识图谱(全站免费)
java·后端·程序员
小嘉丶学长18 小时前
Day06 · 数据类型与类型检测
开发语言·python·学习·1024程序员节
wuminyu18 小时前
JVM规范学习总结-Class文件结构
java·linux·c语言·jvm·c++
七夜zippoe19 小时前
Spring AI + Ollama 本地模型:数据不出内网的合规方案(落地全流程)
java·人工智能·spring·ai·ollama
Wang's Blog19 小时前
Java 项目实战: 交友项目 - 查询单条动态:动态详情页的接口与实现
java·开发语言·交友
yuniko-n19 小时前
【JUC】CAS
java·开发语言
captain37619 小时前
Spring Web MVC(2)
java·前端·spring boot·后端·spring·mvc
代码山河19 小时前
调试技巧:IDEA Debug模式入门与使用
java·学习·架构·教程·面向对象·项目
计算机毕业编程指导师19 小时前
基于深度学习的电子垃圾与混合材料图像分类系统实战:ResNet-50迁移学习+Django部署+三种识别入口完整方案
python·深度学习·毕业设计·resnet·课程设计·图像分类·电子垃圾