更新时间:2025-0607-02 – 适配最新
configs.json与Selector.py。
这个港股选股系统包含两个核心脚本:
| fetch_kline.py | 下载港股历史K线数据 |
| select_stock.py | 根据技术指标策略筛选港股|
系统特点:
使用 AKShare 获取港股历史数据 支持多种技术指标选股策略(少妇战法、补票战法、TePu战法) 增量更新机制,避免重复下载 多线程并行处理,提高效率 结果可视化输出和日志记录
内置策略(见 Selector.py):BBIKDJSelector(少妇战法)、BBIShortLongSelector(补票战法)、BreakoutVolumeKDJSelector(TePu 战法)。
# 建议 Python 3.10+,并使用虚拟环境
pip install -r requirements.txt主要依赖:
akshare、tushare、mootdx、pandas、tqdm等。
python select_stock.py --data-dir ./hk_data #下载港股数据
### 运行选股
```bash
python select_stock.py --data-dir ./hk_data #运行选股策略
--data-dir ./data # CSV 行情目录
--config ./configs.json # Selector 配置
--date 2025-06-26 # 交易日(缺省 = 最新)============== 港股选股结果 [策略别名] =============== 交易日: YYYY-MM-DD 符合条件股票数: X 股票代码1, 股票代码2, ...
| 参数 | 默认值 | 说明 |
|---|---|---|
--datasource |
mootdx |
数据源:tushare / akshare / mootdx |
--frequency |
4 |
K 线频率编码(下表) |
--start / --end |
today |
日期范围,YYYYMMDD 或 today |
--out |
./data |
输出目录 |
--workers |
10 |
并发线程数 |
| 编码 | 周期 | Mootdx 关键字 | 用途 |
|---|---|---|---|
| 0 | 5 分 | 5m |
高频 |
| 1 | 15 分 | 15m |
高频 |
| 2 | 30 分 | 30m |
高频 |
| 3 | 60 分 | 1h |
波段 |
| 4 | 日线 | day |
★ 常用 |
| 5 | 周线 | week |
中长线 |
| 6 | 月线 | mon |
中长线 |
| 7 | 1 分 | 1m |
Tick |
| 8 | 1 分 | 1m |
Tick |
| 9 | 日线 | day |
备用 |
| 10 | 季线 | 3mon |
长周期 |
| 11 | 年线 | year |
长周期 |
| 参数 | 默认值 | 说明 |
|---|---|---|
--data-dir |
./data |
CSV 行情目录 |
--config |
./configs.json |
Selector 配置文件 |
--date |
最新交易日 | 选股日期 |
--tickers |
all |
股票池(逗号分隔列表) |
其他参数请执行 python select_stock.py --help 查看。
以下参数均来自 configs.json,可根据个人喜好自行调整。
| 参数 | 预设值 | 说明 |
|---|---|---|
j_threshold |
1 |
当日 J 值必须 小于 该阈值 |
bbi_min_window |
20 |
检测 BBI 上升的最短窗口(交易日) |
max_window |
60 |
参与检测的最大窗口(交易日) |
price_range_pct |
0.5 |
最近 max_window 根 K 线内,收盘价最大波动(high/low−1)不得超过此值 |
bbi_q_threshold |
0.1 |
允许 BBI 一阶差分为负的分位阈值(回撤容忍度) |
j_q_threshold |
0.10 |
当日 J 值需 不高于 最近窗口内该分位数 |
| 参数 | 预设值 | 说明 |
|---|---|---|
n_short |
3 |
计算短周期 RSV 的窗口(交易日) |
n_long |
21 |
计算长周期 RSV 的窗口(交易日) |
m |
3 |
最近 m 天满足短 RSV 条件的判别窗口 |
bbi_min_window |
2 |
检测 BBI 上升的最短窗口(交易日) |
max_window |
60 |
参与检测的最大窗口(交易日) |
bbi_q_threshold |
0.2 |
允许 BBI 一阶差分为负的分位阈值 |
| 参数 | 预设值 | 说明 |
|---|---|---|
j_threshold |
1 |
当日 J 值必须 小于 该阈值 |
j_q_threshold |
0.10 |
当日 J 值需 不高于 最近窗口内该分位数 |
up_threshold |
3.0 |
单日涨幅不低于该百分比,视为“突破” |
volume_threshold |
0.6667 |
放量日成交量需 ≥ 1/(1−volume_threshold) 倍于窗口内其他任意日 |
offset |
15 |
向前回溯的突破窗口(交易日) |
max_window |
60 |
参与检测的最大窗口(交易日) |
price_range_pct |
0.5 |
最近 max_window 根 K 线内,收盘价最大波动不得超过此值(high/low−1) |
.
├── fetch_kline.py # 港股数据下载脚本
├── select_stock.py # 选股策略执行脚本
├── Selector.py # 选股策略实现
├── configs.json # 策略配置文件
├── requirements.txt # 依赖库列表
├── fetch.log # 下载日志
├── select_results.log # 选股结果日志
└── hk_data/ # 港股数据目录(默认)
├── 00001.csv
├── 00002.csv
└── ...
- 本仓库仅供学习与技术研究之用,不构成任何投资建议。股市有风险,入市需审慎。
- 致谢 @Zettaranc 在 Bilibili 的无私分享:https://b23.tv/JxIOaNE
- 致谢 @juffryZZ331 好师兄在bilibili的启发及A股脚本分享