Sequoia-X 项目研究站 · 反转信号
Sequoia-X 反转信号:洗盘、跌停反包与定增事件
另外三个策略走的是与突破相反的方向:涨停洗盘要求昨天刚涨停、今天放量收阴却守住昨收;上升趋势跌停要求在 MA20 高于 MA60 的多头结构里出现放量跌停;定增公告监控则完全离开 K 线,去拉东方财富的增发数据筛最近七天的定向增发。三者的数据来源不同,能不能离线复现也不一样,这决定了出问题时要查哪一环。
Sequoia-X 三套信号的横向对照
先看清哪些读本地库、哪些要走网络,再逐条看阈值。
| 策略类 | 核心判定 | 数据来源 | 最少 K 线 | webhook_key |
|---|---|---|---|---|
| LimitUpShakeout | 昨日涨停 + 今日收阴 + 今日放量 2 倍 + 不破昨收 | 本地 SQLite 日 K | 3 根 | shakeout |
| UptrendLimitDown | 昨日 MA20 > MA60 + 今日跌停 + 今日放量 2 倍 | 本地 SQLite 日 K | 60 根 | limit_down |
| PrivatePlacement | 最近 7 天内的定向增发公告 | akshare 东财增发接口(在线) | 不依赖 K 线 | private_placement |
| 能否离线复现 | 前两个只要本地库里有数据就能重算 | — | — | 第三个每次都要联网取公告 |
| 命中波动 | 前两个随行情与阈值变化,通常命中极少 | — | — | 第三个随公告发布节奏波动 |
| 异常处理 | 前两个单只失败写 warning 跳过 | — | — | 第三个接口报错时记 error 并返回空列表 |
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] 取三行 | 定位「前日 / 昨日 / 今日」 | 前提是数据已更新到「今日」,否则这里的三根是历史的前三根 |
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,新上市标的可能长期不满足 |
| 输出 | 返回命中代码列表并记日志 | → 飞书卡片推送 | 源码未做额外排序,清单顺序来自本地库遍历 |
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 线长度。所以即使你还没回填数据,它也可能有输出;反过来,本地库很新也不会让它命中更多。排查时先分清这条差异。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 个策略 | 评估能力或做二次开发时 | 本站按代码口径为准,并在页面上明示差异 |
Sequoia-X 策略的数据依赖与复现难度
决定「今天没结果」到底是行情原因还是数据原因。
| 策略 | 依赖本地 SQLite | 依赖外部接口 | 离线可复现 | 排查方向 |
|---|---|---|---|---|
| 涨停洗盘 | 是(最近 3 根) | 否 | 可以 | 先看数据是否更新到当日 |
| 上升趋势跌停 | 是(≥60 根) | 否 | 可以 | 看历史长度是否满足 60 根 |
| 定增监控 | 否 | 是(akshare 增发接口) | 不可以 | 看日志里是否有取数失败 |
| 突破类(对照) | 是 | 海龟策略会额外连 baostock 查市值 | 基本可以 | 市值查询失败会影响排序 |
| 推送环节 | 否 | 是(飞书 Webhook) | 不可以 | 看 code != 0 与 ERROR 日志 |
| 共同前提 | 库中存在该标的的行记录 | — | — | 未上市或长期停牌标的可能不在清单里 |
反转与事件类常见问题
为什么涨停阈值写 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 键也按同样数量给出。具体接法见新增策略页。