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%
突破类信号判定示意(依据四个策略源码整理,非官方图)。
依据来源官方 README · pyproject · .env.example
本页引用strategy/turtle_trade.py · ma_volume.py · high_tight_flag.py · rps_breakout.py
核验方式源码静态核验 + 本站实测(2026-10-10 在 Windows / Python 3.11.9 真机跑通安装、回填、日常运行与推送)
核验基准commit 444c0db(2026-05-09)· Python ≥3.10 · 2026-10-12 质检复核(含 2026-10-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) 简单均值标准日均线口径三条均线(ma5、ma20、vol_ma20)都用 rolling 计算,都包含当日这一根;与高窄旗形里按 iloc[-21:-1] 取「不含当日」均量的写法不同,对照源码时别混用
最小样本少于 20 根 K 线直接跳过次新股与数据不足的标的回填起始日期越早,可用标的越多
计算方式全部列向量化(rolling),不逐行遍历全市场逐只计算时的性能保障受影响的标的仍逐只读库,整体耗时与标的数量成正比
输出返回命中代码列表,日志记「MaVolumeStrategy 选出 N 只股票」对接飞书推送空清单不推送,只记日志
HighTightFlag

Sequoia-X 高窄旗形的第 4 个条件是什么?

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
边界声明:本站只整理源码里的判定条件与参数,不评价这些条件的历史有效性,也不提供任何胜率、收益或买卖建议。四个策略的输出都是候选清单,是否采用需由读者自行研究与判断。
Source check

源码逐条核对:README 和代码有什么不同?

README 只给概述,真正决定选出谁的是下面这几行。以下是 commit 444c0db 里的原样摘录(只删掉了日志与异常处理),四个文件逐一对照。

1. 海龟突破:shift(1) 排除了当日,一字板被阳线条件剔除

# sequoia_x/strategy/turtle_trade.py
df["high_20"] = df["high"].shift(1).rolling(20).max()   # shift(1):只跟前 20 个交易日比,不含当日
last, prev = df.iloc[-1], df.iloc[-2]

breakout = last["close"] > last["high_20"]        # 条件1 收盘价突破前 20 日最高价
liquid   = last["turnover"] > 100_000_000         # 条件2 成交额过亿(单位:元,原始成交额)
is_yang  = last["close"] > last["open"]           # 条件3 实体阳线
is_up    = last["close"] > prev["close"]          # 条件4 真涨,排除假阳线

shift(1) 是这份源码里最值得抄的一行:不加它,「前 20 日最高价」会把当日算进去,当日收盘价几乎不可能超过包含自己的最高价,条件会退化。另外注意条件 3 用的是严格大于——一字涨停(开=收)与平开平收都会被这一条剔掉,这也是它「防诱多」注释的实际含义。

2. 均线放量:新股不会误选,但会被静默跳过

# sequoia_x/strategy/ma_volume.py
df["ma5"]     = df["close"].rolling(5).mean()
df["ma20"]    = df["close"].rolling(20).mean()
df["vol_ma20"] = df["volume"].rolling(20).mean()

golden_cross = prev["ma5"] < prev["ma20"] and last["ma5"] > last["ma20"]   # 昨日在下、今日在上
volume_surge = last["volume"] > last["vol_ma20"] * 1.5                     # 当日量 > 20 日均量 1.5 倍

上市不足 20 个交易日的股票,ma20 是 NaN;Python 里 NaN 的比较恒为 False,所以它不会被误选,但也不会报错、不会进日志——「明明上市了却没结果」属于正常现象,不是数据坏了。

3. 高窄旗形:README 漏写的第 3 条在这里

# sequoia_x/strategy/high_tight_flag.py
momentum      = tail40["high"].max() / tail40["low"].min() > 1.6      # 强动量:40 日振幅 > 60%
consolidation = tail10["high"].max() / tail10["low"].min() < 1.15     # 收敛:近 10 日振幅 < 15%
high_level    = tail10["low"].min() >= tail40["high"].max() * 0.8    # README 未写:不得回落到 40 日高点的 80% 以下
vol_ma20      = df["volume"].iloc[-21:-1].mean()                      # 不含当日的前 20 日均量
shrink        = df["volume"].iloc[-1] < vol_ma20 * 0.6               # 缩量:今日量 < 均量 0.6 倍

