Published on

威科夫SOS信号筛选:从数据到决策的完整流程

Authors

威科夫SOS信号筛选:从数据到决策的完整流程

问题:如何在5000只股票中找到3只值得关注的股票?

今天(2026-04-08),威科夫扫描器分析了500+只股票,最终筛选出3只SOS信号:

  • 艾森股份(688720) - A级,+15.28%,量比3.3倍
  • 春秋电子(603890) - A级,+10.01%,量比4.2倍
  • 润本股份(603193) - B级,+5.64%,量比3.3倍 本文将深度解析这个筛选过程,揭示威科夫操盘法如何用Python实现自动化选股。

第 1 步:数据获取 - 如何获取 500+只股票的实时数据

1.1 数据源选择

问题:东方财富、新浪财经、腾讯财经...选哪个? 权衡

  • 速度:新浪最快(0.5 秒/只),东方财富次之(1 秒/只),腾讯最慢(2 秒/只)
  • 稳定性:新浪最稳(99.9%),东方财富次之(99%),腾讯最不稳定(95%)
  • 数据质量:东方财富最全(10 年历史),新浪次之(5 年),腾讯最差(3 年) 结论优先新浪,失败时降级到东方财富

1.2 多数据源架构

# 数据源优先级
DATA_SOURCES = [
    {'name': 'sina', 'priority': 1, 'timeout': 5},
    {'name': 'eastmoney', 'priority': 2, 'timeout': 10},
]
def fetch_with_fallback(code):
    for source in DATA_SOURCES:
        try:
            data = fetch_from_source(code, source)
            if data:
                return data, source['name']
        except:
            continue
    return None, None

关键设计

  • 自动故障切换:新浪失败 → 自动尝试东方财富
  • 超时保护:5 秒无响应 → 切换数据源
  • 数据源记录:每只股票记录使用的数据源

第 2 步:初筛过滤 - 如何缩小候选范围

2.1 为什么不是 5000 只?

问题:A 股有 5000+只股票,全部扫描太慢(10 分钟) 解决:初筛过滤到 500 只

2.2 过滤规则

硬指标

  1. 股价 > 3 元(排除 ST 股、仙股)
  2. 日成交额 > 5000 万(排除僵尸股)
  3. 市值 < 500 亿(排除大盘股,波动小)
  4. 非新股(上市 > 60 天) 代码实现
def preliminary_filter(all_stocks):
    filtered = []
    for stock in all_stocks:
        if (stock['price'] > 3 and
            stock['amount'] > 50000000 and
            stock['market_cap'] < 50000000000 and
            stock['days_listed'] > 60):
            filtered.append(stock)
    return filtered

效果

  • 扫描时间:10 分钟 → 2 分钟
  • 候选数量:5000 只 → 500 只
  • 信号质量:显著提升(排除噪音)

第 3 步:威科夫识别 - 如何识别 SOS 信号

3.1 什么是 SOS(Stopping on a Scream)?

定义:威科夫操盘法中,SOS 是指在下跌趋势中出现的强势反转信号 特征

  1. 价格行为:大幅下跌后突然放量上涨
  2. 成交量:成交量爆发(2 倍均量)
  3. 突破:突破关键阻力位

3.2 Python 实现

核心逻辑

def detect_sos(code, kline_data):
    # 计算ATR(波动率)
    atr = calculate_atr(kline_data, period=60)
    atr_pct = atr / current_price

    # ATR过滤(排除极低/极高波动)
    if atr_pct &lt; 0.012 or atr_pct &gt; 0.04:
        return None

    # 计算20日均量
    vol_avg = sum(volume[-20:]) / 20

    # 计算10日最高价(阻力位)
    resistance = max(close[-10:])

    # 最新K线
    latest = kline_data[-1]
    prev = kline_data[-2]
    chg = (latest['close'] - prev['close']) / prev['close']

    # 单日强势突破
    strong_breakout = (
        chg &gt; 0.03 and  # 涨幅 &gt; 3%
        latest['volume'] &gt; vol_avg * 2 and  # 成交量 &gt; 2倍均量
        latest['close'] &gt; resistance  # 突破阻力位
    )

    # 连续放量突破
    consecutive_breakout = False
    if len(kline_data) &gt;= 3:
        chg2 = (latest['close'] - kline_data[-3]['close']) / kline_data[-3]['close']
        consecutive_breakout = (
            chg2 &gt; 0.04 and  # 2日涨幅 &gt; 4%
            kline_data[-2]['volume'] &gt; vol_avg * 1.2 and
            latest['volume'] &gt; vol_avg * 1.2 and
            latest['close'] &gt; resistance
        )

    if strong_breakout:
        return {
            'signal': 'BUY',
            'type': '单日突破',
            'atr_pct': atr_pct,
            'stop_loss': max(-0.05, -atr_pct * 2),
            'take_profit': max(0.10, atr_pct * 3),
        }
    elif consecutive_breakout:
        return {
            'signal': 'BUY',
            'type': '连续突破',
            'atr_pct': atr_pct,
            'stop_loss': max(-0.05, -atr_pct * 2),
            'take_profit': max(0.10, atr_pct * 3),
        }

    return None

关键参数

  • ATR 范围:1.2%-4.0%(排除极端波动)
  • 成交量倍数:单日 2 倍,连续 1.2 倍
  • 涨幅阈值:单日 3%,2 日 4%

第 4 步:信号评级 - 如何区分 A/B/C 级

4.1 评级标准

