Sequoia-X 项目研究站 · 反转信号

Sequoia-X 反转信号:洗盘、跌停反包与定增事件

另外三个策略走的是与突破相反的方向:涨停洗盘要求昨天刚涨停、今天放量收阴却守住昨收;上升趋势跌停要求在 MA20 高于 MA60 的多头结构里出现放量跌停;定增公告监控则完全离开 K 线,去拉东方财富的增发数据筛最近七天的定向增发。三者的数据来源不同,能不能离线复现也不一样,这决定了出问题时要查哪一环。

策略形态:两个读本地库 + 一个走网络接口输出:命中股票代码清单依据三个策略源码(2026-09 核验)
涨停洗盘昨日涨停 + 今日放量收阴不破昨收
上升趋势跌停MA20 > MA60 + 放量跌停
定增监控akshare 东财增发,取最近 7 天
反转与事件类信号示意(依据三个策略源码整理,非官方图)。
Overview

Sequoia-X 三套信号的横向对照

先看清哪些读本地库、哪些要走网络,再逐条看阈值。

策略类核心判定数据来源最少 K 线webhook_key
LimitUpShakeout昨日涨停 + 今日收阴 + 今日放量 2 倍 + 不破昨收本地 SQLite 日 K3 根shakeout
UptrendLimitDown昨日 MA20 > MA60 + 今日跌停 + 今日放量 2 倍本地 SQLite 日 K60 根limit_down
PrivatePlacement最近 7 天内的定向增发公告akshare 东财增发接口(在线)不依赖 K 线private_placement
能否离线复现前两个只要本地库里有数据就能重算第三个每次都要联网取公告
命中波动前两个随行情与阈值变化,通常命中极少第三个随公告发布节奏波动
异常处理前两个单只失败写 warning 跳过第三个接口报错时记 error 并返回空列表
LimitUpShakeout

Sequoia-X 涨停洗盘:四条件锁定「洗而不破」

sequoia_x/strategy/limit_up_shakeout.py,只看最近三根 K 线。

条件源码判定适用场景注意点
昨日涨停prev1["close"] >= prev2["close"] × 1.095识别前一日的涨停用 9.5% 作为近似阈值,不是按板块分别取 10%/20%/30% 的上限
今日收阴today["close"] < today["open"]确认出现回调只看实体方向,不限制跌幅远近
今日放量today["volume"] > prev1["volume"] × 2.0确认换手充分基准是「昨日成交量」而非均量,与另一个跌停策略的口径不同
支撑不破today["low"] >= prev1["close"]要求不跌穿昨日收盘价这是「洗盘」与「破位」的分界条件,也是四个条件里最严的一条
最小样本少于 3 根 K 线跳过理论上门槛最低的策略虽然只要 3 根,但四条件同时成立的标的通常很少
读取方式df.iloc[-3] / [-2] / [-1] 取三行定位「前日 / 昨日 / 今日」前提是数据已更新到「今日」,否则这里的三根是历史的前三根
UptrendLimitDown

Sequoia-X 上升趋势跌停:先确认多头结构

sequoia_x/strategy/uptrend_limit_down.py,需要 60 日均线,所以最小样本是 60 根。

条件源码判定适用场景注意点
趋势前提昨日 ma20 > ma60只在这种结构里找跌停用昨日均线而非今日,避免当日暴跌污染均线判断
跌停today["close"] <= prev["close"] × 0.905捕捉当日大幅下挫同样是 9.5% 的近似口径,与涨停洗盘对称
放量today["volume"] > today["vol_ma20"] × 2.0要求放量而非缩量下跌这里用 20 日均量做基准,与涨停洗盘用昨日量不同,改阈值时别串了
NaN 处理均线为 NaN 时 continue 跳过该股数据不足 60 根时不会报错,只是静默跳过;命中为零时先确认库里的历史长度
最小样本少于 60 根直接跳过四个策略里门槛最高的之一默认起始日期为 2024-01-01,新上市标的可能长期不满足
输出返回命中代码列表并记日志→ 飞书卡片推送源码未做额外排序,清单顺序来自本地库遍历
PrivatePlacement

Sequoia-X 定增监控:不走本地 K 线的策略

sequoia_x/strategy/private_placement.py,逻辑是「取公告 → 过滤 → 取最近 7 天 → 去重」。

