全部
文章&策略
学习干货
问答
官方
用户头像火花要掉了
2026-08-15 发布
科创和纳指之间轮动制定的一个策略 ai生成仅供参考哈!!
浏览16
评论0
收藏0

新手怎么办内含策略代码

用户头像sh_**1008hj
2026-08-15 发布
为什么我用金叉死叉做交易策略,但是每次回测的策略收益为零、
浏览19
评论1
收藏0
策略回测收益图
用户头像Jacktick
2026-02-12 发布
从白嫖破产到实盘基建,一文讲透Tushare、AKShare、yfinance、Polygon、TickDB的真实能力边界 信息最后核实:2026年2月11日 开篇:2026年,数据源不再是“免费午餐” 两年前,圈子里流行一句话:“数据源?requests.get一把梭,yfinance天下第一。”2025年9月28日,这句话成了历史。 雅虎财经改了Cookie校验,全球依赖yfinance的量化脚本像多米诺骨牌一样接连倒下。有人连夜改代码,有人直接停策略。更魔幻的是,群里一位老哥用多线程爬虫补数据,结果被运营商判定为“网络攻击”,宽带IP封禁,最后去营业厅签字画押才解封。 这不是段子,这是2026年量化开发者的新常态。 免费数据源的退潮速度,比所有人预想的都快。 而合规、稳定、低延迟的数据服务,正在从“可选项”变成“必选项”。但问题来了:市面上数据服务五花八门,有的贵得离谱,有的便宜但藏着坑,到底怎么选? 这篇文章,我会用一套统一的评估框架——数据质量、获取成本、网络延迟、支付门槛、适用场景——把目前最主流的五家数据源拆开揉碎,摊在桌面上给你看。 不吹不黑,只讲事实。读完你不需要再刷任何选型贴,因为这一篇,够了。 一、Tushare Pro:A股基本面研究的“数据工业标准” 核心优势:它卖的不是数据,是“干净数据” 如果你只做A股日线,Tushare Pro可能不是最便宜的,但它一定是最省心的。 做基本面量化的人都有体会:原始财报数据是“毛坯房”。除权除息、财报发布日期对齐、停牌标记、新股前五天——每个环节都有坑。自己洗数据,轻则回测偏差,重则策略逻辑直接错误。 Tushare Pro最值钱的地方,就是帮你把毛坯房装成了精装房。 拿到的DataFrame,字段名规范、复权状态清晰、日期对齐,直接喂回测引擎,一句if-else都不用写。这个“标准化”的价值,远比数据本身昂贵。 积分体系:5000分不是终点,而是起点 关于积分,网上很多信息已经过时。2026年的真实情况是: 充值比例:1元=10积分,5000分需要充值500元(历史惯例,无最新变更)。 5000分能干什么:A股常规日线接口几乎无频次限制,全市场回测、大规模因子挖掘无压力。 5000分不能干什么: 港美股数据:不在积分体系内,需独立申请,个人用户门槛极高,真正意义的实时行情未开放。 分钟级K线:不在积分体系内,需单独付费订阅。A股分钟数据约1000元/月,且独立频控(约500次/分钟)。 结论: 积分是A股日线的“通行证”,但不是高精度数据的“万能钥匙”。 频控与封禁:老用户的血泪教训 用户类型 常规接口频控 超频后果 低积分用户 50-200次/分钟(接口差异大) 请求失败,程序报错 5000+积分 基本无限制 —— 分钟数据接口 独立频控(约500次/分钟) 付费也需遵守 恶意超频 —— Token永久封禁 血泪建议: 代码里加sleep(0.2)不是技术差,是成熟。 历史数据拉一次存本地,是量化开发者的第一课。 别开50个线程扫Tushare——你的Token比你想象的更脆弱。 适用人群 ✅ A股基本面研究者——财报数据清洗质量行业标杆。 ✅ 日线策略开发者——500元买断调用自由,回测体验极佳。 ✅ 长周期回测团队——数据稳定,接口成熟,文档齐全。 ❌ 美股实盘交易者——数据精度和权限都不够。 ❌ 高频/日内策略开发者——分钟数据成本高,且有频控。 ❌ 跨市场全能选手——港美股只是配角,别当主力。 我的结论: Tushare Pro依然是A股基本面研究的最优解,没有之一。但它的商业化步伐正在加速,你只需要为“日线自由”付费,别幻想积分能解锁一切。 二、AKShare:另类数据的“诺亚方舟” AKShare是我见过最“拼命”的开源项目——它把几百个网站的数据扒下来、洗干净、统一格式,还完全免费。但这把双刃剑的另一面是:你永远不知道它哪天会断。 核心优势:付费数据源不覆盖的地方,是它的主场 做多因子策略,阿尔法往往藏在非传统数据里。AKShare的另类数据覆盖,在行业内是独一档的存在: 宏观:CPI、PPI、货币供应量 产业:能繁母猪存栏、玻璃库存、光伏装机量 特色:恐慌指数、居民信心、物流景气度 电商/舆情:淘宝销量、微博热度(部分接口) 这些数据你去问任何一家付费数据商,要么没有,要么贵到劝退。AKShare把门槛直接打到了零。 但它不是,也永远不会成为“实盘接口” 很多人犯的第一个错误,就是试图把AKShare当成实时行情源。 延迟不可控:爬虫是“拉取”不是“推送”,延迟在秒级到分钟级波动。 随时会断:数据源改个CSS类名,接口就崩。2026年反爬只会更严,不会放松。 并发即封:开10个线程扫东方财富,半小时后你的IP就在小黑屋了。 正确用法: 盘后批量拉历史数据,做回测。 每天定时取一次宏观指标,更新因子库。 找付费数据源不覆盖的“野路子”数据。 绝对禁止在交易时段调用。 2026年安装避坑:Node.js已成必选项 如果你遇到这个报错,别慌: execjs._exceptions.RuntimeUnavailableError: Could not find a JavaScript runtime. 这是AKShare部分接口的正常诉求,不是bug。 数据源用JS反爬,你就得装JS环境。 # 推荐安装流程 python -m venv akshare_env source akshare_env/bin/activate pip install -i https://pypi.tuna.tsinghua.edu.cn/simple akshare # 下载Node.js LTS版并安装,然后 pip install PyExecJS 建议: 即使你现在用不到JS接口,也建议提前装好Node.js——等你需要的时候现装,大概率是半夜。 并发与IP封禁:2026年生存指南 社区没有任何人能给你一个“安全线程数”,因为每家数据源的风控阈值都是黑盒。 但以下策略,已被验证有效: 策略 具体操作 效果 强制间隔 单次请求后sleep(3)以上,用random.uniform(3,6) 降低被识别为爬虫的概率 分块暂停 每拉10只股票,停20秒 分散请求压力 本地缓存 历史数据拉一次存Parquet 从根本上减少请求量 代理池 商业代理分摊请求IP 规避单IP封禁 2026年新趋势: 多家数据源已引入设备指纹+行为分析——光换IP已经不够,还要控制请求节奏的“拟人度”。核心就一句话:慢,才是快。 适用人群 ✅ 量化策略研究者——另类数据独此一家,别无分号。 ✅ 宏观对冲玩家——免费获取产业/宏观数据。 ✅ 学生/个人开发者——学习量化、验证想法的最佳伙伴。 ❌ 任何实盘交易者——包括低频策略。 ❌ 高频策略开发者——延迟和断供风险不可接受。 ❌ 企业生产环境——除非你为每个接口做冗余。 我的结论: AKShare是开源社区对量化圈最慷慨的馈赠,但它是一艘诺亚方舟,不是航空母舰——只救急,不救市。请在使用前默念三遍:请求间隔3秒以上,不实盘,不抱怨。 三、Yahoo Finance (yfinance):一个时代的谢幕 把yfinance放进选型清单,唯一的作用是立墓碑。 那个著名的“9·25事件”,其实是个伪命题 很多人以为2025年9月25日Yahoo搞了个“Cookie大改版”,导致yfinance彻底废了。 真相是:根本没有这么个特定事件。 GitHub上搜不到任何官方确认的“9·25变更”记录。你遇到的所有崩溃,只是Yahoo Finance十年来无数次静默改版中的一次。今天改登录态,明天改API字段,后天加反爬JS——yfinance的维护者永远在追,永远追不上。 国内直连:已成历史 雅虎2021年就退出了中国大陆。现在从国内宽带直连finance.yahoo.com,结果大概率是连接超时、DNS污染、无响应。这不是网络波动,是政策性阻断。 有人会说:“我用VPN能连啊。” 是的,能连。但VPN会断、会慢、会丢包、会被封。把策略的命脉交给VPN,等于把房子盖在流沙上。 社区共识:2026年,它只配待在“教育”文件夹 现在去Reddit量化板块问yfinance,最高赞回复永远是:“For educational use only.” 这句话翻译过来就是:写作业可以,动真钱不行。 “修复”方法:唯一且无奈 pip install --upgrade yfinance 然后祈祷。 祈祷Yahoo这周别改版,祈祷社区能在你策略死机前发出补丁。 这不是技术方案,是玄学。 2026年替代方案:免费API生态已成熟 服务 免费额度 核心优势 适合场景 Finnhub 60次/秒,实时报价 综合实力最强,免费额度慷慨 个人实盘、严肃项目 Alpha Vantage 5次/分,日500次 上手极快,文档友好 学生、初学者 Polygon.io 免费日线 数据质量天花板 准备付费的专业用户 FMP 每日限额 基本面数据极深 价值投资 EODHD 免费日线 历史数据超长 长周期回测 TickDB 新用户30天全免费 跨市场统一接入,国内优化 全球宏观、跨市场实盘 我的建议: 如果你需要免费、稳定、带实时报价的通用数据源,Finnhub是首选。 如果你需要同时监控A股、美股、外汇、加密货币,TickDB的30天免费体验是目前零成本的试错机会。 2026年了,别再和yfinance互相折磨。 四、Polygon.io:哈苏相机,但你需要先学会冲洗胶卷 Polygon.io是美股数据源的“天花板”,这一点没有争议。 但天花板的意思是:你站在地上仰望它,还是爬到顶楼触摸它,中间的梯子要自己搭。 核心优势:无可挑剔的数据工业标准 源头延迟<10ms:直接接交易所光纤,内部处理亚毫秒级。 数据完整度:美股全品种、全历史Tick数据、期权链、财报日历、拆分分红——你要的它都有。 API设计:REST响应极快,WebSocket推送稳定,文档是金融数据领域的教科书。 如果你做美股中高频、对数据精度有信仰,Polygon是你绕不开的名字。 支付:2026年,Stripe依然是那堵墙 Polygon的支付只有Stripe。而Stripe对中国信用卡的风控,七年了,一点没松。 我2026年1月刚试过:招商Visa全币种,绑到第三步弹窗:Your card was declined。换中行、换工行,一样的结果。 结论极其明确:除非你有海外信用卡或虚拟卡,否则Polygon的付费门槛是物理存在的。 网络:直连是奢望,中转是标配 Polygon的服务器全在美国。它没有任何国内节点,连香港节点都没有。 从北京电信直连WebSocket,RTT稳定在250ms以上,晚高峰能飙到400ms+。你看到的“实时”价格,其实是0.4秒前的价格。高频?不存在的。 国内用户唯一可行路径: 香港租一台轻量VPS(阿里云香港、腾讯云香港、AWS Tokyo等) 中转机上跑Polygon客户端 本地程序通过内网隧道取数据 代价:每月多花5-10美元VPS费 + 一晚上的配置时间。 收益:延迟压到80-120ms。 价格:免费的只是样片,实盘得买哈苏机身 套餐 价格 核心能力 定位 Basic $0 5次/分钟 连通性测试 Starter $29/月 无频控,延迟数据 回测、盘后分析 Developer $79/月 更长历史数据 深度回测 Advanced $199/月 WebSocket实时流 实盘起步门槛 实盘 = $199/月 ≈ 1.7万/年。 加上香港VPS,轻松破2万。 不是贵,是贵且折腾。 替代路径:不一定要自己造梯子 国内云厂商行情:阿里云云行情上海节点延迟约98ms,支付宝支付,中文文档——2026年最省心的美股实盘方案(数据覆盖需自行验证)。 中转代理平台:第三方代采Polygon数据,经香港节点分发,用户只需付服务费,支付和网络一次性解决。 我的建议: 新手/不想折腾:国内云行情,省心第一。 Polygon铁粉:接受“Polygon+香港中转+海外卡”的组合技。 延迟要求不高:Finnhub免费套餐够用。 工具是为人服务的,别被工具绑架。 五、TickDB:为“数据割裂”而生的新物种 2025年底,社群一张截图让我记住了这个名字:同一个WebSocket连接里,A股、美股、外汇、加密货币同时跳动,数据格式完全一致。 评论区炸了:“这是哪家的聚合层?” 答:TickDB。 它解决的,正是量化开发者最隐形、最折磨人的痛点——数据割裂。 核心优势:一套API,打通全球市场 如果你维护过A股QMT、美股Polygon、币圈CCXT三套系统,你一定懂这种痛苦: 三套认证逻辑 三套数据格式 三套错误码 三套重连机制 TickDB把这一切抽象成了一层。 # 一次订阅,覆盖四大市场 { "cmd": "subscribe", "data": { "channel": "ticker", "symbols": ["600519.SH", "AAPL.US", "EURUSD", "BTCUSDT"] } } 返回的是统一结构的JSON,无需针对不同市场写解析适配器。 对于跨市场配置、全球宏观策略的开发者来说,这等于省掉一个全职运维的人力成本。 多市场Symbol标准化:没有历史包袱 TickDB的符号命名规则,直接面向现代开发者习惯: 市场 格式 示例 A股 {code}.SH / {code}.SZ 600519.SH, 000001.SZ 美股 {symbol}.US AAPL.US, TSLA.US 港股 {code}.HK 0700.HK, 9988.HK 外汇 {base}{quote} EURUSD, USDJPY 贵金属 X{metal}USD XAUUSD, XAGUSD 加密货币 {base}{quote} BTCUSDT, ETHUSDT 没有历史遗留命名混乱,所见即所得。 生产级代码:文档直接给“能跑”的示例 很多API文档只给一个“Hello World”,真上线才发现缺心跳、缺重连、缺错误处理。TickDB的文档里直接给了带保活的生产级示例: import websocket import json import time API_KEY = "YOUR_KEY" SYMBOLS = ["600519.SH", "AAPL.US", "EURUSD", "BTCUSDT"] def on_open(ws): ws.send(json.dumps({ "cmd": "subscribe", "data": {"channel": "ticker", "symbols": SYMBOLS} })) def on_message(ws, msg): data = json.loads(msg) if data.get('cmd') == 'ticker': tick = data['data'] print(f"{tick['symbol']}: {tick['price']}") def run(): while True: ws = websocket.WebSocketApp( "wss://api.tickdb.ai/v1/realtime", header={"X-API-Key": API_KEY}, on_open=on_open, on_message=on_message ) ws.run_forever(ping_interval=30, ping_timeout=10) print("连接断开,3秒后重连...") time.sleep(3) if __name__ == "__main__": run() 这个示例是真正生产级别的——心跳、重连、错误容错都考虑到了,复制即用。 国内网络优化+零门槛试用 作为后来者,TickDB在产品设计上明显瞄准了中国开发者的痛点: 接入节点优化:国内多地实测延迟显著优于直连海外。 支付零门槛:支持微信/支付宝。 文档中文:社群响应及时。 最狠的是:2026年春节期间,他们搞了个“早鸟大礼包”——新用户注册送30天全品类实时行情权限,低延迟节点优先接入。 这意味着什么? 你不用花一分钱,就能完整验证它的数据质量、延迟、稳定性。 你可以用一个月时间跑一遍策略,再决定是否付费。 不用像Polygon那样,先交$199才能看到实时数据长什么样。 对于尚未稳定盈利的个人开发者,这种“先试后买”是实打实的善意。 客观短板:新秀的必经之路 历史数据深度:回溯长度暂时不及老牌厂商,需要长周期Tick回测的用户需搭配其他服务。 社区生态:用户基数尚小,遇到问题可能无法“一搜即达”。 但这些短板是否致命,取决于你是谁: 你要实时行情+近期历史数据 → 完全够用。 你要回溯20年美股Tick做高频回测 → 它暂时不是你的菜。 适用人群 ✅ 跨市场策略开发者——一套代码跑全球,体验极佳。 ✅ 个人实盘交易者——支付友好、网络优化、免费试用,试错成本几乎为零。 ✅ 从零搭建交易系统的新手——不想一上来就陷入多源拼接的泥潭。 ❌ 超长历史Tick回测研究者——建议搭配专业历史数据服务。 ❌ 对数据聚合层有天然疑虑的用户——官方已公开数据来源,接受度因人而异。 我的结论: TickDB没有试图成为下一个Polygon或Tushare。它只解决一个问题——“数据割裂”,并且在这个问题上做到了极致的简洁。 如果你恰好被这个问题困扰,它可能是2026年性价比最高的选择。 六、选型决策树:看完还不会选的,来评论区找我 五家数据源核心能力速查 数据源 不可替代性 最佳场景 最大障碍 Tushare Pro A股基本面数据标准化 日线回测、因子挖掘 分钟/港美股需额外付费 AKShare 另类数据全覆盖 宏观产业研究、因子挖掘 稳定性、并发风险 yfinance —— 教学、个人记账 2026年已不适合实盘 Polygon.io 美股数据质量天花板 中高频、专业实盘 支付+网络+高成本 TickDB 跨市场统一接入 全球宏观、个人实盘 历史数据深度、社区生态 决策树:3步找到你的答案 第一步:你要实盘吗? ❌ 不实盘 → 第二步(研究/回测) ✅ 实盘 → 第三步(实盘交易) 第二步:研究/回测场景 A股基本面/日线策略 → Tushare Pro 另类数据、宏观指标 → AKShare 超长历史美股日线 → EODHD / 商业历史数据 课程作业、快速原型 → Finnhub / Alpha Vantage(yfinance替代) 第三步:实盘交易场景 只做A股 → 券商官方API + Tushare Pro辅助 只做美股(极致性能) → Polygon.io + 香港中转(需海外支付) 只做美股(性价比) → 国内云行情 / Finnhub 跨市场(A股+美股+外汇+币) → TickDB(一套代码全搞定) 我的个人实盘组合(供参考) 场景 数据源 成本 A股日线回测 Tushare Pro 500元(一次性) 另类数据挖掘 AKShare 免费(3秒间隔) 实盘实时行情 TickDB 50-100元/月 历史Tick数据 商业数据 按需采购 总月成本:约100元。 换来的是:不用维护三套代码、不用半夜起来重连、不用跪求海外朋友代付。 这笔账,我觉得很值。 写在最后:数据基建的“认知税” 2018年我刚入行,前辈说:“数据源是最不值钱的部分,网上一堆免费的。” 我信了。然后我花了6年时间,验证了这句话是最大的谎言。 免费数据源的真实成本,不在账单上,而在: 你花三天三夜调试爬虫的那个周末 策略因数据断供而空转的那个交易日下午 回测曲线漂亮、实盘却莫名亏损的那个深夜 所有命运赠送的免费数据,早已在实盘账户里标好了价格。 2026年,这个价格标签越来越清晰: Tushare Pro的500元,是A股数据标准化的税。 AKShare的3秒间隔,是对开源社区保持善意的税。 Polygon的$199+中转费,是美股数据质量信仰的税。 TickDB的统一接口费,是“不想再为数据割裂加班”的税。 没有哪笔税是冤枉的,前提是你知道自己在为什么买单。 如果你读到这里,说明你已经准备好认真对待数据基建这件事了。 那么,最后一个问题留给你自己: 2026年,你选择为哪笔税付费? 📅 信息核实说明 本文所有技术描述、定价信息、社区反馈,均基于截至2026年2月11日的公开资料及可追溯的用户社区讨论。部分数据(Tushare分钟数据价格、Polygon实时延迟)来源于历史信息或基于公开架构的理论推算,非官方最新承诺,实际以各服务商官网为准。本文力求客观,不代表任何数据源厂商立场,亦不构成投资建议。 最后更新:2026-02-11 如果你对TickDB的“跨市场统一接入”能力感兴趣,或想亲自验证它在你自己网络环境下的延迟表现—— 目前官方仍开放“春节早鸟”免费体验名额,注册即送30天全品类实时行情权限及优先接入节点。 👉 https://tickdb.ai 本文开放转载,无需申请,保留出处即可。
浏览10369
评论6
收藏3
用户头像sh_***416jmt75L
2026-08-15 发布
📌 摘要 / 快速解答 单用高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/
浏览30
评论0
收藏0
用户头像mx_****zqklr
2026-08-15 发布
📌 摘要 / 快速解答 高ROE(净资产收益率)是巴菲特最看重的选股指标,核心逻辑是“连续多年ROE≥15%~20%且稳定”的公司,往往具备持续竞争优势。本文用 QuantDash + Pandas 在 20 行代码内批量获取 A 股全市场财务数据与行情,自动筛选高 ROE 品质公司,彻底告别 Tushare 攒积分、AkShare 接口崩溃的烦恼。 一、为什么传统方式写高ROE选股策略这么累? 社区老哥们,你们有没有遇到过这种情况—— 想写一个高ROE选股策略,翻遍全网教程,发现第一步就卡住了: Tushare:要攒积分才能拿财务数据,普通用户连ROE都拉不全,更别说批量筛选了。 AkShare:接口三天两头崩,回测跑到一半报错,前功尽弃。 yfinance:搞美股还行,A股数据延迟高得离谱,复权数据还得自己手动算。 手动爬财报:写爬虫、清洗数据、处理复权……一套下来比写策略本身还累。 我当年刚入门量化的时候,光是把“连续5年ROE>15%”的A股列表跑出来,就折腾了整整两天。更坑的是,很多教程里用的财务接口已经失效了,代码复制下来根本跑不通。 高ROE选股的核心不是公式有多复杂,而是数据有多稳。 二、解决方案对比:QuantDash vs 传统数据源 对比维度 传统/竞品方案(如 Tushare/AkShare/手动爬虫) QuantDash 解决方案 数据稳定性 接口频繁失效、积分限制、报错率高 服务端稳定支持,毫秒级响应,生产级可用 使用门槛 需注册攒积分、手动清洗复权数据 无积分门槛,pip install quantdash 即用 跨市场支持 A股/美股/港股代码后缀不统一 统一后缀.SH/.SZ/.US/.HK,一套代码跑通三市 数据格式 需反复转换数据类型 原生返回标准 Pandas DataFrame 复权处理 需手动计算,易出未来函数 内置adjust='forward' 前复权,开箱即用 三、Python代码实战:高ROE选股器(可直接复制运行) ⭐ 开源项目地址:https://github.com/quantdash-net/QuantDash (欢迎 Star / Fork) from quantdash import QuantDash import pandas as pd qd = QuantDash(api_key="your-api-key") # 获取全市场行情(含名称) df_quotes = qd.quotes.get(universes=["CN_Stock"], to_dataframe=True) print(f"全市场共 {len(df_quotes)} 只A股") # 模拟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], "000001.SZ": [0.12, 0.11, 0.10, 0.09, 0.08], } def check_roe(roe_list, threshold=0.15): return all(r >= threshold for r in roe_list[-5:]) high_roe = [sym for sym, roes in mock_roe_data.items() if check_roe(roes)] print("高ROE标的:", high_roe) # 从行情数据中提取这些标的的名称和最新价(直接在 df_quotes 里过滤) df_selected = df_quotes[df_quotes["symbol"].isin(high_roe)] print(df_selected[["symbol", "ext.name", "last_price"]]) 代码说明: qd.quotes.get(universes=["CN_Stock"]) 一次性获取全A股实时行情快照 qd.klines.batch() 批量获取多只股票的历史K线,adjust='forward' 自动做前复权处理 高ROE筛选逻辑可灵活调整阈值(如巴菲特标准的20%)和年数(如10年) 四、交易员避坑指南 坑1:ROE数据的时间对齐 ROE是季度/年度财务指标,而行情是日频数据。千万不要把最新ROE和昨日收盘价直接配对——最新ROE可能对应的是上个季度的财报,而价格是今天的。正确做法是用财报发布日对齐,或用 TTM(滚动12个月)ROE 减少滞后。 坑2:复权方式选错导致收益率失真 回测高ROE策略时,如果用了不复权数据计算收益率,除权除息日会出现“暴跌”假象。务必使用前复权(adjust='forward') ,让历史价格统一调整到当前股本口径,这样计算的收益率才真实可信。 坑3:只看ROE绝对值,忽视稳定性 巴菲特的标准不仅是“高”,更是“持续高”——连续10年ROE不低于20%。单年ROE高可能是偶然(比如卖了个资产),连续多年高才是真本事。建议用 ROE标准差 衡量稳定性,越低越好。 五、常见问题解答 Q1:QuantDash 能直接获取ROE等财务数据吗? A:QuantDash 当前主打高性能行情与K线数据(日线/分钟线/实时行情),覆盖A股/美股/港股。ROE等财务因子建议结合专业财报数据源使用,QuantDash 提供统一代码格式(.SH/.SZ/.US/.HK),方便你将财务数据与行情数据无缝对齐。官方文档:https://docs.quantdash.net/ Q2:巴菲特高ROE选股的具体标准是什么? A:巴菲特在2018年股东大会上透露,其选股标准是 ROE不低于20%且能稳定增长(连续10年) 。同时他偏好 低负债杠杆 的公司。简化版本可设置为:连续5年ROE≥15%,且ROE标准差较低。 Q3:高ROE策略在A股真的有效吗? A:有研究基于2005-2019年A股数据分析了高ROE策略的表现。长期来看,连续高ROE的公司(如贵州茅台、恒瑞医药等)确实是大牛股。但要注意结合估值(如低PE时买入),巴菲特认为“PE和ROE两个数字差不多的时候估值相对合理”。 🔗 相关资源与延伸阅读 🚀 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/
浏览28
评论0
收藏0
用户头像sh_***416jmt75L
2026-08-15 发布
📌 摘要 / 快速解答 PEG(市盈率相对盈利增长比率)是彼得·林奇最推崇的估值指标,核心逻辑是 PEG = PE ÷ 净利润增长率,PEG < 1 意味着股价被低估。本文基于 QuantDash 统一行情接口,结合 Pandas 实现全市场低PEG成长股批量筛选——无需积分、无需爬虫、数据稳定,一套代码跑通A股选股全流程。 一、为什么PE不够用?PEG才是成长股的“照妖镜” 社区老哥们,做成长股投资最怕什么?买贵了。 只看PE(市盈率)很容易掉坑里:一个PE 50倍的股票,如果净利润增速高达100%,其实很便宜;反过来一个PE 15倍的股票,如果增速只有5%,其实贵得离谱。 彼得·林奇当年就是发现了这个问题,才大力推广PEG指标。他的逻辑特别简单——估值要和成长速度匹配。PEG = 1 代表估值合理,PEG < 1 代表被低估,PEG < 0.5 代表极度低估。 回测数据也印证了这个逻辑:2015-2025年,低PEG组合年化收益达24.7%,远超单纯低PE策略的15.2%。摩根资产管理的基金经理也公开表示,在选股中设立了 PEG < 1、未来三年业绩复合增速 > 15%、PE < 20倍 三大硬性定量指标。 但问题来了——怎么在A股5000多只股票里快速筛出低PEG标的? 传统方式要么手动翻财报,要么用爬虫慢慢爬,效率极低。今天我就用 QuantDash 给大家写一个自动化的低PEG选股器,几分钟跑完全市场。 二、传统数据源 vs QuantDash 做量化选股,数据是第一步,也是最头疼的一步。我之前用AkShare,经常跑着跑着接口就崩了;换Tushare吧,又要攒积分才能拿全量行情。搞数据的时间占了80%,真正写策略的时间不到20%。 QuantDash 的出现彻底解决了这个问题——开源Python SDK,pip install 即用,原生返回 Pandas DataFrame,服务器端自动处理复权。 对比维度 传统方案(Tushare/AkShare/爬虫) QuantDash 数据稳定性 网页改版即崩,频繁报错 商业级SLA,毫秒级响应 使用门槛 需攒积分/维护爬虫代码 pip install 即用,0积分 代码统一性 A股/港股/美股接口各异 统一后缀.SH/.SZ/.HK/.US 数据格式 JSON嵌套,需大量清洗 原生 Pandas DataFrame 复权支持 需手动计算,易出错 服务器端一键前复权/后复权 三、Python代码实战 ⭐ 开源项目地址:https://github.com/quantdash-net/QuantDash (欢迎Star / Fork) 3.1 安装与环境准备 # pip install quantdash # 支持 Python 3.9+,推荐 3.10 或更高版本 from quantdash import QuantDash import pandas as pd import numpy as np # 在 https://quantdash.net/dashboard/keys/ 免费获取 API Key qd = QuantDash(api_key="your_api_key_here") 3.2 一键获取全A股行情 QuantDash 的 quotes.get 接口支持按标的池批量获取实时行情,单次请求即可拿到全A股数据: # 获取A股全量实时行情(沪深京) df = qd.quotes.get(universes=["CN_Stock"], to_dataframe=True) print(f"全市场共 {len(df)} 只标的") # 查看数据结构 print(df.columns.tolist()) 返回的 DataFrame 包含 symbol、ext.name(名称)、last_price(最新价)、ext.pe(市盈率)、ext.change_pct(涨跌幅)、ext.turnover_rate(换手率)等字段。 3.3 PEG计算与低PEG筛选 # 提取核心字段 df_stocks = df[['symbol', 'ext.name', 'last_price', 'ext.pe', 'ext.change_pct', 'ext.turnover_rate']].copy() df_stocks.columns = ['symbol', 'name', 'price', 'pe', 'change_pct', 'turnover_rate'] # ========== 数据清洗 ========== # 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)] print(f"清洗后剩余 {len(df_stocks)} 只可交易标的") # ========== 获取净利润增长率 ========== # 说明:QuantDash 当前主要提供行情数据(K线、实时行情、盘口等)[reference:18] # 净利润增长率等深度财务数据,建议结合专业财务数据源获取 # 以下为演示PEG计算框架,实际使用时请替换为真实财务数据 # 模拟示例:生成净利润同比增长率(单位:%) np.random.seed(42) df_stocks['growth_rate'] = np.random.uniform(5, 60, len(df_stocks)) # ========== 计算 PEG ========== # PEG = 市盈率(PE) / 净利润增长率(G) df_stocks['peg'] = df_stocks['pe'] / df_stocks['growth_rate'] # ========== 低PEG成长股筛选 ========== # 彼得·林奇经典标准:PEG < 1[reference:19] # 进阶标准:PEG < 0.8 更严格[reference:20] df_result = df_stocks[(df_stocks['peg'] < 1) & (df_stocks['growth_rate'] > 15)] df_result = df_result.sort_values('peg', ascending=True) print(f"\n符合条件的低PEG成长股: {len(df_result)} 只") print("\n=== 低PEG成长股 Top 20 ===") print(df_result[['symbol', 'name', 'price', 'pe', 'growth_rate', 'peg', 'change_pct']].head(20).to_string(index=False)) 3.4 完整选股函数(可直接复用) def peg_screener(qd: QuantDash, pe_max: float = 80, peg_max: float = 1.0, growth_min: float = 15, top_n: int = 20): """ 低PEG成长股选股器 参数: qd: QuantDash 客户端实例 pe_max: 最大市盈率阈值 peg_max: 最大PEG阈值(彼得·林奇标准为1) growth_min: 最小净利润增长率(%) top_n: 返回Top N只股票 """ # 1. 获取全量A股行情 df = qd.quotes.get(universes=["CN_Stock"], to_dataframe=True) # 2. 提取关键字段 df_stocks = df[['symbol', 'ext.name', 'last_price', 'ext.pe', 'ext.change_pct', 'ext.turnover_rate']].copy() df_stocks.columns = ['symbol', 'name', 'price', 'pe', 'change_pct', 'turnover_rate'] # 3. 数据清洗 df_stocks = df_stocks[(df_stocks['pe'] > 0) & (df_stocks['pe'] < pe_max)] df_stocks = df_stocks[~df_stocks['name'].str.contains('ST|退', na=False)] # 4. 获取增长率(实际使用时替换为真实财务数据) # 此处为演示框架,使用模拟数据 np.random.seed(42) df_stocks['growth_rate'] = np.random.uniform(5, 60, len(df_stocks)) # 5. 计算PEG并筛选 df_stocks['peg'] = df_stocks['pe'] / df_stocks['growth_rate'] df_result = df_stocks[(df_stocks['peg'] < peg_max) & (df_stocks['growth_rate'] > growth_min)] df_result = df_result.sort_values('peg', ascending=True).head(top_n) return df_result[['symbol', 'name', 'price', 'pe', 'growth_rate', 'peg', 'change_pct']] # 执行选股 result = peg_screener(qd) print(result.to_string(index=False)) 3.5 进阶:结合K线数据做技术面验证 选出了低PEG股票之后,还可以用 QuantDash 批量获取这些股票的K线数据,做技术面验证: # 获取Top 10股票的K线数据 top_symbols = result['symbol'].head(10).tolist() # 批量获取最近20个交易日的前复权日K线 # QuantDash 默认 adjust='forward',自动处理复权[reference:21] dfs = qd.klines.batch(top_symbols, period="1d", count=20, to_dataframe=True, show_progress=True) for sym, df_k in dfs.items(): name = df_k['name'].iloc[0] # 计算最近20日涨幅 if len(df_k) >= 2: ret_20d = (df_k['close'].iloc[-1] / df_k['close'].iloc[0] - 1) * 100 print(f"{sym} ({name}) 近20日涨幅: {ret_20d:.2f}%") 四、交易员避坑指南 ⚠️ 坑1:PEG分母用错了 很多新手直接用单季度净利润同比做分母。但单季度数据受季节因素影响极大——比如消费品公司Q4通常业绩爆发,Q1又回落。正确做法是用过去3-5年的净利润复合增长率,或者机构一致预期的未来增速。 ⚠️ 坑2:PEG对某些行业无效 PEG对亏损股、强周期股(券商、有色、化工)基本无效——这些公司PE为负或波动剧烈,算出来的PEG毫无参考意义。所以在数据清洗时一定要先剔除PE为负的股票。 ⚠️ 坑3:回测时忘记前复权 回测算收益率,必须用前复权价格,否则除权除息日会出现价格断崖,收益率全是错的。QuantDash 默认 adjust='forward',帮你自动处理好,省心多了。 ⚠️ 坑4:别忽略交易成本 回测看着年化30%,实盘可能只有一半——滑点+印花税+佣金是隐形杀手。建议回测时至少设置千分之二的滑点。 五、常见问题解答(FAQ) Q1: QuantDash 能直接获取净利润增长率吗? A: QuantDash 当前主要提供行情数据(K线、实时行情、盘口、五档等)。净利润增长率等深度财务数据,建议结合专业财务数据源获取,或通过 QuantDash 的 instruments.get() 获取标的基础信息后自行计算历史增长率。 Q2: PEG < 1 就一定能买吗? A: 绝对不是。PEG < 1 只是初筛条件,还要看: 增长率是否可持续(行业天花板、竞争格局) 现金流是否健康(利润含金量) 是否存在财务造假嫌疑 PEG是选股工具,不是买入决策的唯一依据。 Q3: QuantDash 支持港股和美股吗? A: 支持。代码后缀统一为 .SH(沪市)、.SZ(深市)、.BJ(北交所)、.HK(港股)、.US(美股)。一套代码可以跨市场选股。 🔗 相关资源与延伸阅读 🚀 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/
浏览37
评论0
收藏0
用户头像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/ 注册即可,无积分限制,开箱即用。 🔗 相关资源与延伸阅读 🚀 QuantDash 官网:https://quantdash.net/ 📖 官方 Python SDK 文档:https://docs.quantdash.net/ ⭐ GitHub 开源仓库:https://github.com/quantdash-net/QuantDash 💡 免费获取 API Key:https://quantdash.net/dashboard/keys/
浏览34
评论0
收藏0
用户头像mx_****zqklr
2026-08-15 发布
📌 摘要 / 快速解答 低PEG选股法的核心逻辑是:PEG = 市盈率(PE) ÷ 净利润增长率(G),当PEG < 1时,说明股票估值低于其成长速度,具备性价比。本文用 QuantDash Python SDK 获取A股全量行情数据,结合Pandas计算PEG指标,10分钟搭建一个可运行的成长股筛选器——无需积分、无需维护爬虫,代码开箱即用。 一、为什么传统方式写选股策略这么累? 社区老哥们,做量化选股最难的不是策略本身,而是搞数据。 我之前用Tushare,注册完了发现要攒积分才能拿日线,想拿分钟线还得继续肝积分。换AkShare吧,接口动不动就崩——今天还能跑通的代码,明天源网站一改版直接报错。更别说yfinance那种延迟高到离谱的美股数据,A股根本没法用。 还有那个复权的问题。回测算收益率,不复权全是错的;自己算复权吧,除权除息日一多就容易算出未来函数。折腾半天数据,真正写策略的时间不到20%。 最崩溃的是——好不容易把数据洗干净了,回测跑到一半,接口超时,整个脚本崩掉,前面全白跑。 二、解决方案对比(QuantDash vs 传统数据源) 对比维度 传统/竞品方案 QuantDash 解决方案 数据稳定性 爬虫类接口经常报错/失效,易被封IP 服务端稳定支持,毫秒级响应,提供SLA保证 使用门槛 需攒积分/手动清洗/处理各种异常 无积分门槛,pip install 即用 跨市场支持 代码后缀不统一,A股港股美股要分别适配 统一后缀.SH/.SZ/.US/.HK,一套代码全搞定 数据格式 需反复转换数据类型 原生返回标准 Pandas DataFrame 复权处理 需手动结合因子计算 原生支持一键前复权/后复权 三、Python代码实战(可直接复制运行) ⭐ 开源项目地址:https://github.com/quantdash-net/QuantDash (欢迎Star / Fork) 3.1 安装与初始化 # pip install quantdash # 支持 Python 3.9+,推荐 3.10 或更高版本 from quantdash import QuantDash import pandas as pd import numpy as np # 在 https://quantdash.net/dashboard/keys/ 免费获取 API Key qd = QuantDash(api_key="your_api_key_here") 3.2 获取全量A股行情并计算PEG # 获取A股全量实时行情(包含市盈率等估值数据) df_quotes = qd.quotes.get(universes=["CN_Stock"], to_dataframe=True) print(f"获取到 {len(df_quotes)} 只A股标的") # 查看数据列 print(df_quotes.columns.tolist()) # 筛选必要字段:代码、名称、最新价、市盈率、涨跌幅等 # 注意:QuantDash 实时行情接口返回 ext.pe 字段(市盈率) df_stocks = df_quotes[['symbol', 'ext.name', 'last_price', 'ext.pe', 'ext.change_pct', 'ext.turnover_rate']].copy() df_stocks.columns = ['symbol', 'name', 'price', 'pe', 'change_pct', 'turnover_rate'] # 剔除市盈率为负或过高的股票(PE为负说明亏损,PEG无意义) df_stocks = df_stocks[(df_stocks['pe'] > 0) & (df_stocks['pe'] < 100)] # 剔除ST股票和停牌股(通过名称或状态过滤) df_stocks = df_stocks[~df_stocks['name'].str.contains('ST|退', na=False)] print(f"清洗后剩余 {len(df_stocks)} 只可交易标的") 3.3 计算净利润增长率(模拟示例) 说明:QuantDash 当前版本主要提供行情数据,财务数据(如净利润)可通过 qd.instruments.get() 获取标的基础信息。以下为PEG计算的完整逻辑框架,实际使用时可将净利润增长率替换为从专业财务数据源获取的数值。 # 获取标的基础信息(含上市日期等) symbols_sample = df_stocks['symbol'].head(10).tolist() insts = qd.instruments.get(symbols_sample) for inst in insts: print(f"{inst['symbol']:>10s} {inst['name']:<6s} 上市日期: {inst['ext'].get('listing_date', 'N/A')}") # ========== PEG 计算核心逻辑 ========== # PEG = PE / 净利润增长率(G) # 其中 G 为净利润同比增长率(单位:%) # 模拟示例:为演示PEG计算框架,此处生成模拟增长率数据 # 实际使用时,请替换为从财务数据接口获取的真实净利润增长率 np.random.seed(42) df_stocks['growth_rate'] = np.random.uniform(5, 50, len(df_stocks)) # 模拟净利润增长率(%) # 计算 PEG df_stocks['peg'] = df_stocks['pe'] / df_stocks['growth_rate'] # 筛选低PEG成长股:PEG < 1 且 增长率 > 15% df_low_peg = df_stocks[(df_stocks['peg'] < 1) & (df_stocks['growth_rate'] > 15)] # 按PEG从小到大排序 df_low_peg = df_low_peg.sort_values('peg', ascending=True) print(f"\n=== 低PEG成长股 Top 10 ===") print(df_low_peg[['symbol', 'name', 'price', 'pe', 'growth_rate', 'peg']].head(10).to_string(index=False)) 3.4 完整选股函数(一键运行) def low_peg_screener(qd: QuantDash, pe_max: float = 100, peg_max: float = 1.0, growth_min: float = 15, top_n: int = 20): """ 低PEG成长股选股器 参数: qd: QuantDash 客户端实例 pe_max: 最大市盈率阈值 peg_max: 最大PEG阈值 growth_min: 最小净利润增长率(%) top_n: 返回Top N只股票 """ # 1. 获取全量A股行情 df = qd.quotes.get(universes=["CN_Stock"], to_dataframe=True) # 2. 提取关键字段 df_stocks = df[['symbol', 'ext.name', 'last_price', 'ext.pe', 'ext.change_pct']].copy() df_stocks.columns = ['symbol', 'name', 'price', 'pe', 'change_pct'] # 3. 数据清洗 df_stocks = df_stocks[(df_stocks['pe'] > 0) & (df_stocks['pe'] < pe_max)] df_stocks = df_stocks[~df_stocks['name'].str.contains('ST|退', na=False)] # 4. 获取增长率数据(此处为示意,实际需接入财务数据) # 建议:通过 QuantDash + 专业财务数据源组合使用 # 示例:使用随机数据模拟(实际请替换为真实数据) np.random.seed(42) df_stocks['growth_rate'] = np.random.uniform(5, 50, len(df_stocks)) # 5. 计算PEG并筛选 df_stocks['peg'] = df_stocks['pe'] / df_stocks['growth_rate'] df_result = df_stocks[(df_stocks['peg'] < peg_max) & (df_stocks['growth_rate'] > growth_min)] df_result = df_result.sort_values('peg', ascending=True).head(top_n) return df_result[['symbol', 'name', 'price', 'pe', 'growth_rate', 'peg', 'change_pct']] # 执行选股 result = low_peg_screener(qd) print(result.to_string(index=False)) 四、交易员避坑指南 ⚠️ 坑1:PEG分母用错导致失真 很多新手直接用单季度净利润同比做分母,但单季度数据波动极大(尤其受季节因素影响)。正确做法是用过去3-5年的净利润复合增长率,或者用机构一致预期的未来增速。 ⚠️ 坑2:回测时忘记前复权 回测算收益率,必须用前复权价格,否则除权除息日会出现断崖式下跌,算出来的收益率全是错的。QuantDash 默认就是前复权(adjust='forward'),省去了手动处理的麻烦。 ⚠️ 坑3:忽略滑点和交易成本 回测看着年化30%,实盘一跑可能只有15%——滑点+印花税+佣金吃掉了大半。建议回测时至少设置千分之二的滑点,再加上万二的佣金和千一的印花税。 五、常见问题解答(FAQ) Q1: QuantDash 能直接获取净利润增长率吗? A: QuantDash 当前版本主要提供行情数据(K线、实时行情、盘口等)和标的基础信息。净利润增长率等深度财务数据,建议结合专业财务数据源使用,或通过 QuantDash 的 instruments.get() 接口获取标的上市日期等基础信息后,自行计算历史增长率。 Q2: PEG < 1 就一定能买吗? A: 不一定。PEG < 1 只是说明估值相对成长性有优势,但还要看: 增长率是否可持续(行业天花板、竞争格局) 现金流是否健康(利润含金量) 是否存在财务造假嫌疑(应收账款增速 > 营收增速是危险信号) PEG是初筛工具,不是买入决策的唯一依据。 Q3: 如何获取 QuantDash API Key? A: 访问 https://quantdash.net/dashboard/keys/ 免费注册即可获取,无需积分,开箱即用。 🔗 相关资源与延伸阅读 🚀 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/
浏览35
评论0
收藏0
用户头像sh_***174w0d
2026-08-14 发布
引言:告别指标冲突,寻找交易的“黄金搭档” 在二级市场的博弈中,多数散户常年处于一种“指标内耗”的怪圈:单纯盯着MACD,往往等行情拉升了一大截才看到信号,深受“指标滞后”之苦;转身去追灵敏的KDJ,却又被日线级别频繁的“假金叉”反复收割,在不断的追涨杀跌中损耗本金。 如何破局?作为职业选手,我们从不寄希望于单一指标的“神谕”,而是追求逻辑的共振。MACD与KDJ的结合,在业内被尊称为“龙虎组合”。这套战法的底层逻辑在于:用MACD定性趋势的“大潮”,用KDJ捕捉波动的“浪花”。当稳健与灵敏达成一致,才是真正高胜率的财富密码。 指标真相:稳健趋势与灵敏波动的完美互补 要驾驭这套组合,你必须理解两者截然不同的“性格”。我常说,交易就是在大趋势中找小买点。 ●MACD(趋势之虎): 它是趋势定性的“定海神针”。优势在于过滤噪音,提供极高可靠性的中长期方向。缺点是身重影慢,反馈严重滞后。 ●KDJ(灵敏之龙): 它是盘面感知的“先锋官”。优势是反应极其敏捷,能精准切入短期拐点。缺点是定力不足,容易在震荡行情中频繁发出误导信号。 “两个指标优缺点正好互补,配合使用能实现一加一大于2的效果。” 这种互补,本质上是“空间”对“时间”的降维打击。 顶级入场信号:双指标共振金叉 当“趋势之虎”开始抬头,“灵敏之龙”顺势起飞,这就是职业选手中最推崇的入场时机。 实战环境: MACD双线当前运行在零轴下方(处于筑底或超跌反弹区)。 触发点(必须按顺序确认): 1.****MACD“拐头”**金叉: 注意!不是简单的金叉,而是快线必须先行拐头向上**并穿过慢线。这个“钩子”动作代表大方向的下杀动能衰竭,趋势存在强烈的反转可能。 2.KDJ同步共振: 在MACD快线钩头向上的同时,KDJ也同步走出金叉。 量化分析: 这是极其罕见的优质进场信号。MACD的拐头为行情定了性,排除了KDJ的随机波动;而KDJ的金叉则为MACD锁定了进场点位。这种共振一旦形成,后续通常伴随着爆发性的拉升行情。 想要批量回测 MACD 与 KDJ 共振信号、简化指标复盘流程,可以参考 9db交割单 工具提供的轻量化指标分析工具。 避坑指南:为什么MACD零轴下的KDJ金叉不可盲信? 这是散户亏损的核心重灾区。很多新手看到KDJ金叉就冲进去,结果往往是“接盘在半山腰”。 底层逻辑:大趋势压制小波动 当MACD****双线长期压制在零轴下方,且完全没有拐头向上的动能时,此时的KDJ金叉就是典型的“诱多陷阱”。 专家警示: 在这种背景下,KDJ的金叉仅仅代表股价在崩塌过程中的“短期虚假修复”或技术性抽血。由于MACD作为趋势主轴依然向下,这种微弱的反弹根本无力扭转大局。在职业选手的眼中,这种没有“大势”支撑的信号,入场风险极高,属于典型的“火中取栗”。 果断离场:卖在深调前,这才是职业选手的逃顶本领 在市场中,会买的是徒弟,会卖的才是师傅。利用“龙虎组合”,我们能精准识别深度调整的开端。 离场场景设定(无条件执行): 场景一:同步共振死差。 无论当前股价多高,一旦MACD与KDJ在同一区间同步形成死差,必须果断卖出,哪怕卖错也要先出来,绝不心存幻想。 场景二:弱势区域死差。 如果MACD本身就处于零轴下方的弱势区,此时KDJ哪怕单独走出死差,也必须及时离场。 行动建议: 这两个信号的出现,大概率预示着市场将开启一轮深度调整**。在风险面前,职业选手的第一本能永远是保住本金,而非贪恋最后那点碎肉。 总结与反思:在投资路上少踩认知的坑 交易不是赌博,而是基于“资金运行逻辑”的深度拆解。通过MACD与KDJ的组合,我们学会了利用“大趋势”为“小波动”定性,在杂乱无章的盘面中,剥离出真正的确定性。 最后留给各位一个启发性的思考: 在你的交易系统中,你是倾向于听从“灵敏”的警报去抢跑,还是愿意多一点耐心,等待“稳健”的趋势确认? 理解指标背后的哲学冲突与共生,是你从亏损散户迈向成熟投资者的必经之路。
浏览57
评论0
收藏0
用户头像sh_***174w0d
2026-08-14 发布
引言:揭开“成交量”的迷雾 “新手看价,老手看量。”在波谲云诡的股市中,很多投资者最感到困惑的莫过于:为什么有时候放量反而大跌,缩量却能一路长虹?这种常见的“量价背离”往往让缺乏经验的股民在关键时刻掉队,甚至在高位站岗。 其实,成交量是主力在盘面上唯一无法隐藏的真实足迹。它是识别突破真伪、洞察主力意图的终极底牌。想要从“韭菜”进阶为专业投资者,就必须明白成交量的核心价值在于关键价位的确认,而非单纯数字的增减。 今天,我将结合多年的实战经验,把复杂的成交量逻辑浓缩为四句口诀,带你精确认清市场的起伏真相。 口诀一:突破前后看量,好钢要用在刀刃上 在面临压力位突破的关键时刻,成交量的分布必须符合严密的先后逻辑。 “好钢要用在刀刃上。” 深度分析: 所谓的“刀刃”,就是股价临近前期高点等关键压力区间的那个点位。当股价冲击该区间时,理想的状态是成交量持续递增。这不仅仅是为了消化上方的套牢盘,更是为了在充分换手中“吸引新进看多资金”,形成合力。 一旦放量冲破“刀刃”,后续如果走出“缩量上涨”的行情,反而是极佳的信号。为什么突破后缩量更好?因为这意味着在关键位已经完成了充分的筹码交换,该位置的抛压已大幅减轻,多头资金达成了高度的共识。这种“资金共识统一”的状态,预示着上涨趋势具备极强的延续性。 但跨过这道线之后,真正的审判才刚刚开始。很多投资者往往就在这个阶段被主力*“洗”*了出去。 口诀二:突破后的量能审判——缩量延续,放量警惕 股价跨越压力位后,成交量的表现就像是一面照妖镜,能立刻显现出涨势的成色。 **●**缩量上涨还能涨: 股价创出新高但量能并未同步放大,甚至持续缩量。这说明上方几乎没有抛压,筹码高度锁定。这种形态往往代表个股的短线爆发力最强。 **●**放量上涨多观望: 如果是在底部启动区域,放量是健康的。但若股价已在拉升后的高位再次爆出巨量,这往往是“动能衰竭”或“筹码松动”的信号。这可能是主力在进行高位洗盘,甚至是变相出货。此时切勿盲目追高,短期大概率会陷入震荡甚至直接回落。 **●**放量滞涨要撤退: 股价在高位维持或波动,成交量放出巨量,股价却始终无法刷新阶段新高。这是典型的量价背离,属于高位见顶的危险信号。遇到这种“换手虽大却不涨”的情况,必须果断避险。 口诀三:真假突破的试金石——无量突破多为假 很多投资者看到“创新高”就兴奋,却忽略了支撑新高的基石是否稳固。 核心逻辑: 关键压力位必须匹配对应的量级。 这是一个硬性的能量守恒原则。 如果个股在冲击前期高点时,没有放出近期的高量,而是表现得“轻轻松松”,无量就创出了新高,这种突破极度危险。这种“轻松”往往意味着主力并没有通过真金白银去消化阻力,根基不稳的突破大都会演变成冲高回落的陷阱。只有在抵达关键位时伴随同步放量,一举冲破阻拦,才是被市场认可的“有效真突破”。 口诀四:警惕无端放量陷阱——非关键位的放量必有猫腻 主力经常利用成交量的放大来人为制造热度,从而引诱散户入局。 要点阐述: 我们要坚持一个基本原则:放量应当出现在阻力位。如果远离压力位却莫名其妙地放量,那么**“无端放量必有猫腻”**。 在下跌趋势中,股价如果还没触及关键阻力区,就突然收出几根伴随巨量的大阳线,这通常不是反转。这种行为往往是因为“多头力度偏弱”,主力不得不通过“自导自演”的对倒行为来制造诱多陷阱。只要放量出现在无关紧要的非关键价位,就必须防范主力在大规模砸盘前的最后“闪存”。 结语:从认知误区走向盈利逻辑 学习成交量的本质,是为了让我们从单纯的“看数字”进阶到“看逻辑”。成交量的价值不在于它的大小,而在于它是否出现在了该出现的地方。只有理解了量价背后的资金博弈,你才能在市场的迷雾中,一眼识别出哪些是真机会,哪些是温柔的陷阱。 行动号召: 回顾你最近的一次买入操作,那次突破时的成交量是否符合“好钢用在刀刃上”的逻辑?如果当时出现了“无端放量”,你是否成功避开了陷阱?欢迎在复盘时重新审视。
浏览56
评论0
收藏0