四条里 README 只写了三条,high_level 是第四条——它把「强势股回踩太深」的情形排除在外。均量口径用的是 iloc[-21:-1](不含当日),与均线放量用的 rolling(20)(含当日)不是同一口径,跨策略比较放量倍数时要注意。

4. RPS 突破:判定是「接近 120 日高点」,不是「创新高」

# sequoia_x/strategy/rps_breakout.py
df = pd.read_sql("SELECT symbol, date, close, high FROM stock_daily", conn)   # 一次性读全表
df["close_shift"] = df.groupby("symbol")["close"].shift(120)                  # 120 个交易日前收盘
df["pct_change"]  = (df["close"] - df["close_shift"]) / df["close_shift"]
latest_df["rps"]  = latest_df["pct_change"].rank(pct=True) * 100              # 当日横截面排名

roll_high = df.groupby("symbol")["high"].rolling(120, min_periods=60).max()   # 窗口 120、最少 60 根
breakout  = strong_stocks["close"] >= strong_stocks["roll_high"] * 0.90       # 收盘 ≥ 120 日最高价的 90%

三处细节:①rps_threshold = 90 意味着只取当日涨幅排名前 10%;②突破条件带 0.90 系数,所以它是「强势且离 120 日高点不远」,客观上比「创 120 日新高」宽松;③min_periods=60 让上市满 60 个交易日的次新股也能进入判定,而按字面理解的「120 日高点」本该要求 120 根 K 线。

怎么用这一节:把上面四段与仓库里同名文件对一遍即可复核。本站核验方式为静态源码比对(commit 444c0db,16 个文件 sha256 一致),没有在本机运行过该项目,所以这里只讲「代码怎么写」,不讲「实盘表现如何」。
Reproduce

怎么验证某天的选股结果没算错

