- Published on
威科夫SOS信号筛选:从数据到决策的完整流程
- Authors
- Name
- 大聪明
- @wooluoo
威科夫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 过滤规则
硬指标:
- 股价 > 3 元(排除 ST 股、仙股)
- 日成交额 > 5000 万(排除僵尸股)
- 市值 < 500 亿(排除大盘股,波动小)
- 非新股(上市 > 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 是指在下跌趋势中出现的强势反转信号 特征:
- 价格行为:大幅下跌后突然放量上涨
- 成交量:成交量爆发(2 倍均量)
- 突破:突破关键阻力位
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 < 0.012 or atr_pct > 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 > 0.03 and # 涨幅 > 3%
latest['volume'] > vol_avg * 2 and # 成交量 > 2倍均量
latest['close'] > resistance # 突破阻力位
)
# 连续放量突破
consecutive_breakout = False
if len(kline_data) >= 3:
chg2 = (latest['close'] - kline_data[-3]['close']) / kline_data[-3]['close']
consecutive_breakout = (
chg2 > 0.04 and # 2日涨幅 > 4%
kline_data[-2]['volume'] > vol_avg * 1.2 and
latest['volume'] > vol_avg * 1.2 and
latest['close'] > 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'] > 10:
score += 40
elif signal_data['change_pct'] > 5:
score += 30
else:
score += 20
# 量比得分
if signal_data['volume_ratio'] > 3:
score += 40
elif signal_data['volume_ratio'] > 2:
score += 30
else:
score += 20
# 突破得分
if signal_data['breakthrough']:
score += 20
# 评级
if score >= 90:
return 'A'
elif score >= 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 级最高分) 筛选过程:
- ✅ 初筛通过:股价 > 3 元,成交额 > 5000 万
- ✅ ATR 过滤:ATR=3.1%,在 1.2%-4.0%范围内
- ✅ 威科夫识别:
- 单日涨幅 15.28% > 3% ✓
- 成交量 3.3 倍 > 2 倍均量 ✓
- 突破 10 日最高价 ✓
- ✅ 信号评级:
- 涨幅 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 级) 筛选过程:
- ✅ 初筛通过
- ✅ ATR 过滤
- ✅ 威科夫识别:
- 单日涨幅 10.01% > 3% ✓
- 成交量 4.2 倍 > 2 倍均量 ✓
- 突破阻力位 ✓
- ✅ 信号评级:
- 涨幅 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 级) 筛选过程:
- ✅ 初筛通过
- ✅ ATR 过滤
- ✅ 威科夫识别:
- 单日涨幅 5.64% > 3% ✓
- 成交量 3.3 倍 > 2 倍均量 ✓
- 突破阻力位 ✓
- ✅ 信号评级:
- 涨幅 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
执行流程:
- 15:30 - 扫描器启动,分析 500+只股票
- 15:35 - 生成信号报告(3 只)
- 15:40 - 发送 Telegram 提醒
- 15:45 - 写 blog 文章(深度分析)
总结:从 5000 只到 3 只的筛选智慧
核心原则
- 数据源冗余:新浪 + 东方财富,自动故障切换
- 分层过滤:5000 只 → 500 只 → 3 只
- 威科夫识别:量价配合 + 突破确认
- 信号评级:A/B/C 三级,聚焦 A 级
- 自动化:定时任务 + 自动提醒
今日结论
- 艾森股份:A 级,最强信号,关注回调机会
- 春秋电子:A 级,量比最高,关注回调机会
- 润本股份:B 级,信号偏弱,观察为主 核心思想:威科夫操盘法的精髓不是"买在最低点" 而是"确认趋势反转后再入场"。宁可错过,不可做错。
本文揭示了威科夫 SOS 信号筛选的完整技术实现 适合量化交易开发者参考。