对于许多刚入场的新手来说,K线图就像是一本没有翻译的“天书”,满屏红绿交替,看似毫无规律。但你要知道,股市从来不是勤劳致富的果园,而是智力与心理博弈的修罗场。在那些起伏的影线与实体背后,其实藏着主力精心排布的“暗语”。 复杂的图表并非乱码,而是有迹可循的秩序。今天,我将这几十年在盘面上摸爬滚打的经验,浓缩成六句极具实战意义的口诀。它们不仅是技术指标,更是识破庄家意图、建立交易直觉的敲门砖。这些年看盘下来,除了 K 线本身,我也会参考一些专业的金融资讯站点做交叉验证,比如 9db交割单 平台,行情数据更新得比较及时,对判断趋势有一定帮助。 仙人指路:上涨途中的火力侦察 在上升趋势中,如果你看到股价在拉升过程中留下一根长长的上影线,且成交量并未极度放大,别急着被“冲高回落”吓跑,这很可能是主力在“投石问路”。 仙人指路,果断买入 这种形态的逻辑在于“多头试盘”:主力利用上影线试探上方的套牢盘压力,就像侦察兵在总攻前探测敌方火力分布。关键在于位置——它必须出现在股价刚突破或处于上升通道中。如果出现在暴涨后的高位,那叫“墓碑线”,是逃命信号。此时,“果断”二字源于对趋势的信任,一旦股价在随后几个交易日内吃掉这根上影线,便是加速起飞的时刻。建议将止损设在影线的最低点,以防试盘演变为真出货。 洗上眉梢:喜事近前的心理博弈 很多股民总是感叹“一买就跌,一卖就涨”,其实你可能倒在了主力“洗盘”的黎明前。“洗上眉梢”这个词,本意取自“喜上眉梢”,但在股市里,这个“洗”字更具深意。 洗上眉梢,大胆出招 所谓洗盘,就是主力通过剧烈的震荡或小幅回撤,让意志不坚定的“浮筹”由于恐惧而交出筹码。当K线在高位横盘震荡或在关键支撑位附近反复揉搓,成交量却日益缩减时,说明主力的清洗已接近尾声。所谓的“大胆”,是对洗盘结束信号的确认。我们要看缩量后的第一根放量阳线,那是主力不再隐藏野心的证明。记住,若跌破震荡区底部,那就是“诱多”陷阱,必须撤退。 双锤打桩:夯实底部的信心支撑 如果说单针探底是试探,那么“双锤”就是主力在为你搭建坚实的跳板。 双锤打桩,积极跟上 “双锤”是指K线图中在相近的价格区间连续出现两根带有长下影线的K线。这种形态就像建筑施工中的“打桩机”,每一根下影线都是空头尝试向下突破却被多头强力顶回的痕迹。两次下探未果,说明该区域的支撑位极度坚固。在实战中,你要“积极”配合量能观察:第二次打桩时的成交量若小于第一次,说明抛盘枯竭,反攻就在瞬息之间。 向上踩三下:趋势推进中的加仓艺术 健康的上升趋势从来不是一根直线,而是像爬楼梯一样:走两步,退一步。 向上踩三下,加仓不害怕 这是一种典型的上升中继回踩形态。当股价创新高后,出现连续三次小幅的回踩(不一定连跌三天,可能是三次触碰支撑位),只要每一次回踩的低点都比前一次高,且始终不破关键均线,这种“踩”动作就是在消化短线获利盘。此时的“不害怕”,是建立在对上涨逻辑未破坏的认知上。这不仅是持仓者的定心丸,更是错过第一波行情的投资者最理想的“加仓点”。 长短阴阳腿:警惕趋势的力竭反转 如果说前几句口诀是教你进场,那么这一句是教你保命。 长短阴阳腿,撤退不后悔 这里的“腿”形象地描述了K线实体或影线长度的失衡。例如:在一段上涨后,出现了一根巨大的阳线(长腿),紧接着却是一根实体极小且重心下移的阴线(短腿),或者反之。这种“阴阳长短”的突变,意味着多空力量对比发生了根本性逆转。当多头的“大长腿”被空头的力量瞬间截断时,不要留恋任何幻象。“不后悔”是一种交易纪律——在反转确认时,保护本金永远比博取反弹更重要。 死神三不取:最后的逃命红线 这是交易系统中的“最后通牒”,是绝对不能触碰的警戒区。 死神三不取,指营快离去 “三不取”通常指的是三项关键信号的共振:第一,股价跌破5日或10日均线;第二,均线系统出现死叉;第三,MACD在高位出现顶背离或红柱急剧缩短。当这三个信号集齐,就像死神的召唤。此时无论你获利多少(指营),唯一的生存之道就是“快离去”。在确定性的风险面前,任何对“回光返照”的期待都是致命的。 结语:从口诀到直觉的跨越 口诀是对市场规律的高度凝练,是你在迷雾重重的战场上能摸到的指南针。然而,真正的交易高手并不会死记硬背图形,他们会透过图形感知屏幕另一端主力的心跳。 股市就像一面镜子,照出的是人的贪婪与恐惧。技术口诀可以帮你建立认知,但最终决定胜负的,往往不只是眼前的技术图形,而是你面对波动时,屏幕后面那颗是否足够冷静、独立的心。在瞬息万变的行情中,你内化的直觉,才是最锋利的剑。 引言:交易者的焦虑与“化繁为简”的智慧 在金钱永不眠的股市里,无数新手交易者正被一种名为“追随幻影”的焦虑所吞噬:每天在杂乱无章的市场噪音中疲于奔命,频繁换股,却发现自己总是精准地踏入“买入即见顶,卖出即起飞”的恶性循环。这种无力感源于对市场节奏的丧失。 其实,真正的短线博弈大师往往拥有一种化繁为简的定力。他们不会去折腾上百种指标,而是死守一条线——“5日均线”。在实战中,高手们将“五日不破,不必操作”视为铁律。这不仅仅是一个技术参数,更是短线获利的黄金准则。为什么要将所有精力聚焦于此?因为它代表了短线最真实的情绪边界。 5日均线——短线强势股的“生命防线” 所谓的5日均线,是股票过去五个交易日成交价格的算术平均线。在实战导师眼中,它不仅是一个数据指标,更是短期持仓成本的“动态平衡点”。 从市场心理学角度看,5日均线是多头情绪的“气压计”。当股价始终在5日线上方运行时,意味着过去一周买入的投资者全部处于盈利状态,这种“赚钱效应”会形成正向反馈,推动股价不断新高。对于短线妖股而言,这条线就是不容践踏的尊严。 “五日均线是短线强势股的生命线。只要收盘价没有跌破五日均线,就可以安心持有。” 一旦收盘价有效跌破此线,就意味着平均持仓者转入亏损,恐慌性抛售可能随时降临。因此,守住这条线,就是守住了你的利润安全垫。 进场艺术——寻找趋势扭转的临界点 作为一名实战派导师,我必须明确告诉你:交易不需要猜,只需要等待信号出现。以下是基于5日均线的四种核心进场逻辑,这是你扣动扳机的“绿灯信号”: **●**趋势扭转信号:当5日均线由向下运行转为走平,并伴随微小角度的拐头向上。此时,股价自下而上放量突破均线。这是趋势从阴霾走向黎明的起点,是标准的进场点。 **●低位“W双底”**形态:股价在底部反复震荡,5日均线在图表上勾勒出明显的“W”形。必须注意:在右侧底部的低点,或者股价放量向上穿透均线的瞬间,才是你分批建仓的绝佳时刻。 ●DC入场时机(强势回调):对于已经启动的强势股,股价在回踩5日均线时只要未跌破,且随后再度放量拉升,这就是高胜率的“DC入场”补仓机会。 **●**惯性博弈:即便股价短时击穿5日均线,但只要均线本身的斜率依然保持坚定向上,这往往是“诱空”洗盘。只要重心未失,依然具备进场博弈的价值。 逆向思维——利用“物极必反”捕捉暴跌反弹 在交易场,最极致的危险往往孕育着最丰厚的机会。这就是我们要讨论的“乖离率”逻辑。当股价像断了线的风筝一样大幅远离5日均线时,市场就像一根被拉到极限的橡皮筋,必然存在向均线靠拢的“修补需求”。 这种现象的背后是卖盘力量的枯竭。当股价在急速阴跌或暴跌行情中,5日乖离率达到10%至15%****区间时,说明超卖已至临界。这种高达15%的“安全垫”让此时的介入拥有了极高的容错率。对于冷静的猎手来说,这种极速偏离不仅不可怕,反而是利用“物极必反”规律进行“DC入场”抄底、捕捉技术性反弹的盛宴。 离场信号——当心“均线走平”后的紧急撤退 风险管理不是建议,是命令。当市场释放出以下终结信号时,你必须像执行紧急撤退命令一样果断: **1.**高位钝化。 当5日均线在上行高位逐渐丧失斜率、开始走平时,说明买盘动能已竭。一旦股价直接跌破均线,意味着短期内大规模抛盘正倾巢而出。此时不要抱有幻想,应当逢反弹坚决减仓离场。 **2.**假突破诱多。 股价虽然尝试性地重返5日均线,但如果站稳不到一天就再次跌回均线下方,这是市场极度虚弱、多头反击失败的铁证,必须清仓避险。 **3.**贪婪过热规避。 当股价涨势过猛,拉开5日均线的距离过大,导致**乖离率超过10%**时,说明市场已经进入非理性的情绪博弈。此时不应再被狂热蒙蔽去追高,而应提前减仓,锁定胜果,规避随之而来的暴力回调。 结语:从认知到知行合一 5日均线战法的威力,不在于它有多复杂,而在于它能赋予你一种在混乱中定格秩序的能力。在这个充满变数的市场里,最顶尖的交易者并非拥有预知未来的水晶球,而是拥有克制本能、遵守规则的铁律。 投资的真谛,是学会在关键节点做出正确的抉择,并用纪律去驯服你内心的贪婪。在下一次市场波动来袭时,你是选择继续在情绪的浪潮中沉浮,还是选择信任你的“生命线”,做一个清醒的执剑人? 最近我专门针对 Supermind 平台的AI 量化代码生成平台进行了优化改进,现在效果比市面上的 DS、豆包等工具好很多。 👉 SuperMind AI量化代码生成平台 这个工具最大的特点是直接和 AI 对话就能生成完整可运行的Supermind量化策略代码。你不需要懂 Python、C# 或策略 API,只要用自然语言描述你的交易逻辑,比如:“当5日均线向上突破20日均线时买入,反向时卖出。” AI 就会自动帮你生成完整策略代码,并能直接在平台上运行。 相比于通用大模型的输出,这个平台针对量化交易进行了专门优化生成的代码结构更清晰,逻辑更准确,对策略逻辑的理解更接近量化开发者的思路,并且可用作 API 查询或策略自动生成工具 之前上线后,很多朋友反馈代码质量和可运行性都非常高,几乎不需要再手动修改。现在我们的AI量化代码生成平台已经全面支持 Supermind,你可以直接体验。如果你之前在用 DS、豆包等平台,不妨试试看这个版本,可能会刷新你对AI 写量化策略的想象。 一、研究背景与通用量化模型短板 在美股日内策略、高频仿真与批量历史回测的研究工作中,多数量化研究者习惯于以 K 线、分时成交量作为核心建模变量。此类指标属于行情滞后反馈,仅能在价格走势成型后回溯成因,难以捕捉盘口多空力量提前切换的前置信号。 订单簿失衡指标(OBI)是基于逐档盘口深度开发的先行研判工具,但在工程落地阶段普遍存在四类典型缺陷:固定档位计算造成指标系统性偏移、轮询拉取数据带来时序断层、瞬时虚假挂单干扰信号有效性、全量原始 Tick 入库抬高服务器算力开销。本文结合多套云端量化管线实测经验,给出一套可落地、适配全时段美股行情的自适应 OBI 标准化构建方案,聚焦回测可信度与自动化程序长期稳定性优化。 二、通用盘口数据方案四大工程缺陷 在多类美股行情数据源、本地 / 云端采集框架对比测试后,归纳静态 OBI 体系难以适配真实交易环境的底层问题: 固定深度档位测算存在行情适配盲区 固定选取前 5 档、前 10 档盘口数据计算失衡系数,仅在窄幅震荡行情下误差可控;美股盘前、盘后及盘中剧烈波动阶段,深层限价挂单会主导短期资金情绪,固定档位模型会产生持续性测算偏移,直接降低回测结论参考价值。 HTTP 定时轮询引发时序不连续 采用循环请求拉取盘口快照的采集模式,高频场景下延迟可达数百毫秒,同时易出现快照丢包;多标的并行回测时样本时序错乱,破坏指标连续运算基础。 仅依靠挂单总量易受虚假限价单干扰 单纯通过买卖盘挂单差值计算 OBI,市场瞬时出现大额托单、压单会扭曲指标数值,在仿真交易中频繁输出无效开仓信号,抬升策略最大回撤。 原始深度数据全量存储算力成本偏高 美股全天 Tick 与盘深度数据吞吐量庞大,每条快照直接写入时序库会持续占用服务器读写带宽,造成实时指标计算延迟,不利于 7×24 小时无人值守运行。 为从数据源头解决实时深度流采集难题,本研究管线统一数据源支持全时段美股盘口 WebSocket 长连接推送,原生输出标准化档位、挂单量元数据,可无缝对接各类量化回测与自动化交易架构。 WebSocket 盘口深度订阅基础可运行代码 import websocket import json def on_message(ws, raw_msg): tick_data = json.loads(raw_msg) symbol = tick_data.get("symbol") bid_vol = float(tick_data.get("bidVolume", 0)) ask_vol = float(tick_data.get("askVolume", 0)) total = bid_vol + ask_vol if total > 0: obi_val = (bid_vol - ask_vol) / total print(f"{symbol} 动态OBI指标:{obi_val:.4f}") def on_connect(ws): sub_payload = json.dumps({"symbol": "AAPL", "action": "subscribe", "type": "depth"}) ws.send(sub_payload) if __name__ == "__main__": ws_conn = websocket.WebSocketApp("wss://api.alltick.co/stock/websocket", on_open=on_connect, on_message=on_message) ws_conn.run_forever() 该轻量化脚本算力占用极低,可长期部署于云服务器持续采集毫秒级盘口快照,完整保留全档位原始挂单信息,是自适应档位逻辑开发的底层基础模块。 三、自适应 OBI 标准化建模体系 3.1 基础数学模型与数值解读 订单簿失衡指标核心用于量化盘口多空挂单体量差值,标准计算公式: OBI = (买方总挂单量 − 卖方总挂单量) / (买方总挂单量 + 卖方总挂单量) 数值区间客观判定标准: 指标趋近 1:浅层至深层买方挂单整体占优,短线多头资金意愿更强; 指标趋近 - 1:卖方限价单体量显著更大,短期抛压持续存在; 指标趋近 0:买卖盘流动性均衡,无明确短期多空偏向。 区别于传统静态模型,自适应架构会基于实时波动率动态调整参与计算的盘口深度:行情平稳阶段仅读取浅层档位,极端波动自动纳入深层挂单,从根源消除固定档位带来的系统性测算偏差,有效提升跨行情区间回测一致性。 3.2 四层并行校验降噪框架 单一 OBI 数值易受瞬时虚假订单干扰,配套四维并行校验逻辑同步运算,过滤无效信号: 挂单存续时长校验:过滤存续时长低于 1 秒的瞬时大额限价单,剔除无实际成交意图的挂单; 主动成交匹配校验:联动逐笔主动买卖成交数据,验证盘口挂单是否具备真实资金支撑; 买卖价差分区校验:基于价差区间划分高流动性、低流动性市场环境,差异化调整指标权重; 短时滑动窗口平滑:采用短周期均值抹平指标瞬时毛刺,降低仿真交易误触发概率。 3.3 内存队列缓存预处理架构 针对海量深度数据存储压力,采用前置缓存机制:实时盘口数据先存入内存队列完成 OBI 运算,仅将标准化指标时序持久化归档,原始快照按周期定时存储。配套断线自动重连、缺失数据补录逻辑,在保障数据完整性的前提下,显著降低服务器带宽与存储资源消耗,适配长期离线回测与实时监控双场景。 四、量化研究两大核心落地场景 这套自适应 OBI 架构面向策略回测、自动化风控两大核心研究场景,具备明确的数据与模型优化价值: 日内高频策略仿真与参数迭代 将自适应 OBI 作为前置信号嵌入交易模型,可在价格趋势形成前捕捉盘口多空切换;四层降噪机制有效过滤虚假信号,压缩策略回测回撤,完整覆盖美股盘前、常规交易、盘后全时段仿真测试,适用于多参数遍历、样本外验证工作。 多标的实时异动风控监测 基于 OBI 阈值搭建批量标的异动监控管线,当失衡系数突破自定义区间时触发预警,实现持仓标的毫秒级盘口变化感知,可作为量化风控体系的补充监测模块,完善全周期风险识别能力。 五、研究落地总结 从大量美股盘口数据建模、回测复盘工作中可得出客观结论:多数量化研究者建模重心集中于价格、成交量等滞后指标,容易忽视盘口深度这类反映实时资金博弈的前置数据治理工作。缺少标准化实时深度数据源、自适应档位与多层降噪校验架构,难以构建低偏差、长期稳定可用的 OBI 指标体系。 整合元数据完备的实时行情接口、自适应档位算法与缓存预处理架构,能够替代人工筛选、手动清洗等低效操作,系统性解决静态指标偏移、算力开销过大两类工程问题,同步提升高频仿真、多标的批量回测的数据真实性与程序运行稳定性。 补充说明:OBI 仅作为辅助研判指标,无法单独作为趋势预测依据,实际策略建模中需结合标的现价、市场整体流动性、宏观事件多维度综合分析,方可形成具备实操价值的交易逻辑。 在策略研究过程中经常会观察到一类现象:策略模型逻辑、参数配置均未发生修改,重复执行回测,输出的收益曲线、交易信号、风险指标却出现不一致。经过多轮排查后发现,造成回测结果漂移的诱因,往往并非策略模型本身,而是外部股票 API 获取的历史行情数据集,存在时间断层、空字段、重复记录等不易直观发现的异常。 通过 API 获取 K 线、Tick 行情只是量化研究的数据起点,原始数据不能直接送入回测模型运算。时间戳、OHLC 价格、成交量等核心字段,必须经过规范化校验流程。尤其分钟级别 K 线、逐笔 Tick 高频序列,单个时间切片的数据异常,会沿计算链路传导,干扰后续全部技术指标与模型信号的输出。 异常数据如何影响回测与模型有效性 量化模型与回测运算高度依赖连续、对齐的时间序列行情。以移动平均类趋势模型为例,算法依靠连续价格样本构建滚动计算窗口;一旦部分 K 线记录缺失,窗口样本发生错位,会直接造成开平仓信号提前或者滞后,回测统计结果丧失参考价值,据此评估的模型收益、夏普比率等指标都会失真。 对接外部股票 API 过程中,总结四类高频行情异常: 异常类别 产生原因 时间轴断裂 接口返回记录存在遗漏,时间戳出现跳变 关键字段空置 开高低收、成交量等核心交易字段返回空值 重复样本输出 接口推送机制产生重复的行情条目 交易时段错位 不同市场开闭市规则,引发时间对齐偏差 回测流程如果缺少对应异常处理逻辑,仿真环境就会和真实交易环境产生割裂,容易得到虚高的策略绩效,对模型研究形成误导。 回测前置:行情数据基础校验实践 在回测流水线设计中,建议将数据校验设置为模型运行前的强制预处理步骤。 校验优先处理时间戳。针对分钟 K 线,时间序列需要匹配对应市场的实际交易时段。例如美股盘中交易时段,正常行情时间应当连续;当检测到时间跳变,需要做区分判断:该时间段是真实无成交,还是 API 侧发生数据丢失,二者处理逻辑需要分开实现。 其次校验价格与成交量字段。OHLC 与成交量是绝大多数因子、技术指标模型的输入源,任意字段异常都会污染指标计算结果。 可借助 Pandas 完成基础的数据筛查,以下代码可直接用于数据集初筛: import pandas as pd df = pd.read_csv("stock_history.csv") df["timestamp"] = pd.to_datetime(df["timestamp"]) # 统计各字段空值数量 print(df.isnull().sum()) # 按时间戳升序重排数据 df = df.sort_values("timestamp") 该脚本能够快速定位空值,同时修正时间乱序等基础数据问题。 按行情粒度选择缺失数据处理策略 不同时间维度的行情,缺失数据不能复用同一套修复逻辑。 日线级别行情出现少量缺口时处理成本较低,可以增加缺口标记字段,交由策略层跳过异常交易日,不建议直接改写原始行情数据。 分钟 K 线、Tick 高频数据需要更为审慎的处理方式。 高频回测对时间序列连续性要求严苛,盲目填充价格会篡改真实市场状态,生成虚假的回测绩效。实践中建议最大程度保留原始数据集,新增专门状态标记字段,记录哪些行经过清洗干预,便于后续策略复盘、问题溯源。 针对 Tick 逐笔行情,相比短间隔轮询调用 API,WebSocket 长连接更适合流式行情持续接收,能够降低数据丢包风险。下面为 AllTick API 获取 Tick 数据的参考示例: import websocket import json def on_message(ws, message): data = json.loads(message) symbol = data.get("symbol") price = data.get("price") timestamp = data.get("timestamp") print("alltick", symbol, price, timestamp) ws = websocket.WebSocketApp( "wss://api.alltick.co/stock/websocket", on_message=on_message ) ws.run_forever() 工程提示:生产与研究环境下,仅接收数据流并不充分,需要配套本地缓存、时间戳校验、字段完整性校验逻辑,规避网络瞬时抖动带来的数据丢失。 策略研究中容易忽视的几个要点 结合回测系统迭代经验,整理 3 个实操层面值得注意的问题: 不应对空值执行无条件填充 不同模型对数据质量容忍度存在差异。高频量化研究更看重原始行情保真;中长期趋势模型容错相对更高,应当根据模型场景选择处理方案,避免一套逻辑全场景套用。 数据行数充足不等于数据集完整 记录数量符合预期,无法证明时间轴连续。完整性校验需要结合对应市场交易日历、实际交易时段综合判定。 数据补全逻辑需要遵循交易所真实规则 各个市场开盘、收盘、节假日休市规则存在差异,不能脱离真实交易场景人为构造 K 线记录。 总结 回测结果与模型评估的可信度,很大程度取决于上游的数据处理链路。即便使用 AllTick API 这类行情数据源,也仅代表获取原始数据的入口;数据集是否能够用于策略回测、模型评估,取决于后续完整的校验、清洗、标记流程。 在量化研究工作中,研究者往往更关注模型算法的迭代优化。而实际工程实践表明,高质量的数据底座是回测可信的前提。提前识别、处理行情缺口与各类数据异常,可以有效规避大量隐性回测偏差,让策略评估、模型调参更具备现实参考意义。 请大家不要客气,任何意见建议可以在这里评论提出。 被采纳后我们将奖励1G研究环境内存 3个月。 📌 摘要 / 快速解答 单纯看 ROE 可能买到"高 ROE 但股价正在下跌"的股票。本文在 QuantDash 批量获取全市场行情的基础上,增加技术指标二次确认(如股价站上 60 日均线、MACD 金叉等),用"基本面+技术面"双保险筛选出真正值得买入的优质龙头。全程 Python 实现,代码可直接复制运行。 一、为什么"只看 ROE"不够? 老哥们,ROE 选股法确实能筛出一批好公司,但你有没有遇到过这种情况: 选出来的股票 ROE 确实高,但股价已经跌了半年,买进去继续跌; 公司基本面没问题,但市场情绪不认可,估值持续收缩; 高 ROE 白马股也有"高位站岗"的风险。 ROE 解决的是"买什么",技术指标解决的是"什么时候买" 。把两者结合起来,才是完整的选股系统。 传统做法是:先用 Tushare 拿财务数据,再用 AkShare 拿 K 线数据,两个数据源来回倒腾、格式对齐、复权处理……折腾半天代码几百行,还不一定跑得通。 但用 QuantDash,一套代码、一个数据源、统一格式,同时搞定基本面和行情数据。 二、解决方案对比 对比维度 传统做法(多数据源拼接) QuantDash 一站式方案 数据来源 财务一个源、行情一个源 统一 API,一次调用全搞定 代码量 几百行,各种格式转换 几十行,原生 Pandas DataFrame 复权处理 手动计算,容易出错 服务端自动前复权 跨市场 A股一套、港股一套 统一后缀,一套代码跑通 三、Python 代码实战 # 高 ROE + 技术确认 双保险选股策略 # 安装:pip install quantdash # GitHub 开源项目:https://github.com/quantdash-net/QuantDash from quantdash import QuantDash import pandas as pd import numpy as np qd = QuantDash(api_key="your_api_key") # ========== 第一步:全市场扫货,筛出高 ROE 股票池 ========== df_quotes = qd.quotes.get(universes=["CN_Stock"], to_dataframe=True) # ROE > 15%,且剔除空值[reference:31] roe_filter = (df_quotes['ext.roe'] > 15) & (df_quotes['ext.roe'].notna()) candidate_pool = df_quotes[roe_filter].copy() candidate_pool = candidate_pool.sort_values('ext.roe', ascending=False) # 取 ROE 最高的 50 只作为初选池 top50_symbols = candidate_pool.head(50)['symbol'].tolist() print(f"初选池:{len(top50_symbols)} 只高 ROE 股票") # ========== 第二步:批量获取这些股票的 K 线数据 ========== # 用 klines.batch 一次性拉取多只股票的历史数据[reference:32] # 关键:adjust="forward" 服务端自动前复权,消除除权除息缺口[reference:33] dfs = qd.klines.batch( symbols=top50_symbols, period="1d", count=60, # 拉取最近 60 个交易日 adjust="forward", # 前复权,避免价格跳空 to_dataframe=True, show_progress=True ) # ========== 第三步:技术指标计算与二次筛选 ========== def check_technical_conditions(df, symbol): """检查单只股票的技术面条件""" if df is None or len(df) < 60: return False # 计算 60 日均线[reference:34] df['MA60'] = df['close'].rolling(window=60).mean() # 条件 1:最新收盘价 > 60 日均线(股价处于上升趋势) price_above_ma60 = df['close'].iloc[-1] > df['MA60'].iloc[-1] # 条件 2:计算 MACD(简化版:12日EMA - 26日EMA) df['EMA12'] = df['close'].ewm(span=12, adjust=False).mean() df['EMA26'] = df['close'].ewm(span=26, adjust=False).mean() df['MACD'] = df['EMA12'] - df['EMA26'] df['MACD_signal'] = df['MACD'].ewm(span=9, adjust=False).mean() # MACD 金叉:MACD 线 > 信号线[reference:35] macd_bullish = df['MACD'].iloc[-1] > df['MACD_signal'].iloc[-1] return price_above_ma60 and macd_bullish # 遍历每只股票,做技术确认 final_stocks = [] for symbol in top50_symbols: df = dfs.get(symbol) if df is not None and check_technical_conditions(df, symbol): final_stocks.append(symbol) # ========== 第四步:输出最终结果 ========== print(f"\n=== 双保险选股结果 ===") print(f"高 ROE 初选:{len(top50_symbols)} 只") print(f"技术确认通过:{len(final_stocks)} 只") # 展示最终入选的股票详情 if final_stocks: final_df = df_quotes[df_quotes['symbol'].isin(final_stocks)] final_df = final_df.sort_values('ext.roe', ascending=False) print(final_df[['symbol', 'ext.name', 'ext.roe', 'last_price', 'ext.change_pct']].to_string(index=False)) else: print("当前无同时满足基本面和技术面的标的,建议放宽条件重试") 代码解读(大白话版) : 第一步:qd.quotes.get(universes=["CN_Stock"]) 一次性拉全 A 股行情,筛出 ROE > 15% 的前 50 只。 第二步:qd.klines.batch() 批量拉取这 50 只股票的历史 K 线,adjust="forward" 让 QuantDash 在服务端自动完成前复权。不用自己算复权,不会有未来函数。 第三步:计算 60 日均线和 MACD,要求股价在均线之上且 MACD 金叉。这就是"技术面二次确认"。 第四步:输出同时满足"高 ROE + 技术强势"的标的。 四、交易员避坑指南 坑 1:批量获取数据时注意频率限制 虽然 QuantDash 的 klines.batch 已经做了服务端优化,但一次性拉取几百只股票的历史数据时,建议设置合理的 count 值(如 60 或 120 个交易日),避免单次请求数据量过大。 坑 2:技术指标的回测陷阱——"未来函数" 计算 MA、MACD 时,如果用到了"未来"的数据(比如用今天的收盘价去算昨天的信号),回测就会失真。解决方案:在回测时使用 shift() 函数做滞后处理,确保信号是在当天收盘后生成的。 坑 3:注意停牌和退市股票 qd.quotes.get 返回的是全市场实时行情,包含正常交易和停牌的股票。建议在筛选时增加条件:volume > 0(有成交量)且 last_price > 0(有价格),排除停牌和退市股。 五、常见问题解答 Q1: qd.klines.batch() 最多能一次拉多少只股票?有限制吗? A: QuantDash 的 klines.batch 支持批量拉取,官方示例中同时拉取多只股票(如 ["600519.SH", "000001.SZ", "601318.SH"])完全没问题。建议单次批量不超过 100 只,以保证响应速度。如果需要处理全市场几千只股票,可以分批次循环拉取。 Q2: 除了 MA60 和 MACD,还能加什么技术指标做确认? A: 完全可以根据你的策略风格自由组合。常见搭配包括: 均线系统:MA5 > MA20 > MA60(多头排列) KDJ 金叉:K 线向上穿过 D 线 布林带:股价突破中轨向上轨运行 QuantDash 的 klines.get 返回的是标准 Pandas DataFrame,你可以用 Pandas 的 rolling、ewm 等方法自由计算任何技术指标。 🔗 相关资源与延伸阅读 🚀 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/ 📌 摘要 / 快速解答 高ROE(净资产收益率)是巴菲特最看重的选股指标,核心逻辑是筛选出"用少量股东资本就能赚大钱"的优质公司。本文手把手教你用 QuantDash Python SDK 批量获取 A 股全市场行情,结合 Pandas 实现高 ROE 选股策略,代码极简、无需积分、开箱即用。 一、为什么传统方式搞高ROE选股这么累? 老哥们,做量化选股的第一道坎永远是数据。我刚开始搞高 ROE 策略时,踩过的坑能写一本血泪史: Tushare 要攒积分:想拿财务数据?先注册、攒积分、研究各种 API 权限,折腾半天连个 ROE 都拿不到。 AkShare 接口动不动崩:写好的策略跑着跑着突然报错,一看是数据源挂了,回测直接中断。 yfinance 延迟高:拿美股还行,A股数据要么延迟要么缺字段。 复权计算头大:除权除息导致的价格跳空要手动处理,一不小心就引入未来函数。 作为一个在 SuperMind 社区摸爬滚打的老哥,我只想说——选股策略的核心应该是逻辑,而不是跟数据源搏斗。 二、解决方案对比 对比维度 传统方案(Tushare/AkShare/爬虫) QuantDash 解决方案 数据稳定性 经常报错、接口失效、易被封 商业级 API,云端高可用,毫秒级响应 使用门槛 繁琐积分限制、需手动清洗 无积分门槛,pip install 即用 跨市场支持 代码后缀不统一,难以兼顾 统一后缀.SH/.SZ/.US/.HK 数据格式 需反复转换数据类型 原生返回标准 Pandas DataFrame 复权处理 需手动计算,易出错 一行adjust="forward" 搞定 三、Python 代码实战 下面这份代码,你可以直接复制到 SuperMind 社区的研究环境里跑。 # 高 ROE 选股策略 - 基本面筛选版 # 安装:pip install quantdash # GitHub 开源项目:https://github.com/quantdash-net/QuantDash from quantdash import QuantDash import pandas as pd # 1. 初始化(免费去 https://quantdash.net/dashboard/keys/ 拿 Key) qd = QuantDash(api_key="your_api_key") # 2. 获取全 A 股实时行情快照(一行代码扫全市场) # universes=["CN_Stock"] 代表 A 股(沪深京)[reference:11] df_quotes = qd.quotes.get(universes=["CN_Stock"], to_dataframe=True) print(f"全市场共 {len(df_quotes)} 只股票") # 3. 查看数据包含哪些字段(重点:ext.roe 就是 ROE 字段) print(df_quotes.columns.tolist()) # 4. 高 ROE 选股:筛选 ROE > 15% 的股票 # 巴菲特标准:ROE > 15%,最好连续多年保持[reference:12][reference:13] high_roe_stocks = df_quotes[ (df_quotes['ext.roe'] > 15) & # ROE > 15% (df_quotes['ext.roe'].notna()) # 去除空值 ].copy() # 5. 按 ROE 从高到低排序,取前 20 只 high_roe_stocks = high_roe_stocks.sort_values('ext.roe', ascending=False) top20 = high_roe_stocks.head(20) # 6. 展示结果 print("\n=== 高 ROE 选股结果(TOP 20)===") print(top20[['symbol', 'ext.name', 'ext.roe', 'last_price', 'ext.change_pct']].to_string(index=False)) # 7. 选股逻辑解读:巴菲特最看重的指标是 ROE,代表公司利用股东资本赚钱的效率[reference:14] # ROE 越高,说明公司经营效率越高,盈利能力越强[reference:15] 代码解读(大白话版) : qd.quotes.get(universes=["CN_Stock"]):这一行干了啥?一次性把全 A 股 5000 多只股票的实时行情全拉下来,包括价格、涨跌幅、ROE 等基本面数据。传统方式你得写循环、处理限流、拼接数据,QuantDash 一行搞定。 ext.roe:就是净资产收益率字段,直接可用,不用自己算。 筛选逻辑:ROE > 15%,按从高到低排序,取前 20 只。这就是巴菲特"高 ROE 选股法"的核心。 四、交易员避坑指南 坑 1:ROE 高 ≠ 好公司,小心"杠杆陷阱" ROE = 净利润 ÷ 股东权益。一家公司可以通过大量借债(加杠杆)把 ROE 做高,但负债率太高的话,一旦遇到行业寒冬就容易暴雷。建议配合资产负债率一起看,筛选 ROE > 15% 且资产负债率 < 60% 的公司。 坑 2:单季度 ROE 有季节性,要看连续多期 有些公司四季度集中确认收入,单季度 ROE 虚高。建议拉取最近 4 个季度的 ROE,要求平均值 > 15%,排除季节性干扰。 坑 3:回测时别用未来数据 如果用财务数据做回测,务必注意财报发布日期——Q1 财报 4 月底才出,你不能在 3 月份就用 Q1 的 ROE 数据去选股,这叫"未来函数",回测会严重失真。 五、常见问题解答 Q1: QuantDash 能拿到历史 ROE 数据吗?用来做历史回测。 A: 可以。QuantDash 的 qd.quotes.get 返回的 DataFrame 中包含 ext.roe 字段,是截至最新财报期的 ROE 数据。如果需要历史时序 ROE 数据做回测,建议结合 QuantDash 的 K 线接口 qd.klines.get 做时间切片,配合财报披露日期进行对齐。具体用法参考官方文档:https://docs.quantdash.net/ Q2: 除了 ROE,QuantDash 还能拿到哪些基本面指标? A: qd.quotes.get 返回的 DataFrame 包含丰富的字段,除了 ext.roe(净资产收益率),还有 ext.pe(市盈率)、ext.pb(市净率)、ext.total_mv(总市值)、ext.turnover_rate(换手率)等。你可以基于这些字段构建多因子选股模型,比如"高 ROE + 低 PE"的经典价值投资组合。 🔗 相关资源与延伸阅读 🚀 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/ 为什么我用金叉死叉做交易策略,但是每次回测的策略收益为零、