云计算百科
云计算领域专业知识百科平台

A股量化策略回测实战:从行情数据到绩效评估(第 18 篇):成长策略

A股量化策略回测实战:从行情数据到绩效评估(第 18 篇):成长策略

前言

盈利质量看"现在赚不赚",成长看"将来赚得多不多"。高成长公司往往享受估值溢价,成长因子是动量/趋势之外另一大收益来源。本篇用 hicw 真实的成长能力数据(营收增速、利润增速),做高成长选股,并讨论成长的可持续性与"增速陷阱"。

一、接口原始字段梳理

1)hicw/cz 成长能力

字段来自官网说明(零编造),共 11 个,关键是:

字段含义
dm, mc 代码、名称
zyzzl 营业收入增长率
jlrzzl 净利润增长率
jzczzl 净资产增长率
zzczzl 总资产增长率
y, q, yq 年、季、年月标识

路径:{BASE}/hicw/cz/{licence}(可按 y/q 取报告期)。本篇用 zyzzl(营收增速)、jlrzzl(净利增速)做成长分。

二、自研衍生统计指标

  • 营收增速排名 rank(zyzzl):业务扩张能力。
  • 净利增速排名 rank(jlrzzl):盈利扩张能力。
  • 成长综合 growth = z(营收增速) + z(净利增速)(z-score 合成)。
  • 质量过滤:净利增速高但营收不增(靠非经常性收益),质量差;两者同高才优。
  • 剔除负增长/异常值:增速极端(如 >500%)可能是低基数反弹,需配合绝对值。

三、数据表设计

CREATE TABLE IF NOT EXISTS growth_factor (
yq TEXT NOT NULL,
dm TEXT NOT NULL,
zyzzl REAL, jlrzzl REAL,
growth REAL,
PRIMARY KEY (yq, dm)
);

四、完整代码

4.1 成长打分(z-score)

import sqlite3, json, time, math

BASE = "https://api.biyingapi.com"
LICENCE = "YOUR_LICENCE_HERE"
DB_PATH = "backtest.db"

def biying_api_get_retry(url, timeout=15, max_retry=3):
import urllib.request
last = None
for i in range(max_retry):
try:
req = urllib.request.Request(url, headers={'User-Agent': 'Mozilla/5.0'})
with urllib.request.urlopen(req, timeout=timeout) as r:
return json.loads(r.read().decode('utf-8', 'ignore'))
except Exception as e:
last = e
if i < max_retry – 1:
time.sleep(1 + i)
raise last

def fetch_cz(y=None, q=None):
url = f"{BASE}/hicw/cz/{LICENCE}"
if y:
url += f"?y={y}" + (f"&q={q}" if q else "")
data = biying_api_get_retry(url)
return data if isinstance(data, list) else data.get('data', [])

def _zscore(vals):
n = len(vals)
if n < 2:
return [0.0] * n
m = sum(vals) / n
var = sum((x – m) ** 2 for x in vals) / (n – 1)
sd = math.sqrt(var) if var > 0 else 1.0
return [(x – m) / sd for x in vals]

def growth_score(rows):
"""营收+净利增速 z-score 求和(纯计算)。"""
rev = [float(r['zyzzl']) for r in rows if r.get('zyzzl') is not None]
pro = [float(r['jlrzzl']) for r in rows if r.get('jlrzzl') is not None]
zr, zp = _zscore(rev), _zscore(pro)
out = {}
idx = 0
for r in rows:
if r.get('zyzzl') is not None and r.get('jlrzzl') is not None:
out[r['dm']] = zr[idx] + zp[idx]
idx += 1
return out

def demo_growth():
rows = [
{'dm': 'A', 'zyzzl': 30.0, 'jlrzzl': 40.0},
{'dm': 'B', 'zyzzl': 5.0, 'jlrzzl': 8.0},
{'dm': 'C', 'zyzzl': 50.0, 'jlrzzl': 60.0},
]
print("成长分:", growth_score(rows))

if __name__ == '__main__':
demo_growth()

五、关键业务说明

  • 营收与净利要同看:净利高增但营收停滞,可能是卖资产/理财等非经常性收益,不可持续;营收净利双增才健康。
  • 增速陷阱:超高增速(>100%)常因前一年基数低(如疫情后复苏),并非真成长;应看"绝对值+持续性"。
  • 成长需与估值平衡:高成长股往往贵(高 PE),纯成长策略易买在顶部;与价值结合(GARP)更稳(第 19 篇)。
  • 报告期前视:财务数据披露滞后,回测要用"当时已披露"的报告期,不能拿未发布的财报。

六、拓展练习

  • 把成长分与第 16 篇价值分合成 GARP 分数(成长/PE 或 PEG 思路)。
  • 用多期增速算"稳定性",剔除一次性高增长。
  • 接第 25 篇组合,做季度调仓的高成长组合。
  • 把成长分作为第 10 篇投票器的"基本面票",平衡技术噪音。
  • 下篇预告

    系列第 19 篇:质量综合打分策略 —— 价值、盈利、成长都是单因子,下一篇把它们统一 z-score 合成一个综合质量分,做出可回测的多因子选股模型。

    免责申明:本篇全部代码与回测结果仅作为量化编程与策略研究的学习演示,所有回测均为方法演示,不构成任何投资建议。市场有风险,投资需谨慎。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » A股量化策略回测实战:从行情数据到绩效评估(第 18 篇):成长策略
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!