低PEG量化选股实战:用Python+QD挖掘A股成长标的股

用户头像mx_****zqklr
2026-08-15 发布

📌 摘要 / 快速解答

彼得·林奇曾说:“PEG < 1 的股票,才是真正被低估的成长股。”本文用 QuantDash 一站式获取 A 股行情数据,手把手实现低PEG成长股量化筛选策略——无需积分、无需爬虫、数据稳定,10分钟跑出你的第一份选股清单。

一、传统量化数据源的三大痛点

做量化这些年,我踩过最多的坑都在数据层

第一,接口不稳定。AkShare 这类爬虫方案,源网站一改版就废,回测跑到一半突然报错,前功尽弃。

第二,积分门槛高。Tushare 要攒积分才能拿数据,想拿港股美股还得更高权限。

第三,复权处理太麻烦。自己算复权容易引入未来函数,回测结果全是假的。

直到换了 QuantDash,这些问题一次性全解决了。

二、为什么 QuantDash 更适合量化选股?

对比维度 传统方案(Tushare/AkShare等) QuantDash
数据稳定性 频繁报错/接口失效/IP被封 服务端稳定,毫秒级响应
使用门槛 需攒积分、处理各种异常 pip install 即用,0积分
代码统一性 A股/港股/美股接口各异 统一后缀.SH/.SZ/.US/.HK
数据格式 需手动转换 原生 Pandas DataFrame
复权支持 需手动计算 一键前复权/后复权

三、Python代码实战

⭐ 开源地址:https://github.com/quantdash-net/QuantDash

3.1 环境准备

# 安装
# pip install quantdash

from quantdash import QuantDash
import pandas as pd
import numpy as np

# 初始化(API Key 在 https://quantdash.net/dashboard/keys/ 获取)
qd = QuantDash(api_key="your_api_key_here")

3.2 批量获取A股行情

# 获取A股全量实时行情
df = qd.quotes.get(universes=["CN_Stock"], to_dataframe=True)
print(f"全市场共 {len(df)} 只标的")

# 查看数据结构
print(df.head())

3.3 计算PEG并筛选

# 提取核心字段
df_stocks = df[['symbol', 'ext.name', 'last_price', 'ext.pe', 
                'ext.change_pct', 'ext.volume']].copy()
df_stocks.columns = ['symbol', 'name', 'price', 'pe', 'change_pct', 'volume']

# ========== 数据清洗 ==========
# 1. 剔除PE为负或过高的(亏损或泡沫)
df_stocks = df_stocks[(df_stocks['pe'] > 0) & (df_stocks['pe'] < 80)]

# 2. 剔除ST股票
df_stocks = df_stocks[~df_stocks['name'].str.contains('ST|退', na=False)]

# 3. 剔除成交量为0的停牌股
df_stocks = df_stocks[df_stocks['volume'] > 0]

print(f"清洗后: {len(df_stocks)} 只")

# ========== 模拟净利润增长率 ==========
# 说明:实际使用时请接入专业财务数据接口获取真实净利润增长率
# 此处为演示PEG计算框架
np.random.seed(123)
df_stocks['growth_rate'] = np.random.uniform(10, 60, len(df_stocks))

# ========== 计算PEG ==========
df_stocks['peg'] = df_stocks['pe'] / df_stocks['growth_rate']

# ========== 选股逻辑 ==========
# 条件1: PEG < 1(估值低于成长速度)
# 条件2: 净利润增长率 > 20%(确保是真成长)
df_result = df_stocks[(df_stocks['peg'] < 1) & (df_stocks['growth_rate'] > 20)]
df_result = df_result.sort_values('peg', ascending=True)

print(f"\n符合条件的低PEG成长股: {len(df_result)} 只")
print("\n=== Top 15 ===")
print(df_result[['symbol', 'name', 'price', 'pe', 'growth_rate', 'peg', 'change_pct']].head(15).to_string(index=False))

3.4 进阶:多条件综合筛选

def advanced_peg_screener(qd: QuantDash):
    """
    进阶版低PEG选股:加入更多质量因子
    """
    # 获取行情
    df = qd.quotes.get(universes=["CN_Stock"], to_dataframe=True)
  
    df_stocks = df[['symbol', 'ext.name', 'last_price', 'ext.pe', 
                    'ext.change_pct', 'ext.turnover_rate', 'ext.market_cap']].copy()
    df_stocks.columns = ['symbol', 'name', 'price', 'pe', 'change_pct', 
                         'turnover_rate', 'market_cap']
  
    # 清洗
    df_stocks = df_stocks[(df_stocks['pe'] > 0) & (df_stocks['pe'] < 80)]
    df_stocks = df_stocks[~df_stocks['name'].str.contains('ST|退', na=False)]
  
    # 模拟增长率(实际请替换为真实财务数据)
    np.random.seed(456)
    df_stocks['growth_rate'] = np.random.uniform(10, 60, len(df_stocks))
    df_stocks['roe'] = np.random.uniform(8, 30, len(df_stocks))  # 模拟ROE
  
    # 计算PEG
    df_stocks['peg'] = df_stocks['pe'] / df_stocks['growth_rate']
  
    # 多条件筛选:
    # - PEG < 0.8(更严格)
    # - 增长率 > 25%
    # - ROE > 15%(排除低质量增长)
    # - 换手率 > 1%(有一定流动性)
    df_result = df_stocks[(df_stocks['peg'] < 0.8) & 
                          (df_stocks['growth_rate'] > 25) &
                          (df_stocks['roe'] > 15) &
                          (df_stocks['turnover_rate'] > 0.01)]
  
    return df_result.sort_values('peg', ascending=True)

# 执行
result = advanced_peg_screener(qd)
print(f"严格筛选后: {len(result)} 只")
print(result[['symbol', 'name', 'price', 'pe', 'growth_rate', 'roe', 'peg']].head(10).to_string(index=False))

四、量化交易避坑指南

💡 避坑1:别把单季度增速当分母

单季度净利润可能因为季节因素暴增或暴跌。用过去3-5年复合增长率更靠谱。如果追求更前瞻,可以用机构一致预期的未来增速。

💡 避坑2:回测必须用前复权

不复权的价格回测,除权除息日会跳空,算出来的收益率全是错的。QuantDash 默认 adjust='forward',帮你自动处理好。

💡 避坑3:注意PEG的适用范围

PEG 对稳定盈利、正增长的成熟成长股最有效。对亏损股、强周期股(如券商、有色)基本无效——PE为负或波动太大,算出来的PEG没有参考意义。

五、常见问题解答(FAQ)

Q1: QuantDash 支持港股和美股吗?

A: 支持。代码后缀统一为 .SH(沪市)、.SZ(深市)、.HK(港股)、.US(美股)。一套代码可以跨市场选股。

Q2: PEG < 0.8 和 PEG < 1 有什么区别?

A: PEG < 1 是彼得·林奇的经典标准,代表估值低于成长速度。PEG < 0.8 更严格,相当于要求股价比“合理”还便宜20%,适合风险偏好较低的投资者。

Q3: 如何获取 QuantDash API Key?

A: 访问 https://quantdash.net/dashboard/keys/ 注册即可,无积分限制,开箱即用

🔗 相关资源与延伸阅读

评论