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 篇)。
- 报告期前视:财务数据披露滞后,回测要用"当时已披露"的报告期,不能拿未发布的财报。
六、拓展练习
下篇预告
系列第 19 篇:质量综合打分策略 —— 价值、盈利、成长都是单因子,下一篇把它们统一 z-score 合成一个综合质量分,做出可回测的多因子选股模型。
免责申明:本篇全部代码与回测结果仅作为量化编程与策略研究的学习演示,所有回测均为方法演示,不构成任何投资建议。市场有风险,投资需谨慎。
网硕互联帮助中心



![[工程] Redis 配置文件redis.conf全解析-网硕互联帮助中心](https://www.wsisp.com/helps/wp-content/uploads/2026/10/20261024234145-6add4239f064d-220x150.png)

评论前必须登录!
注册