步骤源码实现适用场景注意点
取数akshare.stock_qbzf_em()(东方财富-全部增发)需要全量增发公告清单策略里只有它依赖外部在线接口,接口不可用时记 error 并返回空列表
只看定向增发发行方式 == "定向增发"排除公开增发字段名与取值依赖接口返回结构,akshare 版本变化时需复核
时间窗口_LOOKBACK_DAYS = 7,取发行日期在最近 7 天内的记录覆盖一周内新公告按「发行日期」而非「公告日期」过滤,两者口径可能不同
排序按发行日期降序(最新的在前)推送时先看最新公告异常日期会被 dropna 剔除
代码提取正则 (\d{6}) 从「股票代码」列抓 6 位数字去掉可能的市场前缀抓不到 6 位数字的记录被丢弃
去重同一只股票多次定增只保留首次出现避免同一标的重复推送去重后的顺序仍按发行日期降序
它不读本地库:这个策略既不查 stock_daily,也不要求任何 K 线长度。所以即使你还没回填数据,它也可能有输出;反过来,本地库很新也不会让它命中更多。排查时先分清这条差异。
Doc drift

Sequoia-X 的 README 写 6 个、代码里有 7 个

这是仓库当前真实存在的文档与代码差异,买账前先知道。

位置写的是什么适用场景注意点
README 内置策略表列出 6 个策略(海龟、均线放量、高窄旗形、涨停洗盘、上升趋势跌停、RPS)快速了解项目能力表格里没有定增公告策略
main.py 策略列表实例化并注册 7 个策略,含 PrivatePlacementStrategy看实际会跑哪些导入区与列表区两处都能看到它
策略目录sequoia_x/strategy/ 下有 7 个策略文件 + base.py核对策略总数以文件与 main.py 为准,README 表可能是遗留内容
推送配置示例.env.example 里给出 7 个 STRATEGY_WEBHOOK_*配置分群路由PRIVATE_PLACEMENT,与代码的 7 个策略一致
影响只读 README 的人会以为只有 6 个策略评估能力或做二次开发时本站按代码口径为准,并在页面上明示差异
Dependencies

Sequoia-X 策略的数据依赖与复现难度

决定「今天没结果」到底是行情原因还是数据原因。

策略依赖本地 SQLite依赖外部接口离线可复现排查方向
涨停洗盘是(最近 3 根)可以先看数据是否更新到当日
上升趋势跌停是(≥60 根)可以看历史长度是否满足 60 根
定增监控是(akshare 增发接口)不可以看日志里是否有取数失败
突破类(对照)海龟策略会额外连 baostock 查市值基本可以市值查询失败会影响排序
推送环节是(飞书 Webhook)不可以code != 0 与 ERROR 日志
共同前提库中存在该标的的行记录未上市或长期停牌标的可能不在清单里
FAQ

反转与事件类常见问题

为什么涨停阈值写 9.5%?

源码用的是 1.095 的近似系数来判断涨停与跌停,并没有按主板 10%、创业板与科创板 20%、北交所 30% 分别取上限。这是代码的实际实现,具体阈值以仓库源码为准。

定增监控会依赖本地数据吗?

不会。它调用 akshare 的增发接口拿公告数据,再按发行方式与发行日期过滤,不读本地 SQLite。所以未回填数据时它也可能有输出,反之本地库再新也不会让它多命中。

两个策略的「放量 2 倍」基准一样吗?

不一样。涨停洗盘用的是「昨日成交量 × 2」,上升趋势跌停用的是「20 日均量 × 2」。口径不同意味着同一只股票在两个策略里的放量判定结果可能相反,调整参数时要分别确认。

Sequoia-X 跳过的股票会在日志里体现吗?

会。逐只计算时若抛异常会写一条带股票代码的 WARNING 日志;均线为 NaN 或 K 线不足的情况则直接跳过、不出现在结果里。命中为零时建议同时检查 warning 行与本地数据长度。

Sequoia-X 这三个策略适合什么场景?

前两个偏「趋势中的异常下跌」识别,适合把候选清单交给人工判断;第三个是公告事件监控,更接近信息提醒。三者都只是候选清单,项目不提供任何买点或价格预测,也不对策略有效性作承诺。

以后会新增策略吗?

源码结构允许:新增一个继承 BaseStrategy 的类并注册到 main.py 的策略列表即可,.env.example 的 webhook 键也按同样数量给出。具体接法见新增策略页。

想换成自己的条件?

策略契约只有四步:继承基类、实现 run、设 webhook_key、注册到 main.py。