Files
Justin Gu f36e2d6a6c feat(screen): v1.15.0 — 强势股排名 + 修复证券类型识别与名称分批查询
新增:强势股排名(screen strength)
- 全市场按 5/20/60 日涨幅加权合成强势分,纯离线扫描
- 三种预设:steady(稳健)/breakout(妖股)/balanced(均衡)
- CLI: easy-tdx screen strength --preset steady --top 50 --table
- Web API: GET /api/v1/market/strength
- 支持自定义权重、成交额过滤、并发扫描

修复:
- _detect_security_type 代码段不全,ETF/基金/科创板/逆回购被误判为 A 股
- screen strength/rank 名称补齐超 80 只时末尾被丢弃(分批查询)

详见 CHANGELOG.md
2026-06-25 03:33:13 +08:00

2.6 KiB
Raw Permalink Blame History

23. 强势股排名(screen strength

5 / 20 / 60 日涨幅加权合成强势分,从全市场选出"最近最强"的股票。

三种预设模式

模式 性格 适合
steady 中长期稳健(60日主导 + 波动率惩罚) 选"稳着涨"的票
breakout 近期妖股爆发(5日主导,纯涨幅) 选"短期最猛"的票
balanced 三周期均衡 + 波动率调整 不确定时的安全默认

前提条件

需要本地通达信 .day 日线数据(扫描纯离线,无网络请求):

# 同步最新日线数据
easy-tdx offline sync

# 或用通达信客户端下载日线数据到 vipdoc/{sh,sz}/lday/

示例文件

文件 说明
strength_api.py Python API 调用(StrengthRanker 类)
strength_cli.sh CLI 命令示例(easy-tdx screen strength
strength_web_api.py Web API 调用(GET /api/v1/market/strength

快速开始

Python API

from easy_tdx.screen.strength import StrengthRanker

ranker = StrengthRanker(preset="steady")
results = ranker.rank(top_n=20)
for r in results[:5]:
    print(f"#{r.rank} {r.market}{r.code} 强势分={r.strength:.2f}")

CLI

# 表格输出
easy-tdx screen strength --preset steady --top 50 --table

# 近期妖股 + 补齐名称
easy-tdx screen strength --preset breakout --top 20 --names --table

# 自定义权重(自动归一化)
easy-tdx screen strength --w5 0.5 --w20 0.3 --w60 0.2 --top 30 --table

Web API

# 启动服务
easy-tdx serve

# 调用接口
curl "http://localhost:8000/api/v1/market/strength?preset=breakout&top_n=20"

输出字段说明

字段 类型 说明
rank int 排名
code str 6 位股票代码
market str 市场(SZ/SH
name str 股票名称(需 --names 开启)
last_close float 最新收盘价
last_date int 数据截止日(YYYYMMDD
ret_5 float 5 日涨幅
ret_20 float 20 日涨幅
ret_60 float 60 日涨幅
vol_20 float 20 日波动率(对数收益率标准差)
strength float 强势综合分(排序依据)

公式

ret_5  = close[-1] / close[-6]  - 1
ret_20 = close[-1] / close[-21] - 1
ret_60 = close[-1] / close[-61] - 1
vol_20 = std(log_return, 20)[-1]

strength = (w5·ret_5 + w20·ret_20 + w60·ret_60) / vol_20   # vol_adjusted=True
strength =  w5·ret_5 + w20·ret_20 + w60·ret_60              # vol_adjusted=False

权重自动归一化:w = w / (w5 + w20 + w60)