项目没有提供「复现当日结果」的命令,但复现路径很短:先确认库里最新日期,再用等价逻辑自己跑一遍,最后和日志计数对齐。下面四步是本站按源码等价写出的复现方法(教程扩展,非官方工具)。

  1. 先确认库里到底有几个交易日

    -- data/sequoia_v2.db
    SELECT MAX(date) AS latest, COUNT(DISTINCT date) AS days FROM stock_daily;

    拿 latest 和你以为的交易日对一下。不一致时先补数,否则后面所有对比都没有意义——策略读的是「最后一根 K 线」,不是「今天」。

  2. 用 SQL 看当日快照

    SELECT symbol, open, high, low, close, volume, turnover
    FROM stock_daily
    WHERE date = (SELECT MAX(date) FROM stock_daily)
      AND turnover > 100000000 AND close > open
    ORDER BY turnover DESC LIMIT 20;

    这只能筛出「成交额过亿 + 阳线」两个条件,20 日新高必须在同一只股票的连续序列上算,所以下一步用 Python。

  3. 用等价逻辑复算海龟突破

    import sqlite3, pandas as pd
    conn = sqlite3.connect("data/sequoia_v2.db")
    df_all = pd.read_sql("SELECT * FROM stock_daily ORDER BY symbol, date", conn)
    hits = []
    for symbol, df in df_all.groupby("symbol"):
        if len(df) < 21:
            continue
        df = df.copy()
        df["high_20"] = df["high"].shift(1).rolling(20).max()
        last, prev = df.iloc[-1], df.iloc[-2]
        if (last["close"] > last["high_20"] and last["turnover"] > 1e8
                and last["close"] > last["open"] and last["close"] > prev["close"]):
            hits.append(symbol)
    print(len(hits), hits[:10])

    这段是 turtle_trade.py 的等价重写:条件顺序、边界(21 根 K 线)都保持一致。数量应当与日志里 TurtleTradeStrategy 选出 N 只股票 的 N 相同。

  4. 对齐计数、留下快照

    # 1) 日志里每个策略都有一行结果
    grep -E "Strategy 选出" logs/*.log | tail -10
    # 2) 存档当日库文件,便于以后复核
    cp data/sequoia_v2.db "data/sequoia_v2.$(date +%F).bak"

    数量对不上时,先查三处:库内最新日期、是否有整只股票被 volume = 0 过滤、以及那一天的推送是否因 Webhook 失败而没出现在群里(日志会留 ERROR)。

一个耗时常量:海龟突破命中后会对每只候选再单独查一次 baostock 取流通市值排序(_get_market_caps() 里逐只 query_history_k_data_plus)。命中几十只时这一步会明显拉长运行时间,属于源码行为而不是网络故障。
Failure cases

突破类信号有哪些失效场景?

「今天选出来了」和「这个规则有用」是两件事。下表每一条的机制都能在上一节的代码里找到出处。

场景机制(对应代码)怎么发现怎么处理
假突破只用当日收盘价与前 20 日高点比较,没有「站稳」确认;次日跌回箱体照样算命中把命中票按次 1 / 3 / 5 日收益分组,看中位数是否还在 0 以上把确认条件(如次日不破当日低点)显式加进规则后重新验证,而不是默认有效
一字板与平开平收被剔除条件 3 是 close > open,一字涨停(开=收)与十字星都不满足看某只票当天明明涨停却没出现在结果里这是设计取向不是缺陷;要抓一字板必须另写策略,并自行承担买不到的风险
涨停当天无法在收盘价成交信号由收盘价算出,理论上最早次日成交;涨停封板的票次日高开概率高回测里用信号日收盘价买入,收益会显著好于次日开盘买入回测统一按次日开盘价成交,并单独统计滑点影响
1 亿成交额门槛对不同价位股票不等价turnover > 100_000_000 是固定金额门槛,高价股与低价股对应的换手强度不同看命中票的成交额分布,是否长期被同一类高价股占据把成交额换成换手率或成交额/流通市值再验证,库内没有换手率字段需另取
次新股样本不足被静默跳过海龟要求 ≥21 根、旗形 ≥40 根、上升趋势跌停 ≥60 根 K 线,不足直接 continue统计库内每只股票的 K 线根数分布知道这是「样本不够」而非「条件不符」;回填起始日期越早,样本越完整
高窄旗形几乎长期零命中四条同时成立:40 日涨幅 > 60%、近 10 日振幅 < 15%、不得回落到高点 80% 以下、当日缩量到均量 0.6 倍连续观察多日该策略的命中数把它当成低频事件而不是日常信号;零命中时先核对库内数据日期,再考虑是否需要放宽
RPS 结果随库体积变慢、变吃内存该策略 pd.read_sql 一次读全表并 groupby,库越大越重观察日常模式耗时随回填区间拉长的变化缩小回填起点、或把 RPS 挪到单独任务;不要把它当成「代码有 bug」
共同点:这些都是「阈值 + 单日快照」类方法的固有代价。任何把形态写成固定数字的选股规则,都要自己回答「假突破怎么办、成交能不能发生、样本够不够」。所以本站给出的是验证路径,而不是有效性结论——不构成投资建议,任何策略都应经过独立回测与样本外验证。
Execution lag

信号不等于买点:为什么最快也只能次日成交?

这一页讲的所有条件都用「当日收盘价」判定。也就是说,信号只有在收盘之后才存在——你不可能用产生信号的同一根 K 线的收盘价成交。任何回测如果不处理这个时间差,结果都是假的。

时点此刻你知道了什么能做什么 / 不能做什么
交易日 14:50不知道今天会不会触发条件(收盘价未定)不能当作「信号已知」。用盘中价硬判条件属于未来函数
交易日 15:00 收盘条件成立与否此刻确定已经无法成交——A 股当日收盘后不再接受委托
收盘后(本项目 19:15 触发)名单推送出来只能等下一个交易日
下一交易日 09:30 开盘——这是最早的可成交时点。常见假设三选一:次日开盘价 / 次日均价 / 次日收盘价
下一交易日之后——如果次日一字涨停或停牌,可能根本买不到;回测里必须显式处理「买不到」
数据事实(本站实测)读数对回测的含义
相邻交易日的自然日间隔667 个间隔中,142 个(21.3%)间隔 ≥ 3 天;最长 11 天(国庆长假)「次日成交」在周五信号与长假前信号上,实际是等 3~11 个自然日,价格跳空风险全部由你承担
库内最新日期2026-10-09(周五),策略输出全部基于该日收盘回测必须补入信号日之后的数据才能算收益,只用库内数据会得到「零持有期」的假结果
停牌日的处理入库前过滤 volume = 0,停牌日不写库「下一根 K 线」不等于「下一个交易日」。按 iloc[-1] 取「今天」时,停牌股会拿到更早的日期
  1. 四条只有收盘后才成立的判定(源码原文对应)

    last = df.iloc[-1]        # 最后一根 K 线 = 信号日
    prev = df.iloc[-2]
    breakout = last["close"] > last["high_20"]      # 用收盘价比较历史最高价
    liquid   = last["turnover"] > 100_000_000       # 用当日全天成交额
    is_yang  = last["close"] > last["open"]         # 用当日收盘价判实体
    golden   = prev["ma5"] < prev["ma20"] and last["ma5"] > last["ma20"]  # 用收盘价算均线

    全部依赖 close。所以回测里的成交价必须取 df.iloc[-1] 之后那一根 K 线的 open / (high+low)/2 / close,而不是 last["close"]。

  2. 最小验证实验:六步,不用写策略代码

    -- 1) 先固定信号日集合(用库里的真实日期,不要用自然日)
    SELECT DISTINCT date FROM stock_daily ORDER BY date DESC LIMIT 40;
    
    -- 2) 对每个信号日、每只票,取出「信号日」与「下一个有数据的交易日」
    --    注意:要用交易日序列的自连接,不能用 date + 1
    WITH seq AS (
      SELECT symbol, date, open, close,
             LEAD(date) OVER (PARTITION BY symbol ORDER BY date) AS next_date,
             LEAD(open) OVER (PARTITION BY symbol ORDER BY date) AS next_open,
             LEAD(close) OVER (PARTITION BY symbol ORDER BY date) AS next_close
      FROM stock_daily)
    SELECT * FROM seq WHERE next_date IS NOT NULL LIMIT 20;

    然后按「信号日收盘 → 次日开盘」「信号日收盘 → 次日均价」「信号日收盘 → 次日收盘」三种口径各算一次区间涨跌幅,把三个数字并列摆出来。三个结果的差距,就是你「用了哪个假设」的价格。再从中扣掉佣金(双边)、印花税(卖出)与你估计的滑点,才是可比较的净口径。

  3. 失败案例的四种典型形态(写验证报告时要能对上号)

    形态为什么会产生(对应本页哪个条件)怎么在验证里识别
    假突破收盘价刚过 20 日高点一点,次日直接跌回区间内看「信号日收盘价 / 20 日高点」的超出比例分布,超出 <1% 的那批单独统计
    放量诱多成交额过亿且收阳,但换手来自一次性事件(解禁、大宗、公告)把信号日与前后 5 日的成交额做对比,只有单日尖峰的样本单列
    买不到次日一字涨停或停牌,回测按开盘价成交是虚的统计次日 open == high == low(一字板)与次日无数据的样本占比
    风格切换形态本身没问题,但整个板块进入下跌,个股被拖下去把样本按信号日分组统计,若同一天抓出的票普遍同向,说明是市场因子而非形态
  4. 写结论时的三条纪律

    ①不写收益率,除非你有完整的次日成交口径、成本与样本外区间;②不写胜率,除非样本量、持有期、止损规则都写明;③任何结论都要标出「用了哪天的数据、哪只标的池、哪个版本的规则」。这三条不是保守,是让结论能被别人复核的基本前提——Sequoia-X 本身没有回测引擎,也没有官方胜率数据(依据:仓库无 backtest 模块,②级)。

一句话总结:选股信号只说明「昨天收盘时这些票满足条件」,不说明「今天买它是对的交易」。前者是程序可以保证的,后者需要成本、滑点、样本外的一整套验证——本项目不提供,本站也不替你猜。
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 命中数量很少是不是坏了?

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

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

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

我怎么确认某一天的选股结果没算错?

用本页的复现四步:先查 MAX(date),再用等价逻辑复算海龟突破,和日志里 TurtleTradeStrategy 选出 N 只股票 对齐计数。数量不一致时优先怀疑「库内最新日期与目标交易日不一致」,其次查 volume = 0 被过滤与推送失败。复现脚本是本站按源码等价重写的教程扩展,不是官方命令,以官方源码为准。

四个突破策略,先试哪个比较合适?

看你能接受多少噪声:均线放量门槛最低、信号最多(20 日均量 1.5 倍 + 金叉),适合先跑通流程;海龟突破多一道 1 亿成交额与阳线过滤,命中更少但更贴近「放量突破」的直觉;高窄旗形四条同时成立、低频到可能连续多日零命中;RPS 依赖一次全表读取,库越大越慢。四者都只是候选清单生成器,不含买卖点,选择依据应是你能验证多少,而不是命中多少。

看完突破,接下来看哪些反转与事件类信号?

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