mirror of
https://ghfast.top/https://github.com/aeroxw/easy_tdx_max.git
synced 2026-09-12 14:34:18 +08:00
- cli.md 命令总览(补 chanlun/zhuoyao/bias-signal 漏项)+ 按域导航 - cli-market / cli-finance / cli-indicators / cli-screen / cli-backtest 按域拆分 - cli-backtest 吸收 backtest_usage CLI 章的 backtest/optimize 参数表与 --indicators 说明 - chanlun.md(CLI+Python)、data-local.md(warehouse+offline)按主题合一 - 策略 demo 图复制至 docs/images/demo/,图片与内联链接路径改写为 docs 内相对路径 Co-Authored-By: Claude <noreply@anthropic.com>
161 lines
7.1 KiB
Markdown
161 lines
7.1 KiB
Markdown
# CLI 参考 — 策略选股扫描
|
||
|
||
## 策略选股扫描(screen)
|
||
|
||
把策略翻转成选股器:给定一个策略,扫描全市场找出今天触发买入信号的股票,再对这些信号做历史回测排名。**纯离线数据**,读取本地通达信 `.day` 文件,全市场约 30-60 秒。
|
||
|
||
两步走工作流:
|
||
|
||
**第一步:信号扫描(scan)**
|
||
|
||
```bash
|
||
# 扫描沪深全 A,找出 RSI 超卖触发的股票
|
||
easy-tdx screen scan --strategy strategies/rsi_reversal.py --output signals.json
|
||
|
||
# 缩小范围
|
||
easy-tdx screen scan --strategy strategies/macd_cross.py --universe sz --output signals.json
|
||
|
||
# 从自定义股票列表扫描
|
||
easy-tdx screen scan --strategy strategies/bollinger_breakout.py --universe my_stocks.txt --output signals.json
|
||
|
||
# 并发扫描(推荐 4-8 进程,速度提升 4-8 倍)
|
||
easy-tdx screen scan --strategy strategies/rsi_reversal.py --workers 4 --output signals.json
|
||
|
||
# 增量扫描(缓存未修改的 .day 文件,跳过重复计算)
|
||
easy-tdx screen scan --strategy strategies/rsi_reversal.py --cache scan_cache.json --output signals.json
|
||
```
|
||
|
||
输出示例(JSON):
|
||
|
||
```json
|
||
{
|
||
"scan_time": "2026-06-10T18:30:00",
|
||
"strategy": "RSIStrategy",
|
||
"total_scanned": 4832,
|
||
"total_signals": 37,
|
||
"signals": [
|
||
{"code": "000001", "market": "SZ", "signal_date": 20260610, "last_close": 12.35},
|
||
{"code": "600519", "market": "SH", "signal_date": 20260610, "last_close": 1800.0}
|
||
]
|
||
}
|
||
```
|
||
|
||
**第二步:回测排名(rank)**
|
||
|
||
```bash
|
||
# 按夏普比率排名(默认)
|
||
easy-tdx screen rank --from signals.json --sort sharpe --top 20 --table
|
||
|
||
# 按最大回撤排名(越小越好,用 --sort-reverse)
|
||
easy-tdx screen rank --from signals.json --sort max_drawdown --sort-reverse --table
|
||
|
||
# 管道模式:一步到位
|
||
easy-tdx screen scan --strategy strategies/rsi_reversal.py | easy-tdx screen rank --from - --table
|
||
|
||
# 补齐股票名称(需要网络)
|
||
easy-tdx screen rank --from signals.json --sort sharpe --top 10 --table --names
|
||
```
|
||
|
||
输出示例(`--table`):
|
||
|
||
```
|
||
[*] 信号排名 (按 sharpe 降序, 共 37 只)
|
||
══════════════════════════════════════════════════════════════════════════
|
||
排名 代码 名称 总收益率 年化收益 最大回撤 夏普 胜率 交易
|
||
*1 SZ300308 中际旭创 45.23% 18.72% 12.35% 1.85 62.5% 16
|
||
*2 SH600519 贵州茅台 38.10% 15.90% 8.21% 1.62 58.3% 12
|
||
```
|
||
|
||
| 参数 | 说明 |
|
||
|------|------|
|
||
| `--universe` | `all`(默认,沪深全 A)/ `sh` / `sz` / 文件路径(每行 "市场 代码") |
|
||
| `--vipdoc` | 离线数据目录(默认自动检测通达信安装路径) |
|
||
| `--workers` | 并发进程数:`0` 串行(默认)/ `2+` ProcessPoolExecutor 并发(推荐 4-8) |
|
||
| `--cache` | 增量扫描缓存文件路径(JSON,mtime 未变的文件自动跳过) |
|
||
| `--sort` | 排序指标:`sharpe`(默认)/ `total_return` / `max_drawdown` / `win_rate` 等 |
|
||
| `--sort-reverse` | 升序(用于回撤等越小越好的指标) |
|
||
| `--names` | 在线补齐股票名称(默认关闭,只查排名中的几十只) |
|
||
| `--count` | rank 使用最近 N 条 K 线(0=全部,默认 0) |
|
||
|
||
### 强势股排名(strength)
|
||
|
||
按 **5 / 20 / 60 日涨幅加权**合成强势分,从全市场选出"最近最强"的股票。**纯离线数据**,读取本地通达信 `.day` 文件,全市场约 30-60 秒(并发可压到 10 秒内)。
|
||
|
||
**三种预设模式:**
|
||
|
||
| 模式 | 性格 | 权重 (w5/w20/w60) | 波动率惩罚 | 适合 |
|
||
|------|------|-------------------|-----------|------|
|
||
| `steady`(默认) | 中长期稳健 | 0.2 / 0.3 / 0.5 | ✅ 除以 vol_20 | 选"稳着涨"的票,妖股被高波动压低 |
|
||
| `breakout` | 近期妖股爆发 | 0.6 / 0.3 / 0.1 | ❌ 纯加权涨幅 | 选"短期最猛"的票,妖股本身就是高波动 |
|
||
| `balanced` | 三周期均衡 | 等权 + vol 调整 | ✅ 除以 vol_20 | 不确定时的安全默认 |
|
||
|
||
> 💡 **为什么 breakout 不除波动率?** 妖股本质高波动,除以 vol 会把它压下去,与"找妖股"目标矛盾。steady 除以 vol 是为了奖励"稳着涨"的票(vol 小,score 放大)。
|
||
|
||
```bash
|
||
# 中长期稳健强势 Top 50(默认 steady 模式)
|
||
easy-tdx screen strength --preset steady --top 50 --table
|
||
|
||
# 近期妖股爆发 Top 20(补齐股票名称)
|
||
easy-tdx screen strength --preset breakout --top 20 --names --table
|
||
|
||
# 三周期均衡
|
||
easy-tdx screen strength --preset balanced --top 30 --table
|
||
|
||
# 自定义权重(自动归一化,5:3:2 = 0.5:0.3:0.2)
|
||
easy-tdx screen strength --w5 0.5 --w20 0.3 --w60 0.2 --top 30 --table
|
||
|
||
# 并发扫描(推荐 4-8 进程)
|
||
easy-tdx screen strength --preset steady --top 100 --workers 4 --table
|
||
|
||
# 过滤低流动性(最近 5 日日均成交额 ≥ 5000 万)
|
||
easy-tdx screen strength --preset breakout --top 30 --min-amount 50000000 --table
|
||
|
||
# 缩小范围 + 输出到文件
|
||
easy-tdx screen strength --universe sz --top 30 --output sz_strength.json
|
||
```
|
||
|
||
输出示例(`--table`):
|
||
|
||
```
|
||
[*] 强势股排名 [steady] 共 50 只
|
||
数据截止: 2026-06-24 | 中长期稳健强势:权重偏 60 日,波动率惩罚,选出稳着涨的票
|
||
════════════════════════════════════════════════════════════════════════════════
|
||
排名 代码 名称 现价 5日 20日 60日 波动率 强势分
|
||
*1 SZ300308 中际旭创 85.20 8.12% 15.34% 30.21% 0.0180 9.52
|
||
*2 SH600519 贵州茅台 1800.00 3.25% 5.10% 10.05% 0.0120 6.21
|
||
```
|
||
|
||
输出示例(JSON):
|
||
|
||
```json
|
||
{
|
||
"scan_time": "2026-06-25T10:30:00",
|
||
"preset": "steady",
|
||
"preset_desc": "中长期稳健强势:权重偏 60 日,波动率惩罚...",
|
||
"data_date": 20260624,
|
||
"total_ranked": 50,
|
||
"ranking": [
|
||
{"rank": 1, "code": "300308", "market": "SZ", "name": "中际旭创",
|
||
"last_close": 85.20, "last_date": 20260624,
|
||
"ret_5": 0.0812, "ret_20": 0.1534, "ret_60": 0.3021,
|
||
"vol_20": 0.0180, "strength": 9.52}
|
||
]
|
||
}
|
||
```
|
||
|
||
| 参数 | 说明 |
|
||
|------|------|
|
||
| `--preset` | 预设模式:`steady`(默认)/ `breakout` / `balanced` |
|
||
| `--w5` `--w20` `--w60` | 自定义三周期权重(覆盖预设,自动归一化) |
|
||
| `--vol-adjusted` / `--no-vol-adjusted` | 波动率惩罚开关(覆盖预设) |
|
||
| `--top` | 返回前 N 名(默认 50) |
|
||
| `--universe` | `all`(默认)/ `sh` / `sz` / 文件路径 |
|
||
| `--min-listed-days` | 最小上市天数(默认 65,保证能算 60 日涨幅) |
|
||
| `--min-amount` | 最近 5 日日均成交额下限(元,默认 0 不过滤) |
|
||
| `--workers` | 并发进程数:`0` 串行 / `4+` 并发(推荐 4-8) |
|
||
| `--names` | 在线补齐股票名称(默认关闭) |
|
||
| `--output` | 输出 JSON 文件(默认 stdout) |
|
||
|
||
> ⚠️ **数据时效**:strength 依赖本地 `.day` 文件。输出中的 `data_date` / `last_date` 字段标注数据截止日,请先用 `easy-tdx offline sync` 同步最新数据。
|
||
|