Sequoia-X 项目研究站 · 突破信号

Sequoia-X 突破信号:四套条件的阈值逐条摊开

四个突破类策略覆盖不同的入场逻辑:海龟突破盯 20 日新高并要求成交额过亿,均线放量盯 MA5 上穿 MA20 且量能放大到 1.5 倍,高窄旗形先要求 40 日出现强动量、再看最近 10 天是否极度收敛并缩量,RPS 突破则在全市场做 120 日涨幅排名、只取前 10% 且接近区间高点的那批。下面每一条都对着源码,标出最小 K 线数、排序规则和想改阈值该动哪一行。

策略形态:Python 类 + 向量化计算输出:命中股票代码清单依据四个策略源码(2026-09 核验)
海龟突破20 日新高 + 成交额过亿
均线放量MA5 上穿 MA20 + 1.5 倍量
高窄旗形40 日 1.6 倍 + 10 日收敛 1.15 倍
RPS 突破120 日相对强度前 10%
突破类信号判定示意(依据四个策略源码整理,非官方图)。
Overview

Sequoia-X 四套突破条件的横向对照

先看它们各自要多少根 K 线、命中后怎么排序,再逐条看细节。

策略类核心判定最少 K 线webhook_key命中后排序
TurtleTrade突破前 20 日最高价 + 成交额过亿 + 阳线且真涨21 根turtle按流通市值降序
MaVolumeMA5 上穿 MA20 金叉 + 放量 1.5 倍20 根ma_volume源码未另行排序
HighTightFlag40 日强动量 + 10 日极度收敛 + 高位抗跌 + 缩量40 根flag源码未另行排序
RpsBreakout120 日涨幅全市场排名前 10% + 靠近 120 日高点滚动最高按 60 根起算rps按 RPS 过滤后输出
共同数据源前三个走 engine.get_ohlcv(symbol) 逐只读本地 SQLite第四个例外,见下文
异常处理单只股票计算失败写 WARNING 日志后跳过,不影响其他标的
数据频率全部基于日 K(后复权)计算,不使用分钟数据
TurtleTrade

Sequoia-X 海龟突破:20 日新高 + 流动性门槛

sequoia_x/strategy/turtle_trade.py,四条件同时成立才入选。

条件源码判定适用场景注意点
突破新高last["close"] > last["high_20"],其中 high_20 = high.shift(1).rolling(20).max()捕捉放量突破形态窗口先 shift(1) 再滚动,比较基准不含当日,避免「自己突破自己」
流动性last["turnover"] > 100_000_000(成交额过亿)过滤成交清淡标的阈值写死在源码里;想放宽就改这个数字,同时会影响命中数量
实体阳线last["close"] > last["open"]拒绝高开低走的大阴线源码注释写明这是为拒绝「郑州煤电式」诱多走势加的防守条件
真涨last["close"] > prev["close"]排除假阳线(收盘仍在昨收之下)与上一条同时成立才算,两条都在源码里
流通市值排序对命中标的按流通市值降序让大市值标的排在前面四个策略里只有它会额外联网:用 baostock 不复权数据(adjustflag="3")现场算流通市值
流通市值算法流通股本 = 成交量 ÷(换手率 ÷ 100);流通市值 = 流通股本 × 不复权收盘价缺少市值数据时的替代算法换手率为 0 或解析失败时该股不参与排序(取默认 0)
MaVolume

Sequoia-X 均线放量:金叉当日必须有量能确认

sequoia_x/strategy/ma_volume.py,两个条件同时成立。

条件源码判定适用场景注意点
金叉昨日 ma5 < ma20 且今日 ma5 > ma20捕捉趋势由弱转强的时点必须用「昨天在下、今天在上」两行数据判断,只看今天无法确认是穿越而非持续在上
放量volume > vol_ma20 × 1.5(20 日均量的 1.5 倍)要求资金配合,过滤无量金叉倍数写死在源码中,改 1.5 会显著影响命中数量
均线口径收盘价的 rolling(5)rolling(20) 简单均值标准日均线口径三条均线(ma5ma20vol_ma20)都用 rolling 计算,都包含当日这一根;与高窄旗形里按 iloc[-21:-1] 取「不含当日」均量的写法不同,对照源码时别混用
最小样本少于 20 根 K 线直接跳过次新股与数据不足的标的回填起始日期越早,可用标的越多
计算方式全部列向量化(rolling),不逐行遍历全市场逐只计算时的性能保障受影响的标的仍逐只读库,整体耗时与标的数量成正比
输出返回命中代码列表,日志记「MaVolumeStrategy 选出 N 只股票」对接飞书推送空清单不推送,只记日志
HighTightFlag

Sequoia-X 高窄旗形:README 只提到三个条件

sequoia_x/strategy/high_tight_flag.py,注意第 3 条没有出现在 README 的描述里。

