mirror of
https://ghfast.top/https://github.com/aeroxw/easy_tdx_max.git
synced 2026-09-12 16:54:20 +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>
7.1 KiB
7.1 KiB
CLI 参考 — 策略选股扫描
策略选股扫描(screen)
把策略翻转成选股器:给定一个策略,扫描全市场找出今天触发买入信号的股票,再对这些信号做历史回测排名。纯离线数据,读取本地通达信 .day 文件,全市场约 30-60 秒。
两步走工作流:
第一步:信号扫描(scan)
# 扫描沪深全 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):
{
"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)
# 按夏普比率排名(默认)
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 放大)。
# 中长期稳健强势 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):
{
"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同步最新数据。