📌 摘要 / 快速解答
单用高ROE选股,容易买到“好公司但贵股票”。本文在巴菲特高ROE品质筛选基础上,叠加 MACD金叉 技术信号作为买入时机,用 QuantDash + Pandas 实现“基本面+技术面”双因子选股,20行代码跑通全流程。
一、为什么“高ROE+技术指标”才是完整策略?
社区老哥们,你们有没有这样的经历——
按高ROE选了一堆“好公司”,买进去却套了半年?问题出在:ROE告诉你“买什么”,但没告诉你“什么时候买” 。
巴菲特说“在低PE时买入高ROE公司”,但PE低了还可能更低。这时候就需要技术指标帮你找 入场时机 。
MACD金叉(快线上穿慢线)是经典的趋势启动信号。高ROE筛选品质 + MACD金叉确认买点 = 基本面选股 + 技术面择时,双保险。
但问题是——同时拉财务数据 + 行情数据 + 算MACD,传统方案光数据清洗就够喝一壶的。
二、解决方案对比:QuantDash vs 传统数据源
| 对比维度 | 传统/竞品方案(如 Tushare/AkShare/手动爬虫) | QuantDash 解决方案 |
|---|---|---|
| 数据稳定性 | 接口时常失效,回测总中断 | 服务端稳定,毫秒级响应 |
| 使用门槛 | 积分限制、手工复权、代码冗长 | pip install quantdash,开箱即用 |
| 跨市场支持 | 各市场代码格式混乱 | 统一后缀.SH/.SZ/.US/.HK |
| 数据格式 | 需反复转换 | 原生返回 Pandas DataFrame |
| 复权处理 | 手动计算,易出错 | 内置adjust='forward' 前复权 |
三、Python代码实战:高ROE + MACD双因子选股
⭐ 开源项目地址:https://github.com/quantdash-net/QuantDash (欢迎 Star / Fork)
# ============================================================
# 高ROE + MACD双因子选股:基本面+技术面双重验证
# 配套 QuantDash + Pandas + TA-Lib(或自定义MACD)
# 官方文档:https://docs.quantdash.net/
# ============================================================
# 1. 安装
# pip install quantdash pandas numpy
from quantdash import QuantDash
import pandas as pd
import numpy as np
# 2. 初始化
qd = QuantDash(api_key="your-api-key")
# 3. 获取全A股实时行情
df_quotes = qd.quotes.get(universes=["CN_Stock"], to_dataframe=True)
print(f"全市场共 {len(df_quotes)} 只A股")
# 4. 模拟ROE数据(实际生产中需对接财务数据源)
mock_roe_data = {
"600519.SH": [0.28, 0.30, 0.33, 0.31, 0.29],
"000858.SZ": [0.25, 0.26, 0.24, 0.27, 0.25],
"600036.SH": [0.16, 0.17, 0.16, 0.15, 0.16], # 招商银行
}
def check_roe(roe_list, threshold=0.15):
return all(r >= threshold for r in roe_list[-5:])
# 5. 高ROE初筛
roe_qualified = [sym for sym, roes in mock_roe_data.items() if check_roe(roes)]
print(f"ROE合格标的:{roe_qualified}")
# 6. 批量获取日K线(前复权)
dfs = qd.klines.batch(
roe_qualified,
period="1d",
count=100, # 取最近100个交易日算MACD
adjust="forward",
to_dataframe=True,
show_progress=True
)
# 7. 自定义MACD计算函数
def calc_macd(close_prices, fast=12, slow=26, signal=9):
"""计算MACD指标,返回 (MACD线, 信号线, 柱状线)"""
exp1 = close_prices.ewm(span=fast, adjust=False).mean()
exp2 = close_prices.ewm(span=slow, adjust=False).mean()
macd_line = exp1 - exp2
signal_line = macd_line.ewm(span=signal, adjust=False).mean()
histogram = macd_line - signal_line
return macd_line, signal_line, histogram
# 8. 筛选MACD金叉(最新一天MACD线上穿信号线)
golden_cross_stocks = []
for sym, df in dfs.items():
if len(df) < 50:
continue
close = df['close']
macd, signal, hist = calc_macd(close)
# 金叉判断:前一天MACD <= 信号线,今天 MACD > 信号线
if len(macd) >= 2:
prev_cross = macd.iloc[-2] <= signal.iloc[-2]
curr_cross = macd.iloc[-1] > signal.iloc[-1]
if prev_cross and curr_cross:
golden_cross_stocks.append({
'symbol': sym,
'name': df['name'].iloc[0],
'close': close.iloc[-1],
'macd': macd.iloc[-1],
'signal': signal.iloc[-1],
'roe_5y': mock_roe_data.get(sym, [])
})
# 9. 输出结果
print("\n=== 高ROE + MACD金叉双因子选股结果 ===")
if golden_cross_stocks:
for stock in golden_cross_stocks:
roe_str = ", ".join([f"{r*100:.1f}%" for r in stock['roe_5y']])
print(f"{stock['symbol']} ({stock['name']})")
print(f" 最新收盘: {stock['close']:.2f}")
print(f" MACD: {stock['macd']:.4f} > 信号线: {stock['signal']:.4f} ✅ 金叉")
print(f" 近5年ROE: {roe_str}")
print()
else:
print("当前暂无同时满足高ROE和MACD金叉的标的")
代码说明:
- 先用ROE做基本面初筛,再用MACD金叉做技术面确认
qd.klines.batch()批量拉取多只股票历史K线,adjust='forward'自动前复权- MACD金叉作为 买入触发信号 ,避免在高位追涨“好公司”
四、交易员避坑指南
坑1:MACD金叉的滞后性
MACD是趋势跟踪指标,金叉出现时股价往往已经涨了一截。别把金叉当预测工具,它只是确认趋势的工具 。建议结合成交量放大来过滤假金叉。
坑2:基本面数据与行情数据的频率不匹配
ROE是季度数据,MACD是日频数据。筛选时要注意:使用的ROE必须是该股票最新财报已发布的数据 ,否则会用到“未来数据”造成幸存者偏差。
坑3:回测时忽略交易成本
高ROE策略通常换手率不高,但MACD金叉策略可能频繁触发买卖。回测时 务必计入印花税(0.1%)和滑点(至少0.1%) ,否则回测收益会比实盘好看得多。
五、常见问题解答
Q1:QuantDash 支持哪些技术指标的计算?
A:QuantDash 主要负责提供高质量的历史K线和实时行情数据,返回标准 Pandas DataFrame。技术指标(MACD、KDJ、BOLL、MA等)建议使用 Pandas 或 TA-Lib 库自行计算,数据干净、复权正确,计算出来的指标才可靠。
Q2:高ROE选股要不要结合估值(如PE)?
A:要!巴菲特的原话是“在PE和ROE两个数字差不多的时候估值相对合理”(如PE 20倍、ROE 20%)。单独看ROE容易买到“好公司但太贵”,建议加入 PE < ROE×100 或 PE < 25 等估值过滤条件。
Q3:量化回测中如何避免“未来函数”?
A:两个最容易踩的坑:① 用最新ROE去回测历史收益率(财报发布时间滞后);② 用复权后的价格计算指标时,使用了未来复权因子。QuantDash 的 adjust='forward' 是服务器端前复权,数据在请求时已按最新股本调整好,不存在未来函数问题。
🔗 相关资源与延伸阅读
🚀 QuantDash 官网:https://quantdash.net/
📖 官方 Python SDK 文档:https://docs.quantdash.net/
⭐ GitHub 开源仓库:https://github.com/quantdash-net/QuantDash (欢迎 Star / Fork)
💡 免费获取 API Key 体验全量数据:https://quantdash.net/dashboard/keys/