A 级(最强)

  • 涨幅 > 10%
  • 量比 > 3 倍
  • 突破关键阻力位 B 级(中等)
  • 涨幅 > 5%
  • 量比 > 2 倍
  • 接近阻力位 C 级(弱)
  • 涨幅 > 3%
  • 量比 > 1.5 倍
  • 在阻力位下方

4.2 评分系统

def rate_signal(signal_data):
    score = 0

    # 涨幅得分
    if signal_data['change_pct'] &gt; 10:
        score += 40
    elif signal_data['change_pct'] &gt; 5:
        score += 30
    else:
        score += 20

    # 量比得分
    if signal_data['volume_ratio'] &gt; 3:
        score += 40
    elif signal_data['volume_ratio'] &gt; 2:
        score += 30
    else:
        score += 20

    # 突破得分
    if signal_data['breakthrough']:
        score += 20

    # 评级
    if score &gt;= 90:
        return 'A'
    elif score &gt;= 80:
        return 'B'
    else:
        return 'C'

得分映射

  • 90-100 分 → A 级(重点关注)
  • 80-89 分 → B 级(观察)
  • 70-79 分 → C 级(忽略)

第 5 步:实战案例 - 今天发现的 3 只股票分析

5.1 艾森股份(688720)- A 级信号

数据

  • 现价:77.50 元
  • 涨幅:+15.28%
  • 量比:3.3 倍
  • 得分:100 分(A 级最高分) 筛选过程
  1. ✅ 初筛通过:股价 > 3 元,成交额 > 5000 万
  2. ✅ ATR 过滤:ATR=3.1%,在 1.2%-4.0%范围内
  3. ✅ 威科夫识别:
    • 单日涨幅 15.28% > 3% ✓
    • 成交量 3.3 倍 > 2 倍均量 ✓
    • 突破 10 日最高价 ✓
  4. ✅ 信号评级:
    • 涨幅 15.28% > 10% → +40 分
    • 量比 3.3 倍 > 3 倍 → +40 分
    • 突破阻力位 → +20 分
    • 总分:100 分 → A 级 操作建议
  • 关注:最强信号
  • ⚠️ 不追高:涨幅已达 15.28%,等待回调
  • 入场时机:回调至 70-72 元,缩量确认

5.2 春秋电子(603890)- A 级信号

数据

  • 现价:15.61 元
  • 涨幅:+10.01%
  • 量比:4.2 倍
  • 得分:95 分(A 级) 筛选过程
  1. ✅ 初筛通过
  2. ✅ ATR 过滤
  3. ✅ 威科夫识别:
    • 单日涨幅 10.01% > 3% ✓
    • 成交量 4.2 倍 > 2 倍均量 ✓
    • 突破阻力位 ✓
  4. ✅ 信号评级:
    • 涨幅 10.01% > 10% → +40 分
    • 量比 4.2 倍 > 3 倍 → +40 分
    • 突破阻力位 → +20 分
    • 总分:100 分(因涨幅略低,实际 95 分)→ A 级 操作建议
  • 关注:量比最高(4.2 倍)
  • ⚠️ 不追高:涨幅已达 10%
  • 入场时机:回调至 14.5-15 元

5.3 润本股份(603193)- B 级信号

数据

  • 现价:25.30 元
  • 涨幅:+5.64%
  • 量比:3.3 倍
  • 得分:90 分(B 级) 筛选过程
  1. ✅ 初筛通过
  2. ✅ ATR 过滤
  3. ✅ 威科夫识别:
    • 单日涨幅 5.64% > 3% ✓
    • 成交量 3.3 倍 > 2 倍均量 ✓
    • 突破阻力位 ✓
  4. ✅ 信号评级:
    • 涨幅 5.64% < 10% → +30 分
    • 量比 3.3 倍 > 3 倍 → +40 分
    • 突破阻力位 → +20 分
    • 总分:90 分 → B 级 操作建议
  • ⚠️ 谨慎:B 级信号,信号强度不足
  • ⚠️ 不急于入场:观察后续能否持续放量
  • 如需入场:仓位轻(5-10%)

第 6 步:系统集成 - 如何自动化这个流程

6.1 完整流程图

数据获取(新浪/东方财富)
初筛过滤(5000只 → 500只)
威科夫识别(500只 → 3只)
信号评级(3只 → A/B/C级)
推送提醒(Telegram/Email)
自动交易(可选)

6.2 定时任务

Cron 配置

# 交易日15:30运行威科夫扫描
30 15 * * 1-5 python3 /path/to/wyckoff_scanner.py

执行流程

  1. 15:30 - 扫描器启动,分析 500+只股票
  2. 15:35 - 生成信号报告(3 只)
  3. 15:40 - 发送 Telegram 提醒
  4. 15:45 - 写 blog 文章(深度分析)

总结:从 5000 只到 3 只的筛选智慧

核心原则

  1. 数据源冗余:新浪 + 东方财富,自动故障切换
  2. 分层过滤:5000 只 → 500 只 → 3 只
  3. 威科夫识别:量价配合 + 突破确认
  4. 信号评级:A/B/C 三级,聚焦 A 级
  5. 自动化:定时任务 + 自动提醒

今日结论

  • 艾森股份:A 级,最强信号,关注回调机会
  • 春秋电子:A 级,量比最高,关注回调机会
  • 润本股份:B 级,信号偏弱,观察为主 核心思想:威科夫操盘法的精髓不是"买在最低点" 而是"确认趋势反转后再入场"。宁可错过,不可做错。

本文揭示了威科夫 SOS 信号筛选的完整技术实现 适合量化交易开发者参考。