条件源码判定适用场景注意点
强动量过去 40 天 high40 / low40 > 1.6(区间振幅超 60%)先确认有过一波拉升区间最低价为 0 的记录会被跳过,避免除零
极度收敛最近 10 天 high10 / low10 < 1.15(振幅低于 15%)确认已经进入窄幅整理窗口是最近 10 根 K 线,横盘时间长短直接影响命中
高位抗跌(README 未提)low10 >= high40 × 0.8确保整理发生在高位而不是回落途中这条是形态成立的关键,去掉它会把「跌下来横住」也算进旗形
缩量今日成交量 < 前 20 日均量的 0.6量能收敛确认均量用 iloc[-21:-1] 取值,不含当日;想确认口径要对着源码看切片
最小样本少于 40 根 K 线跳过保证 40 日窗口有值四个条件里门槛最高,通常是命中数量最少的策略之一
排序源码未按振幅或涨幅排序,按遍历顺序输出需要排序时自行在推送侧处理服务端不做二次加工,清单顺序等于本地库遍历顺序
RpsBreakout

Sequoia-X RPS 突破:直连数据库的策略

sequoia_x/strategy/rps_breakout.py,它不走 engine.get_ohlcv,而是一次性读全表。

环节源码实现适用场景注意点
取数sqlite3.connect(engine.db_path) + pd.read_sql("SELECT symbol, date, close, high FROM stock_daily")需要全市场横向排名只取四列,是它与逐只读库策略主要的实现差异
涨幅窗口rps_period = 120,按 symbol 分组 shift(120) 后算涨跌幅欧奈尔式相对强度口径只有单个交易日的数据时算不出涨幅,会被 dropna 剔除
排名对最新交易日做横截面 rank(pct=True) × 100,取 >= 90只保留全市场相对强度排名最靠前的一档阈值 rps_threshold = 90 是可改类属性,放宽会明显增加命中数
接近高点close >= roll_high × 0.90,滚动最高 min_periods = 60排除已经明显回落的强势股这是「允许距离高点 10% 以内」,不是严格创新高
排序按最新交易日筛选后输出 symbol 列表结果已是强势股集合与海龟策略不同,这里不做市值排序
空库行为读取失败记 error 并返回空列表;数据为空同样返回空未回填就跑日常模式时不会抛异常中断主流程,但会静默没有结果,需对照日志判断
性能提示:RPS 每次都把 stock_daily 全表读进内存做分组计算。库越大内存占用越高,这是它与其他策略在资源表现上的主要区别;数据量增长后如果出现内存压力,先看这一条。
Tuning

想调 Sequoia-X 阈值:放宽或收紧改哪里

阈值全部写在策略源码里,没有配置文件;改完需要重新运行日常模式生效。

想达到的效果改哪个值直接后果注意点
海龟命中更多下调成交额阈值 100_000_000,或放宽 rolling(20) 窗口纳入更多小成交额标的只改数字不改比较符时,注意别把阳线与真涨条件一起删掉
均线放量更敏感把放量倍数 1.5 调低无量金叉也会入选这就是「量能确认」这道门槛的作用,改之前先想清楚
旗形更容易成型把 10 日振幅上限 1.15 或 40 日动量下限 1.6 放宽更多整理形态被纳入高位抗跌条件 low10 >= high40 × 0.8 也应同步复核
RPS 门槛放松下调 rps_threshold(当前 90)从「前 10%」放宽到更大比例改动只影响排名门槛,窗口长度仍是 120 日
策略被临时停用main.py 的策略列表里移除该行该策略不再执行与推送这属于结构性改动,建议在版本管理下进行,便于回溯
历史窗口不足调小 START_DATE 后重跑回填可用标的与窗口值都增加回填耗时随区间拉长上升,且默认起始日期为 2024-01-01
边界声明:本站只整理源码里的判定条件与参数,不评价这些条件的历史有效性,也不提供任何胜率、收益或买卖建议。四个策略的输出都是候选清单,是否采用需由读者自行研究与判断。
FAQ

突破信号常见问题

Sequoia-X 的策略条件会随版本变化吗?

会。阈值目前全部硬编码在策略源码里(如 1 亿成交额、1.5 倍量、1.6 与 1.15 的振幅比、90 的 RPS 门槛、120 的窗口),项目 V2 是一次重写,后续版本可能调整。以仓库当前源码为准。

Sequoia-X 四个策略会同时命中同一只股票吗?

会。策略之间相互独立、各自返回清单,main.py 按顺序执行并分别推送,源码没有做跨策略去重或合并。同一只股票同时出现在多条飞书卡片里属于正常现象。

Sequoia-X 为什么高窄旗形多一个条件?

README 只写了强动量、极度收敛和缩量三条,源码里还有一条「近 10 日最低价不低于 40 日最高价的 80%」的高位抗跌判断。按源码为准,本站把这条如实补上。

Sequoia-X 的 RPS 为什么直接读整张表?

因为相对强度需要全市场横截面排名:rank(pct=True) 只有在拿到所有股票的同期涨幅之后才有意义。逐只读库无法完成横向比较,所以它用 pd.read_sql 一次取全表。

Sequoia-X 命中数量很少是不是坏了?

不一定。四个策略的门槛本身较严,且当日行情不匹配时命中为零很正常——源码在空清单时只记日志不推送。判断是否异常应看日志里每个策略的结果行是否有输出、以及数据是否已更新到当日。

这些信号能直接拿去下单吗?

不建议,也不在本项目范围内。项目没有回测引擎、没有实盘下单、没有止损与仓位管理,输出仅是收盘后的候选清单。本站不对任何信号的有效性作承诺,所有内容仅供研究参考。

看完突破,再看反转与事件类信号

另外三个策略针对的是涨停洗盘、上升趋势中的跌停错杀,以及定增公告事件。