From bfb8789ae8bf9ec6bdfc112ad48b8ce90b07b86f Mon Sep 17 00:00:00 2001 From: awayings Date: Tue, 8 Sep 2026 23:21:26 +0800 Subject: [PATCH 1/6] =?UTF-8?q?docs:=20README=20CLI=20=E7=AB=A0=E6=8C=89?= =?UTF-8?q?=E5=9F=9F=E6=8B=86=E8=87=B3=20docs/cli*.md=20+=20chanlun/data-l?= =?UTF-8?q?ocal=EF=BC=88=E5=90=AB=E5=8F=82=E6=95=B0=E8=A1=A8=E5=8E=BB?= =?UTF-8?q?=E9=87=8D=E5=90=88=E5=B9=B6=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 --- docs/chanlun.md | 148 ++++++++++++++++ docs/cli-backtest.md | 371 +++++++++++++++++++++++++++++++++++++++++ docs/cli-finance.md | 41 +++++ docs/cli-indicators.md | 127 ++++++++++++++ docs/cli-market.md | 95 +++++++++++ docs/cli-screen.md | 160 ++++++++++++++++++ docs/cli.md | 83 +++++++++ docs/data-local.md | 88 ++++++++++ docs/images/demo/1.png | Bin 0 -> 168546 bytes docs/images/demo/2.png | Bin 0 -> 147885 bytes docs/images/demo/3.png | Bin 0 -> 177862 bytes docs/images/demo/4.png | Bin 0 -> 189528 bytes 12 files changed, 1113 insertions(+) create mode 100644 docs/chanlun.md create mode 100644 docs/cli-backtest.md create mode 100644 docs/cli-finance.md create mode 100644 docs/cli-indicators.md create mode 100644 docs/cli-market.md create mode 100644 docs/cli-screen.md create mode 100644 docs/cli.md create mode 100644 docs/data-local.md create mode 100644 docs/images/demo/1.png create mode 100644 docs/images/demo/2.png create mode 100644 docs/images/demo/3.png create mode 100644 docs/images/demo/4.png diff --git a/docs/chanlun.md b/docs/chanlun.md new file mode 100644 index 0000000..6ee3af2 --- /dev/null +++ b/docs/chanlun.md @@ -0,0 +1,148 @@ +# 缠论分析 + +## CLI 用法 + +基于缠论理论的技术分析,计算管道:`K 线合并 → 分型识别 → 笔 → 中枢 → 线段 → 买卖点 → 背驰`。默认输出 JSON,加 `--table` 输出可读表格。:`K 线合并 → 分型识别 → 笔 → 中枢 → 线段 → 买卖点 → 背驰`。默认输出 JSON,加 `--table` 输出可读表格。 + +```bash +easy-tdx chanlun SZ 000001 --table +easy-tdx chanlun SH 600519 --adjust QFQ --table +easy-tdx chanlun SZ 000001 --period 30MIN + +# 多级别联立:分析日线最后一笔在 30 分钟级别中的走势结构 +easy-tdx chanlun SZ 000001 --multi-level 30MIN --table +easy-tdx chanlun SH 600519 --multi-level 5MIN +``` + +### 输出示例 + +以 `easy-tdx chanlun SH 601088 --table` 为例,输出分五个部分: + +**概要统计** + +``` +标的: 601088 周期: DAILY +原始K线: 800 缠论K线: 589 +分型: 275 笔: 131 中枢: 21 线段: 40 +买卖点: 125 背驰: 73 +``` + +| 字段 | 含义 | +|------|------| +| 原始 K 线 | 从服务端获取的原始 K 线条数 | +| 缠论 K 线 | 经过包含处理(合并)后的 K 线条数,数量一定 ≤ 原始 K 线 | +| 分型 | 识别出的顶分型 + 底分型总数 | +| 笔 | 相邻两个异向分型之间的连线(涨跌方向交替) | +| 中枢 | 至少 3 笔重叠区域形成的密集成交区间 | +| 线段 | 由笔构成的更大级别走势单位 | +| 买卖点 | 一二三类买卖点信号总数 | +| 背驰 | 力度衰减信号总数(笔背驰 / 盘整背驰 / 趋势背驰) | + +**笔** + +``` +[0] ↑ 2023-02-17 → 2023-02-23 h=28.46 l=26.76 ✓ +[1] ↓ 2023-02-23 → 2023-02-28 h=28.46 l=27.8 ✓ +[2] ↑ 2023-02-28 → 2023-03-09 h=29.77 l=27.8 ✓ +``` + +笔是缠论的基本走势单位。每条笔连接一个顶分型和一个底分型,方向严格交替(↑↓↑↓…)。`✓` 表示已确认(后续出现了反向笔),`…` 表示仍在进行中。 + +- `↑`:向上笔,起点是底分型(低点),终点是顶分型(高点) +- `↓`:向下笔,起点是顶分型(高点),终点是底分型(低点) +- `h`/`l`:该笔范围内的最高价 / 最低价 + +**中枢** + +``` +[0] zg=28.46 zd=28.11 gg=32.56 dd=26.76 lines=11 ✓ +[1] zg=31.2 zd=30.45 gg=32.56 dd=27.9 lines=3 ✓ +``` + +中枢是至少 3 笔重叠形成的密集成交区间,代表多空博弈的平衡区域。`✓` 表示已脱离,`…` 表示价格仍在中枢区间内震荡。 + +| 字段 | 含义 | +|------|------| +| `zg` | 中枢上沿(区间内最高的低点)— 支撑/压力的关键分界 | +| `zd` | 中枢下沿(区间内最低的高点) | +| `gg` | 中枢区间内的最高价 | +| `dd` | 中枢区间内的最低价 | +| `lines` | 构成该中枢的笔数,笔数越多代表震荡越充分 | + +中枢的意义:价格在中枢内震荡 → 突破中枢上沿看涨,跌破下沿看跌。`zg`/`zd` 是实战中最常用的参考价位。 + +**线段** + +``` +[0] ↑ 2023-02-17 → 2023-03-09 h=29.77 l=26.76 +[1] ↓ 2023-02-28 → 2023-03-29 h=29.77 l=27.18 +``` + +线段是比笔更大的走势单位,由多笔重叠组合而成。线段的方向不严格交替,可能出现连续同向(如连续多段向上),代表更高一级的趋势方向。实战中通常在线段级别判断大方向,在笔级别找买卖点。 + +**买卖点** + +``` +1buy: 中枢下方力度衰减,一类买点 (l=27.30 < zd=46.72) +2buy: 回调不创新低,二类买点 (l=27.33) +3buy: 回调不破中枢上沿,三类买点 (l=27.80 > zg=27.58) +1sell: 中枢上方力度衰减,一类卖点 (h=50.38 > zg=46.97) +2sell: 反弹不创新高,二类卖点 (h=29.32) +3sell: 反弹不破中枢下沿,三类卖点 (h=28.46 < zd=46.72) +``` + +缠论定义三类买点和三类卖点: + +| 类型 | 买点含义 | 卖点含义 | +|------|----------|----------| +| 一类 | 下跌趋势末端,力度衰减后的第一个低点(抄底) | 上涨趋势末端,力度衰减后的第一个高点(逃顶) | +| 二类 | 一类买点后的回调不创新低(确认反转) | 一类卖点后的反弹不创新高(确认反转) | +| 三类 | 回调不进入中枢上沿(趋势确认,中枢上方买) | 反弹不进入中枢下沿(趋势确认,中枢下方卖) | + +括号内的条件是该信号的触发依据,如 `l=27.80 > zg=27.58` 表示回调低点 27.80 高于中枢上沿 27.58,所以是三类买点。 + +**背驰** + +``` +[✓] bi: 笔背驰: 笔[4] 力度=1.32 < 笔[2] 力度=1.97 +[✓] pz: 盘整背驰: 中枢[11] 内末笔力度=2.49 < 首笔力度=6.64 +[✓] qs: 趋势背驰(上): 中枢[1] 离开力度=3.32 < 中枢[0] 离开力度=4.45 +``` + +背驰是力度衰减信号,表明当前走势动力正在减弱,可能即将反转。力度通过 MACD 面积计算,数值越小力度越弱。 + +| 类型 | 含义 | +|------|------| +| `bi`(笔背驰) | 同向相邻两笔比较,后一笔力度 < 前一笔 → 该方向动力减弱 | +| `pz`(盘整背驰) | 同一中枢内,末笔力度 < 首笔 → 中枢内动力衰减,即将突破 | +| `qs`(趋势背驰) | 两个同向中枢之间比较,后一中枢离开力度 < 前一中枢 → 趋势可能终结 | + +`[✓]` 表示确认背驰。趋势背驰(上)代表上涨趋势可能结束,趋势背驰(下)代表下跌趋势可能结束。 + + +## Python 用法 + +基于缠论理论的技术分析模块,接收 easy_tdx 的 K 线 DataFrame,输出笔、中枢、线段、买卖点、背驰等分析结果: + +```python +from easy_tdx.chanlun import ChanlunAnalyser, ChanlunConfig + +# 使用 easy_tdx 获取 K 线数据 +with TdxClient() as client: + df = client.get_security_bars(Market.SH, "600519", KlineCategory.DAY, 0, 800) + +# 缠论分析 +analyser = ChanlunAnalyser("SH600519", "DAILY") +result = analyser.process_klines(df) + +# 获取结果 +print(f"笔数: {len(result.bis)}") +print(f"中枢数: {len(result.zss)}") +print(f"线段数: {len(result.xds)}") +print(f"买卖点: {[m.msg for m in result.mmds]}") +print(f"背驰: {[b.msg for b in result.bcs]}") + +# JSON 兼容字典输出 +print(result.to_dict()) +``` + diff --git a/docs/cli-backtest.md b/docs/cli-backtest.md new file mode 100644 index 0000000..dac2e33 --- /dev/null +++ b/docs/cli-backtest.md @@ -0,0 +1,371 @@ +# CLI 参考 — 回测与寻优 + +## 回测引擎 + +> 📖 **完整使用手册**:[backtest_usage.md](./backtest_usage.md) —— +> 涵盖策略编写(`init()`/`next()`)、行情数据访问、指标注册、订单模拟、 +> 绩效指标、组合回测、调仓引擎与完整示例。回测相关用法以该手册为准。 + +内置向量回测引擎,加载 Python 策略文件即可跑回测。策略继承 `Strategy` 基类,在 `init()` 注册指标,在 `next()` 逐 bar 生成买卖信号,引擎完成订单模拟、持仓跟踪和绩效分析。 + +**单策略回测:** + +```bash +easy-tdx backtest SZ 300308 --strategy-file strategies/expma_cross.py --count 2000 --cash 1000000 --adjust QFQ --table +# 推荐加上 --slippage 0.01 模拟真实滑点(元/股),使回测更贴近实盘 + +# 缠论自动桥接:引擎自动计算缠论分析并注入策略 self.chanlun +easy-tdx backtest SZ 000001 --strategy-file strategies/chanlun_strategy.py --chanlun-level DAILY --table + +# 预计算指标(MACD, KDJ 会作为额外列注入 DataFrame) +easy-tdx backtest SZ 000001 \ + --strategy-file strategies/macd_strategy.py \ + --indicators MACD,KDJ +``` + +`backtest` 命令 CLI 参数: + +| 参数 | 默认值 | 说明 | +|------|--------|------| +| `MARKET` | — | 市场代码:SZ / SH | +| `CODE` | — | 股票代码:如 000001 | +| `--strategy-file` | — | Python 策略文件路径 | +| `--cash` | 100000 | 初始资金 | +| `--commission` | 0.0003 | 佣金率 | +| `--execution` | next_open | 成交价规则 | +| `--period` | DAILY | K 线周期 | +| `--adjust` | NONE | 复权方式:NONE / QFQ / HFQ | +| `--count` | 500 | K 线数量 | +| `--indicators` | — | 预计算指标(逗号分隔) | +| `--table` | False | 表格输出 | +| `--output` | json | 输出格式:json / table / csv | +| `--wf` | False | 附加 Walk-Forward 样本外验证 | +| `--wf-windows` | 7 | Walk-Forward 窗口数 | +| `--evaluate` | False | 一条龙评估(回测+WF+适配性+评分+评级+基准对比) | +| `--auto-fees` | False | 按标的品种自动解析费率 | + +**样本外验证(v1.25):** + +```bash +# 附加 Walk-Forward 七窗样本外验证(每窗独立开仓,窗口数可调) +easy-tdx backtest SZ 300308 --strategy-file strategies/expma_cross.py --wf --wf-windows 7 + +# 一条龙评估:回测 + WF + 适配性体检 + 综合评分 + S-D 评级 + 买入持有基准对比 +easy-tdx backtest SZ 300308 --strategy-file strategies/expma_cross.py --evaluate +``` + +输出示例: + +``` +=== 回测绩效概要 === +总收益率: 1413.51% +年化收益: 40.85% +最大回撤: 76.75% +夏普比率: 0.88 +胜率: 20.8% +交易次数: 24 +``` + +> ⚠️ **回测 ≠ 实盘**。以上收益率为历史数据回测结果,包含幸存者偏差和过拟合风险, +> 不构成投资建议。实际交易需考虑滑点、流动性、涨跌停无法成交等因素。 +> 请在充分理解策略逻辑后谨慎使用。 + +**参数网格寻优(optimize)与内置策略列表(strategies):** + +```bash +# 列出全部内置策略(名称/参数默认值/预设寻优网格) +easy-tdx strategies + +# 单策略网格寻优(预设网格或 --param 自定义,--workers 4 进程并行) +easy-tdx optimize SZ 000001 --strategy ma_cross +easy-tdx optimize SZ 000001 --strategy ma_cross --param fast=5,10,15 --param slow=20,60 + +# 一键寻优所有内置策略:逐策略按预设网格寻优后全局排名(对应 Web UI /optimize 页) +easy-tdx optimize SZ 000001 --all --workers 4 --table + +# strategies 也支持 JSON 输出(含完整参数 schema,与 Web API GET /backtest/strategies 同构) +easy-tdx strategies --output json +``` + +`optimize` 参数: + +| 参数 | 默认值 | 说明 | +|------|--------|------| +| `--strategy` | — | 注册表策略名(与 `--all` 二选一) | +| `--all` | False | 一键寻优所有内置策略(STRATEGY_PRESETS 预设网格) | +| `--param` | 预设网格 | 自定义参数网格,如 `fast=5,10,15`(最多 2 个参数,笛卡尔积 ≤ 200) | +| `--cash` | 1000000 | 初始资金 | +| `--commission` | 0.0003 | 佣金率 | +| `--slippage` | 0.0 | 滑点 | +| `--workers` | 1 | 并行进程数(2+ 进程级并行;1 = 串行 + 指标缓存复用) | +| `--top` | 15 | 表格输出显示前 N 行 | + +Python API 同名能力:`easy_tdx.backtest.optimizer.ParamGridOptimizer`(单策略)与 +`easy_tdx.backtest.optimizer.optimize_all_strategies`(一键全策略)。 + +**全策略批量对比(CLI):** + +`easy-tdx run-all` 一行命令跑完 `strategies/` 下所有策略并排名: + +```bash +easy-tdx run-all SZ 300308 --count 2000 --cash 1000000 --adjust QFQ + +# 多因子组合回测 +easy-tdx run-all SZ 300308 --combo 2 --combo-mode MAJORITY + +# 加 --show 自动弹出最佳策略的资金曲线 vs 股价对比图 +easy-tdx run-all SZ 300308 --count 2000 --cash 1000000 --adjust QFQ --show + +# 自定义策略目录 +easy-tdx run-all SZ 300308 --strategies-dir my_strategies/ +``` + +也可使用项目自带的 `run_all_strategies.py` 脚本(功能相同): + +```bash +python -X utf8 run_all_strategies.py SZ 300308 --count 2000 --cash 1000000 --adjust QFQ + +# 加 --show 自动弹出最佳策略的资金曲线 vs 股价对比图 +python -X utf8 run_all_strategies.py SZ 300308 --count 2000 --cash 1000000 --adjust QFQ --show +``` + +**多因子组合回测:** + +自动遍历所有 2 因子 / 3 因子组合,找到最优搭配: + +```bash +# 自动寻找最佳 2 因子和 3 因子组合(MAJORITY 模式) +python -X utf8 run_all_strategies.py SZ 300308 --combo 2 --combo 3 --combo-mode majority + +# CLI 方式 +easy-tdx run-all SZ 300308 --combo 2 --combo 3 --combo-mode majority +``` + +CLI 指定策略文件组合: + +```bash +easy-tdx backtest SZ 000001 \ + --combo-strategies strategies/macd_cross.py,strategies/rsi_reversal.py,strategies/bollinger_breakout.py \ + --combo-mode majority --table +``` + +Python API: + +```python +from easy_tdx.backtest import CombinationRunner + +runner = CombinationRunner( + strategy_classes=[MACDStrategy, RSIStrategy, BollingerStrategy], + df=df, cash=100000, +) +results = runner.screen(combo_sizes=(2, 3), mode="MAJORITY") +for r in results[:5]: + print(f"{r.name}: 收益={r.result.performance['total_return']:.2%}") +``` + +信号合并模式: + +| 模式 | 买入条件 | 卖出条件 | 特点 | +|------|---------|---------|------| +| `AND` | 所有因子都看多 | 所有因子都看空 | 极保守,交易少但精确 | +| `MAJORITY` | 过半因子看多 | 过半因子看空 | 平衡,推荐默认 | +| `OR` | 任一因子看多 | 任一因子看空 | 激进,信号多噪声大 | + +`--show` 会用 matplotlib 弹出一个双轴对比窗口:左轴蓝色线是归一化股价,右轴红色线是最佳策略的资金曲线,绿三角=买入、黄三角=卖出,标题显示股票名称和关键绩效指标。需要 `pip install matplotlib`。 + +**多标的组合回测(portfolio):** + +`easy-tdx portfolio` 对多只股票同时回测,共享资金池,按均等比例分配,汇总组合整体绩效: + +```bash +# 两只股票组合回测 +easy-tdx portfolio --stocks SZ:000001,SH:600519 --strategy-file strategies/ma_cross.py --table + +# 自定义资金和周期 +easy-tdx portfolio --stocks SZ:000001,SH:600519,SH:600036 \ + --strategy-file strategies/expma_cross.py --cash 500000 --period DAILY --count 1000 --table + +# 搭配缠论桥接 +easy-tdx portfolio --stocks SZ:000001,SH:600519 \ + --strategy-file strategies/chanlun_strategy.py --chanlun-level DAILY --table + +# 组合级 Walk-Forward / 一条龙评估(与 Web UI /portfolio 页同构) +easy-tdx portfolio --stocks SZ:000001,SH:600519 \ + --strategy-file strategies/ma_cross.py --wf --wf-windows 7 +easy-tdx portfolio --stocks SZ:000001,SH:600519 \ + --strategy-file strategies/ma_cross.py --evaluate +``` + +输出示例: + +``` +=== 组合回测绩效概要 === +标的数量: 3 +总资金: 200,000 +组合收益率: 28.50% +组合年化: 28.50% + +── 各标的详情 ── + SZ000001: 收益=35.20% 夏普=0.92 回撤=15.30% 分配=33% 交易=12 + SH600519: 收益=18.40% 夏普=0.68 回撤=8.50% 分配=33% 交易=8 + SH600036: 收益=31.90% 夏普=0.85 回撤=12.10% 分配=33% 交易=15 +``` + +| 参数 | 说明 | +|------|------| +| `--stocks` | 股票列表:逗号分隔的 `市场:代码`(如 `SZ:000001,SH:600519`) | +| `--cash` | 总资金(默认 20 万) | +| `--allocation` | 资金分配方式(目前支持 `equal` 均等分配) | +| `--chanlun-level` | 自动计算缠论分析并注入策略(如 DAILY/30MIN) | + + +## 批量运行全部策略(run-all) + + +``` +发现 9 个策略文件 +标的: SZ 300308 | K线: 2000 | 资金: 1,000,000 | 复权: QFQ +================================================================================ + +>> 运行策略: bias_reversal ... 完成 (2.4s) +>> 运行策略: bollinger_breakout ... 完成 (0.6s) +>> 运行策略: expma_cross ... 完成 (0.6s) +>> 运行策略: kdj_golden ... 完成 (0.1s) +>> 运行策略: ma_cross ... 完成 (1.4s) +>> 运行策略: macd_cross ... 完成 (2.1s) +>> 运行策略: rsi_reversal ... 完成 (0.2s) +>> 运行策略: turtle_breakout ... 完成 (0.1s) +>> 运行策略: volume_price ... 完成 (6.3s) + +================================================================================ +[*] 策略绩效排名 (按总收益率降序) +================================================================================ + 排名 策略 总收益率 年化收益 最大回撤 夏普 胜率 交易次数 盈亏比 +---------------------------------------------------------------------------------------------------- + *1* 1 expma_cross 1413.51% 40.85% 76.75% 0.88 20.8% 24 6.45 + *2* 2 ma_cross 1258.07% 38.94% 58.01% 0.87 38.2% 55 2.21 + *3* 3 turtle_breakout 905.07% 33.76% 48.30% 0.83 75.0% 4 10.14 + 4 bias_reversal 504.94% 25.47% 42.25% 0.70 66.3% 95 2.08 + 5 macd_cross 387.67% 22.11% 61.08% 0.60 40.0% 85 2.20 + 6 volume_price 247.72% 17.01% 65.73% 0.50 43.3% 254 1.40 + 7 bollinger_breakout 169.65% 13.32% 49.71% 0.44 66.7% 24 1.93 + 8 rsi_reversal 95.89% 8.85% 56.51% 0.33 57.1% 7 2.48 + 9 kdj_golden 89.10% 8.36% 61.86% 0.32 66.7% 3 10.49 +``` + +综合评分(夏普 × 0.4 + 收益/回撤 × 0.3 + 胜率 × 0.3): + +``` + *1* 1 turtle_breakout 23.04 0.83 0.70 75.0% + *2* 2 bias_reversal 20.35 0.70 0.60 66.3% + *3* 3 bollinger_breakout 20.26 0.44 0.27 66.7% +``` + +换一个标的再跑: + +```bash +# 贵州茅台 +python -X utf8 run_all_strategies.py SH 600519 --count 2000 --cash 1000000 --adjust QFQ +``` + +### `--show` 可视化效果 + +

+
+ SH601088 中国神华 — bollinger_breakout 策略 | 收益 1281.8% +

+ +

+
+ SH600522 中天科技 — kdj_golden 策略 | 收益 568.6% +

+ +

+
+ SH601179 中国西电 — expma_cross 策略 | 收益 168.0% +

+ +

+
+ SH600519 贵州茅台 — bollinger_breakout 策略 | 收益 187.0% +

+ +> **⚠️ Demo 展示,不作为操作依据。** 历史回测收益不代表未来表现,策略参数未经过样本外验证。 + +### 自带策略示例 + +`strategies/` 目录下有 16 个开箱即用的策略文件,可直接用于 `--strategy-file`: + +| 文件 | 策略 | 类型 | 适合行情 | +|------|------|------|----------| +| `ma_cross.py` | 双均线交叉(MA5/MA20) | 趋势跟踪 | 单边趋势 | +| `expma_cross.py` | EMA12/EMA50 交叉 | 趋势跟踪 | 单边趋势(比 MA 更灵敏) | +| `macd_cross.py` | MACD 金叉死叉 | 趋势跟踪 | 中长线趋势 | +| `bollinger_breakout.py` | 布林带突破 | 震荡反转 | 横盘震荡 | +| `rsi_reversal.py` | RSI 超买超卖 | 反转 | 震荡市 | +| `kdj_golden.py` | KDJ 低位金叉/高位死叉 | 反转 | 短线震荡 | +| `turtle_breakout.py` | 海龟交易法(唐安奇通道) | 趋势突破 | 牛市启动 | +| `bias_reversal.py` | 乖离率反转 | 反转 | 震荡回归 | +| `volume_price.py` | 量价配合 | 综合判断 | 放量突破 | +| `zhuoyao_momentum.py` | 捉妖大师多周期共振 | 趋势跟踪 | 多周期共振强势股 | +| `dmi_trend.py` | DMI/ADX 趋势强度跟踪 | 趋势跟踪 | 单边趋势(过滤震荡) | +| `cci_breakout.py` | CCI ±100 区间突破 | 区间突破 | 震荡转趋势 | +| `mfi_volume.py` | MFI 量价反转 | 量价反转 | 震荡市(带量能确认) | +| `trix_cross.py` | TRIX 三重平滑趋势交叉 | 趋势跟踪 | 中长线(抗噪音) | +| `mtm_momentum.py` | MTM 动量零线穿越 | 动量 | 趋势拐点 | +| `obv_trend.py` | OBV 能量潮趋势 | 量价趋势 | 资金持续流入的上升趋势 | + +编写自定义策略只需继承 `Strategy` 基类: + +```python +from easy_tdx.backtest import Strategy +from easy_tdx import MyTT + + +class MyStrategy(Strategy): + def init(self): + self.ma = self.I(MyTT.MA, self.data.close, 10) + + def next(self): + if self.data.close[0] > self.ma[self._bar_index]: + self.buy(size=0) # size=0 表示全仓 + elif self.position["size"] > 0: + self.sell(size=0) # size=0 表示清仓 +``` + +完整 API 参考:[backtest_usage.md](./backtest_usage.md) +## 量化因子与组合管理 + +新增三大模块:**因子引擎**(19 个内置因子 + 自定义扩展)、**因子分析**(IC/分层/衰减)、**组合管理**(4 种优化器 + 再平衡引擎)。加上**高级回测增强**:可插拔滑点模型(方根冲击/成交量比例)、执行仿真(TWAP/VWAP/限价单)、归因分析(Brinson + 因子归因)。 + +```python +from easy_tdx.factor import FactorEngine, FactorAnalyzer, preprocess +from easy_tdx.portfolio import RebalanceEngine, FactorWeightedOptimizer +from easy_tdx.backtest import BacktestEngine +from easy_tdx.backtest.slippage import SquareRootSlippage +from easy_tdx.backtest.execution import TWAPExecution + +# 因子研究 +engine = FactorEngine() +factor_data = engine.compute_cross_section(data, ["momentum_20d", "rsi_14"]) +clean = preprocess(factor_data, ["momentum_20d", "rsi_14"]) +forward_returns = engine.compute_forward_returns(data, period=5) +report = FactorAnalyzer(clean, forward_returns).full_report("momentum_20d") +print(f"IC均值={report.mean_ic:.4f} ICIR={report.icir:.4f}") + +# 组合回测 +result = RebalanceEngine( + FactorWeightedOptimizer(), factor_name="momentum_20d", n_stocks=50, cash=1_000_000, +).run(data, start_date=20230101, end_date=20240101) +print(f"年化={result.performance['annual_return']:.2%}") + +# 高级回测(滑点 + 执行仿真) +engine = BacktestEngine( + MyStrategy, cash=1_000_000, + slippage_model=SquareRootSlippage(impact_coeff=0.1), + execution_model=TWAPExecution(n_bars=3), +) +``` + +详细用法和完整工作流示例:**[quantitative-guide.md](./quantitative-guide.md)** + diff --git a/docs/cli-finance.md b/docs/cli-finance.md new file mode 100644 index 0000000..4758664 --- /dev/null +++ b/docs/cli-finance.md @@ -0,0 +1,41 @@ +# CLI 参考 — 财务与公告 + +## 公告检索(巨潮资讯网) + +```bash +easy-tdx announcement 688017 # 默认 30 条,JSON 输出 +easy-tdx announcement 601088 --count 10 --page 2 # 翻页 +easy-tdx announcement 000001 --table # 表格输出(不截断 url) + +# 下载最新 5 条公告的 PDF 到 ./pdfs 目录 +easy-tdx announcement 601088 --count 5 --download 5 --download-dir ./pdfs +``` + +> 独立数据源(巨潮资讯网),无需连接 TDX 行情服务器即可使用。 +> 返回的 ``url`` 含 4 参数可直接打开,``pdf_url`` 为 PDF 直链。 + +## 财务 + +```bash +easy-tdx f10 600519 # 茅台利润表,最近 8 期(默认 lrb) +easy-tdx f10 600519 --type fzb --num 4 # 资产负债表,最近 4 期 +easy-tdx f10 000001 --type llb --table # 平安现金流量表,表格输出 +``` + +> 新浪财经数据源,``--type`` 支持 ``lrb``(利润表)/``fzb``(资产负债表)/``llb``(现金流量表)。 +> 独立于 TDX 行情服务器,``item_value`` 已转 float 可直接数值计算,同比附 ``{科目}_同比`` 列。 + +## 通达信原生 F10 与最新财务快照 + +走通达信协议(与 Web 层 ``/finance`` ``/company/*`` 端点同源),覆盖 ``f10``(新浪三表)之外的 F10 全文板块。完整示例见 [examples/06_finance/](../examples/06_finance/README.md)。 + +```bash +easy-tdx finance-info SH 600519 --table # 最新财务快照(30+ 项单期指标) +easy-tdx company-info SH 600519 # F10 板块目录(最新提示/公司概况/...) +easy-tdx company-info SH 600519 "公司概况" # 读板块完整正文(自动解析+读全,无需 offset/length) +easy-tdx company-info SH 600519 600519.txt # 也可直接传文件名(此时用 --offset/--length) +``` + +- ``finance-info``:最新一期财务快照,含股本结构、资产负债、利润、现金流、每股指标(37 字段)。与 ``f10`` 互补——前者是单期快照,后者是多期三表。 +- ``company-info``:**一个命令两种用法**——无板块名参数列 F10 板块目录,有板块名参数读正文。目录含 16 个板块(最新提示、公司概况、财务分析、股东研究、股本结构、资本运作、业内点评、行业分析、公司大事、研究报告、经营分析、主力追踪、分红扩股、高层治理、龙虎榜单、关联个股)。 +- 读正文时传板块名即可自动读取完整内容(按目录 length 分块循环,大板块如「公司大事」也能一次读全);``--offset``/``--length`` 仅在传文件名时生效。通达信多服务器目录版本不一致时自动重试命中。 diff --git a/docs/cli-indicators.md b/docs/cli-indicators.md new file mode 100644 index 0000000..b9e4390 --- /dev/null +++ b/docs/cli-indicators.md @@ -0,0 +1,127 @@ +# CLI 参考 — 技术指标与公式 + +## 技术指标 + +```bash +easy-tdx indicator-list --table # 列出所有可用指标 +easy-tdx indicator MACD -m SH -c 600519 --table # MACD +easy-tdx indicator KDJ -m SZ -c 000001 --table # KDJ +easy-tdx indicator RSI -m SH -c 600519 --table # RSI +easy-tdx indicator BOLL -m SH -c 600519 --table # BOLL 布林带 +easy-tdx indicator DMI -m SH -c 600519 --table # DMI 动向指标 +easy-tdx indicator ATR -m SH -c 600519 --table # ATR 真实波幅 +easy-tdx indicator WR -m SH -c 600519 --table # WR 威廉指标 +easy-tdx indicator CCI -m SH -c 600519 --table # CCI 顺势指标 +easy-tdx indicator BIAS -m SZ -c 000001 --table # BIAS 乖离率 +easy-tdx indicator BIAS_SIGNAL -m SH -c 600519 --table # 30日乖离率信号 +easy-tdx indicator OBV -m SZ -c 000001 --table # OBV 能量潮 + +# 多指标同时计算 +easy-tdx indicator MACD,KDJ,RSI,BOLL -m SH -c 600519 --count 10 --table + +# 自定义参数 +easy-tdx indicator MACD -m SH -c 600519 --params SHORT=10,LONG=22 + +# 分钟线指标 +easy-tdx indicator MACD -m SH -c 600519 --period 5MIN --count 50 + +# 仅输出指标值(不含 OHLCV) +easy-tdx indicator RSI -m SZ -c 000001 --no-ohlcv +``` + +## 通达信公式(v1.27) + +粘贴通达信公式即可计算 / 选股 / 回测——命名布尔输出自动成为买卖信号(名字含「买/卖」或 BUY/SELL 优先),30+ 白名单函数(MA/EMA/SMA/HHV/LLV/REF/CROSS/LONGCROSS/MACD/KDJ/RSI/BOLL/ATR…)向量化求值,无未来数据: + +```bash +# 公式计算(最后一根各列值 + 最近信号明细) +easy-tdx formula compute SH 600519 --formula "金叉: CROSS(MA(C,5), MA(C,20));" + +# 批量选股:信号在最后一根 = 1 的标的(--symbols 支持逗号分隔或 @文件) +easy-tdx formula screen --symbols SH:600519,SZ:000001 --formula "金叉: CROSS(MA(C,5), MA(C,20));" + +# 公式回测:买/卖列自动挑选,信号下一根开盘成交,输出绩效 + 评级 + 评分 +easy-tdx formula backtest SH 600519 --file my_formula.txt +``` + +## 捉妖大师(重点) + +捉妖大师是多周期涨幅共振指标,通过 20/60/120 日涨幅及指数平滑判断短中长线趋势是否同向,用于筛选趋势刚启动的强势股。 + +```bash +easy-tdx indicator ZHUOYAO -m SH -c 600519 --count 30 --table + +# 自定义周期参数 +easy-tdx indicator ZHUOYAO -m SZ -c 000001 --params N1=90,N2=45,N3=15 + +# 结合其他指标一起看 +easy-tdx indicator ZHUOYAO,MACD,KDJ -m SH -c 600519 --count 20 --table +``` + +输出列说明: + +| 列名 | 含义 | +|------|------| +| `ZY_LONG` | 长线 — 120 日涨幅的 10 日指数平滑 | +| `ZY_MID` | 中线 — 60 日涨幅(%) | +| `ZY_SHORT` | 短线 — 20 日涨幅(%) | +| `ZY_TREND` | 趋势 — 中线的 10 日指数平滑 | + +**核心信号:** 四线全部 > 0 且短线 > 中线 > 长线 = 短中长趋势完全一致向上,是强势股特征。详见 [捉妖大师指标详解](./indicator-zhuoyao.md)。 + +## 30日乖离率信号(重点) + +30日乖离率信号指标,在标准乖离率(BIAS)基础上叠加短/长信号线,通过三者位置关系判断趋势方向和转折点。源自通达信经典指标。 + +```bash +easy-tdx indicator BIAS_SIGNAL -m SH -c 600519 --count 60 --table + +# 自定义周期参数 +easy-tdx indicator BIAS_SIGNAL -m SZ -c 000001 --params P=5,M=20 + +# 结合其他指标一起看 +easy-tdx indicator BIAS_SIGNAL,MACD,KDJ -m SH -c 600519 --count 30 --table +``` + +输出列说明: + +| 列名 | 含义 | +|------|------| +| `BS_X` | M日乖离率 — 当前价格偏离30日均线的百分比 | +| `BS_SMA` | 短周期信号线 — 乖离率的 P 日均线,过滤短期噪音 | +| `BS_LMA` | 长周期信号线 — 乖离率的 M 日均线,捕捉中期趋势方向 | + +**核心信号:** X > S_SMA 且 X_LMA 上升 = 多头确认(通达信红色);S_SMA > X 或 X_LMA 下降 = 空头预警(通达信绿色)。多空判断非对称设计——多头需两个条件同时满足,空头只需其一,偏向保守预警。详见 [30日乖离率信号指标详解](./indicator-bias-signal.md)。 + +```python +# Python API 用法 +from easy_tdx import MacClient, Market + +with MacClient.from_best_host() as c: + df = c.get_stock_kline_with_indicators( + Market.SH, "600519", + indicators=["BIAS_SIGNAL"], + count=60, + ) + # df 包含: datetime, open, close, high, low, vol, amount + # + BS_X, BS_SMA, BS_LMA +``` + +支持 34 个指标:MACD, KDJ, RSI, BOLL, DMI, ATR, WR, CCI, BIAS, BIAS_SIGNAL, OBV, VR, EMV, MFI, BRAR, ASI, TRIX, DPO, MTM, ROC, EXPMA, BBI, PSY, DFMA, CR, KTN, XSII, MASS, TAQ, ZHUOYAO, SAR, VWAP, AROON, FK。 + +```python +# Python API 用法 +from easy_tdx import MacClient, Market + +with MacClient.from_best_host() as c: + df = c.get_stock_kline_with_indicators( + Market.SH, "600519", + indicators=["ZHUOYAO"], + count=30, + ) + # df 包含: datetime, open, close, high, low, vol, amount + # + ZY_LONG, ZY_MID, ZY_SHORT, ZY_TREND +``` + +支持 34 个指标:MACD, KDJ, RSI, BOLL, DMI, ATR, WR, CCI, BIAS, BIAS_SIGNAL, OBV, VR, EMV, MFI, BRAR, ASI, TRIX, DPO, MTM, ROC, EXPMA, BBI, PSY, DFMA, CR, KTN, XSII, MASS, TAQ, ZHUOYAO, SAR, VWAP, AROON, FK。 + diff --git a/docs/cli-market.md b/docs/cli-market.md new file mode 100644 index 0000000..6d8372a --- /dev/null +++ b/docs/cli-market.md @@ -0,0 +1,95 @@ +# CLI 参考 — 行情数据 + +## 输出格式 + +`easy-tdx` 默认输出 JSON(一行一条记录),`--table` 切换表格,`--output csv` 输出 CSV。 + +## 基础 + +```bash +easy-tdx ping # 服务器测速 +easy-tdx version # 版本号 +``` + +## 行情 + +```bash +# K 线 +easy-tdx kline SZ 000001 --count 30 --table +easy-tdx kline SH 600519 --period 5MIN --adjust QFQ + +# 实时报价 +easy-tdx quote "SZ 000001,SH 600519" --table + +# 市场分类报价(按涨幅排序) +easy-tdx quote-list A --count 20 --table +easy-tdx quote-list KCB --sort TOTAL_AMOUNT --order ASC +easy-tdx quote-list CYB --count 50 +``` + +## 分时 / 成交 + +```bash +easy-tdx tick SZ 000001 --table +easy-tdx tick SH 600519 --days 5 +easy-tdx tick SZ 000001 --date 20250115 + +easy-tdx transaction SZ 000001 --count 100 --table +easy-tdx transaction SH 600519 --date 20250115 +``` + +## 板块 + +```bash +easy-tdx board-list --type GN --table +easy-tdx board-list --type HY --count 200 +easy-tdx board-members 881001 --table +easy-tdx belong-board SZ 000001 --table +easy-tdx board-summary 881001 --table # 板块汇总(成交额/主力净流入/涨跌家数) +easy-tdx board-summary 881001 --members --table # 含成分股明细 +easy-tdx board-ranking --type HY --top 10 --table # 行业板块排行 +easy-tdx board-ranking --type GN --sort-by amount # 概念板块按成交额排行 + +# 板块 N 日涨跌幅排行(默认全部,支持指定日期) +easy-tdx board-change-ranking --table # 行业 20 日涨跌幅排行 +easy-tdx board-change-ranking --type GN --days 10 --table # 概念 10 日涨跌幅排行 +easy-tdx board-change-ranking --type HY --date 20250530 --days 20 --table +easy-tdx board-change-ranking --type HY --top 10 --asc # 行业跌幅前10 +``` + +## 资金 / 监控 + +```bash +easy-tdx capital-flow SH 600519 --table +easy-tdx auction SZ 000001 --table +easy-tdx unusual SH --count 100 --table +easy-tdx market-stat --table +easy-tdx server-info --table +easy-tdx symbol-info SZ 000001 --table +``` + +## 中金所成交持仓排名(v1.29.1) + +```bash +easy-tdx ccpm IF --table # 最近有数据的交易日(缺省自动回溯) +easy-tdx ccpm IF --date 2026-09-02 # 指定交易日 +easy-tdx ccpm all --date 2026-08-28 --table # 全部 8 个品种一次抓取 +easy-tdx ccpm TL --refresh # 忽略本地缓存,强制重新抓取 +``` + +> 独立数据源(中金所官网),无需连接 TDX 行情服务器。品种:IF 沪深300 / IH 上证50 / IC 中证500 / IM 中证1000 股指期货,TS/TF/T/TL 为 2/5/10/30 年期国债期货。 +> 每个交易日收盘后约 16:15 发布,含该品种**全部合约 × 三类排名(成交量 / 持买单量·多单 / 持卖单量·空单)× 各前 20 名会员**; +> 数据发布后不可变,按日缓存到 `~/.easy_tdx/cache/ccpm/`,历史二次查询零网络。 +> JSON 输出为英文列名(vol/long_pos/short_pos 等,机器友好),`--table` 自动切换中文表头。 +> WebUI 对应「期货持仓排名」页(含新手科普),API 为 `GET /api/v1/ccpm/rank`。 + +## 扩展市场(港股/美股/期货) + +```bash +easy-tdx ex markets # 列出可用市场 +easy-tdx ex kline HK_MAIN_BOARD 00700 --count 30 --table # 港股 K 线 +easy-tdx ex kline US_STOCK AAPL --table # 美股 K 线 +easy-tdx ex quote US_STOCK TSLA --table # 美股报价 +easy-tdx ex quote-list HK_MAIN_BOARD --table # 港股商品列表 +easy-tdx ex tick HK_MAIN_BOARD 00700 --table # 港股分时 +``` diff --git a/docs/cli-screen.md b/docs/cli-screen.md new file mode 100644 index 0000000..0c54d0d --- /dev/null +++ b/docs/cli-screen.md @@ -0,0 +1,160 @@ +# 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` 同步最新数据。 + diff --git a/docs/cli.md b/docs/cli.md new file mode 100644 index 0000000..0d55d23 --- /dev/null +++ b/docs/cli.md @@ -0,0 +1,83 @@ +# CLI 命令总览 + +`easy-tdx` 全部命令速查表。按域的详细用法与示例见分域文档: + +| 域 | 文档 | +|------|------| +| 行情 / 分时 / 板块 / 资金 / 中金所 / 扩展市场 | [cli-market.md](./cli-market.md) | +| 公告 / 财务 / F10 | [cli-finance.md](./cli-finance.md) | +| 技术指标 / 通达信公式 | [cli-indicators.md](./cli-indicators.md) | +| 缠论分析 | [chanlun.md](./chanlun.md) | +| 回测 / 寻优 / 组合 / run-all | [cli-backtest.md](./cli-backtest.md) | +| 选股扫描 / 强势股排名 | [cli-screen.md](./cli-screen.md) | +| K 线仓库 / 离线数据 | [data-local.md](./data-local.md) | +| Web 服务(serve) | [web-api.md](./web-api.md) | + +## 命令汇总 + +| 命令 | 说明 | +|------|------| +| `ping` | 服务器延迟测速 | +| `version` | 版本号 | +| `kline` | K 线(日/周/月/分钟,支持复权) | +| `quote` | 实时报价(单只/批量) | +| `quote-list` | 市场分类排序报价(A/SH/SZ/KCB/CYB) | +| `tick` | 分时图(单日/多日/历史) | +| `transaction` | 逐笔成交 | +| `board-list` | 板块列表(行业/概念/风格) | +| `board-members` | 板块成分股报价 | +| `board-summary` | 板块汇总(成交额、主力净流入、涨跌家数) | +| `board-ranking` | 板块涨跌幅排行榜(行业/概念排行) | +| `board-change-ranking` | 板块 N 日涨跌幅排行(支持指定截止日期) | +| `belong-board` | 个股所属板块 | +| `capital-flow` | 资金流向 | +| `auction` | 集合竞价 | +| `unusual` | 市场异动 | +| `market-stat` | 全市场涨跌统计 | +| `server-info` | 服务器交易时段 | +| `symbol-info` | 个股特征快照 | +| `indicator` | 技术指标计算(34 个:MACD/KDJ/RSI/BOLL/DMI/ATR...) | +| `indicator-list` | 列出可用技术指标 | +| `chanlun` | 缠论分析(笔/中枢/线段/买卖点/背驰,支持多级别联立) | +| `indicator ZHUOYAO` | 捉妖大师信号(多周期 ROC 共振),详解见 [indicator-zhuoyao.md](./indicator-zhuoyao.md) | +| `indicator BIAS_SIGNAL` | 30 日乖离率信号,详解见 [indicator-bias-signal.md](./indicator-bias-signal.md) | +| `backtest` | 回测引擎(加载策略文件,输出绩效报告) | +| `portfolio` | 多标的组合回测(共享资金池,均等分配,汇总绩效) | +| `factor list` | 列出所有内置因子 | +| `factor analyze` | 因子分析(IC/分层/衰减) | +| `pfactor backtest` | 组合因子选股回测 | +| `run-all` | 批量运行所有策略并排名(绩效排名 + 综合评分 + 可选图表) | +| `optimize` | 参数网格寻优(单策略网格搜索,或 `--all` 一键寻优所有内置策略并排名) | +| `strategies` | 列出内置策略注册表(名称/中文标签/参数默认值/预设寻优网格) | +| `formula compute` | 通达信公式计算(命名布尔输出即买卖信号) | +| `formula screen` | 公式批量选股(信号在最后一根 = 1 的标的) | +| `formula backtest` | 公式回测(买/卖列自动挑选,输出绩效 + 评级 + 评分) | +| `warehouse sync` | 本地 K 线仓库增量同步(DuckDB,需 `easy-tdx[warehouse]`) | +| `warehouse query` | 仓库查询(默认忽略未收盘的临时 bar) | +| `warehouse stats` | 仓库统计(各标的行数/数据范围) | +| `warehouse check` | 仓库健康自检(缺口/除权跳变/新鲜度) | +| `ccpm` | 中金所成交持仓排名(官网每日发布,按日落盘缓存) | +| `announcement` | 公告检索(巨潮资讯网,独立数据源,支持下载 PDF) | +| `screen scan` | 策略选股扫描(纯离线,全市场信号扫描) | +| `screen rank` | 扫描结果回测排名(按夏普/回撤等指标排序) | +| `screen strength` | 强势股排名(5/20/60 日涨幅加权,steady/breakout/balanced 三预设) | +| `serve` | 启动 Web API 服务器(REST + WebSocket,需 `easy-tdx[web]`) | +| `f10` | 财报三表(新浪:利润表/资产负债表/现金流量表) | +| `finance-info` | 最新财务快照(通达信协议,30+ 项单期指标) | +| `company-info` | F10 公司信息(无板块名列目录 / 有板块名读正文) | +| `fund-flow` | 历史资金流向(CLI 暂未实现,Web API `/fund-flow/history` 可用) | +| `ex kline` | 扩展市场 K 线 | +| `ex quote` | 扩展市场报价 | +| `ex quote-list` | 扩展市场商品列表 | +| `ex tick` | 扩展市场分时 | +| `ex markets` | 列出可用扩展市场 | +| `offline home` | 检测通达信安装目录 | +| `offline daily` | A 股日线(本地 .day 文件) | +| `offline sync-daily` | 从服务端同步单只股票日线到本地 .day 文件 | +| `offline sync-all` | 一键同步沪深全市场日线(扫描本地 .day 文件) | +| `offline min` | 分钟线(本地 .5/.lc1/.lc5 文件) | +| `offline ex-files` | 列出扩展市场可用文件 | +| `offline ex-daily` | 扩展市场日线(期货/港股/外盘) | +| `offline gbbq` | 股本变迁数据 | +| `offline financial` | 历史财务数据 | +| `offline blocks` | 自定义板块数据 | diff --git a/docs/data-local.md b/docs/data-local.md new file mode 100644 index 0000000..b83b118 --- /dev/null +++ b/docs/data-local.md @@ -0,0 +1,88 @@ +# 本地数据:K 线仓库与离线文件 + +## 本地 K 线仓库(v1.26) + +行情沉淀为 DuckDB 单文件列存(可选依赖:`pip install easy-tdx[warehouse]`),增量同步 + 临时收盘价状态机 + 健康自检: + +```bash +easy-tdx warehouse sync --symbols SH:600519,SZ:000001 # 首次全量,此后只补尾部 +easy-tdx warehouse query SH 600519 --count 30 # 默认忽略未收盘的临时 bar +easy-tdx warehouse stats # 各标的行数 / 数据范围 +easy-tdx warehouse check # 缺口 / 除权跳变 / 新鲜度体检 +``` + +## 离线数据 CLI + +从本地通达信安装目录直接读取数据文件,无需网络连接: + +```bash +easy-tdx offline home # 检测通达信安装目录 +easy-tdx offline daily SH 600000 --count 10 --table # A 股日线 +easy-tdx offline min SZ 000001 --type lc5 --table # 分钟线(5min/lc1/lc5) +easy-tdx offline ex-files --table # 列出扩展市场可用文件 +easy-tdx offline ex-daily 38#2_CPI --count 5 --table # 扩展市场日线(期货/港股/外盘) +easy-tdx offline gbbq C:\new_jyplug\T0002\hq_cache\gbbq --table # 股本变迁 +easy-tdx offline financial C:\new_jyplug\vipdoc\fin\gpcw20260331.dat # 历史财务 +easy-tdx offline blocks C:\new_jyplug\T0002\blocknew --table # 自定义板块 +``` + +从服务端获取最新日线并写入本地 .day 文件,替代通达信内置下载功能: + +```bash +# 同步单只股票日线(自动增量/全量) +easy-tdx offline sync-daily SZ 000001 +easy-tdx offline sync-daily SH 600519 --vipdoc C:\new_jyplug\vipdoc + +# 一键同步沪深全市场(每天一条命令) +easy-tdx offline sync-all +``` + +> 建议在通达信关闭时执行 sync 命令,避免文件被锁定。空文件自动全量下载,已有数据只做增量追加。 + + +## 离线数据读取(Python) + +无需网络,从本地通达信安装目录直接读取: + +```python +from easy_tdx.offline import detect_tdx_home, read_daily_bars, find_daily_bar_file +from easy_tdx import Market + +home = detect_tdx_home() +filepath = find_daily_bar_file(Market.SH, "600000") +bars = read_daily_bars(filepath) +``` + +支持:日线、分钟线、扩展市场日线、板块、股本变迁、历史财务数据。 + +## 离线数据写入同步(Python) + +从服务端获取最新数据并追加写入本地通达信数据文件: + +```python +from easy_tdx.offline import ( + encode_daily_bar, append_daily_bars, get_last_bar_date, + encode_5min_bar, append_5min_bars, + encode_lc_min_bar, append_lc_min_bars, +) +from easy_tdx import Market +from easy_tdx.client import TdxClient + +# 追加日线到 .day 文件(自动跳过重复日期) +from easy_tdx.offline import sync_daily_bars_from_security_bars + +# 手动编码单条记录 +bar_bytes = encode_daily_bar(bar, price_coeff=0.01, vol_coeff=0.01) + +# 获取文件末尾日期 +last_date = get_last_bar_date("C:/new_jyplug/vipdoc/sh/lday/sh600000.day") +``` + +v1.5.0 起可通过 CLI 直接使用: + +```bash +easy-tdx offline daily SH 600000 --count 10 --table +easy-tdx offline ex-files --table +easy-tdx offline ex-daily 29#A1801 --table +``` + diff --git a/docs/images/demo/1.png b/docs/images/demo/1.png new file mode 100644 index 0000000000000000000000000000000000000000..807a97f36992bc417cd41ff821e1480760bc9ed4 GIT binary patch literal 168546 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 {jYaC2 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%0A{>7oM=s9n_V+7!t7W+u2J9N@WT?t64Z`Zg= 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∋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 literal 0 HcmV?d00001 diff --git a/docs/images/demo/3.png b/docs/images/demo/3.png new file mode 100644 index 0000000000000000000000000000000000000000..93c41f42ce9234ecca7a1d7a2a1fe7c1ef402b0d GIT binary patch literal 177862 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�xVm>md{MvBV7i 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 S^)LRC+2KP+59X>_UH&h_L+$1O literal 0 HcmV?d00001 From d8b3a1afb5bb0abbb775c4d8a66643019a2dbcb4 Mon Sep 17 00:00:00 2001 From: awayings Date: Tue, 8 Sep 2026 23:21:30 +0800 Subject: [PATCH 2/6] =?UTF-8?q?docs:=20README=20Web=20=E7=AB=A0=E6=8B=86?= =?UTF-8?q?=E8=87=B3=20web-api/web-ui=EF=BC=8CWebSocket=20=E5=B8=A7?= =?UTF-8?q?=E8=A7=84=E8=8C=83=E5=B9=B6=E5=85=A5=20web-api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - web-api.md:REST/WebSocket/SSE 端点与示例;吸收 api_reference.md 的 WebSocket 帧表/控制消息/行为约定/前端接入,消除两处互补重复 - web-ui.md:行情终端与回测工作台零代码操作手册(原错位嵌套在 「本地 K 线仓库」章节下的 Web UI 块,补全章节结构) Co-Authored-By: Claude --- docs/web-api.md | 269 ++++++++++++++++++++++++++++++++++++++++++++++++ docs/web-ui.md | 101 ++++++++++++++++++ 2 files changed, 370 insertions(+) create mode 100644 docs/web-api.md create mode 100644 docs/web-ui.md diff --git a/docs/web-api.md b/docs/web-api.md new file mode 100644 index 0000000..c19733b --- /dev/null +++ b/docs/web-api.md @@ -0,0 +1,269 @@ +# Web API(REST + WebSocket) + +## 概述 + +将 easy-tdx 暴露为 REST + WebSocket 服务,供前端、其他语言或远程调用。无需额外注册,零配置启动。 + +## 安装 + +```bash +# 标准安装 +pip install easy-tdx[web] + +# 开发模式(从源码安装,支持热重载) +pip install -e ".[web]" +``` + +## 快速启动 + +```bash +# 启动 Web API 服务器(自动连接最优 TDX 服务器) +easy-tdx serve + +# 启动后浏览器打开 http://127.0.0.1:8000/docs 查看完整 API 文档(Swagger UI) +# 也可以访问 http://127.0.0.1:8000/redoc 查看 ReDoc 格式文档 + +# 指定端口和 TDX 服务器 +easy-tdx serve --port 8080 --tdx-host 119.147.212.81 + +# 开发模式(代码修改后自动重载) +easy-tdx serve --reload +``` + +> 💡 启动后访问 **http://127.0.0.1:8000/docs** 可以看到完整的交互式 API 文档,支持在线调试每个接口。 + +## REST API 示例 + +```bash +# ── 基础行情 ── +# 获取深圳市场证券数量 +curl "http://localhost:8000/api/v1/security/count?market=SZ" + +# 获取股票K线 +curl "http://localhost:8000/api/v1/bars?market=SZ&code=000001&category=DAY&count=100" + +# 批量获取实时行情 +curl -X POST "http://localhost:8000/api/v1/quotes" \ + -H "Content-Type: application/json" \ + -d '{"stocks": [{"market": "SZ", "code": "000001"}, {"market": "SH", "code": "600000"}]}' + +# 市场统计 +curl "http://localhost:8000/api/v1/market/stat" + +# 全市场强势股排名(基于本地 vipdoc 数据,扫描约 30-60 秒) +# steady = 中长期稳健 / breakout = 近期妖股 / balanced = 均衡 +curl "http://localhost:8000/api/v1/market/strength?preset=breakout&top_n=20" + +# 自定义权重 + 过滤低流动性(日均成交额 ≥ 5000 万) +curl "http://localhost:8000/api/v1/market/strength?w5=0.5&w20=0.3&w60=0.2&min_amount=50000000&top_n=30" + +# 板块信息(标准协议) +curl "http://localhost:8000/api/v1/block?filename=block_gn.dat" + +# ── 板块分析(MAC 协议)── +# 行业板块列表 +curl "http://localhost:8000/api/v1/board-mac/list?board_type=HY&count=50" + +# 板块成分股(按涨幅排序) +curl "http://localhost:8000/api/v1/board-mac/members?board_symbol=881001&count=20" + +# 个股所属板块 +curl "http://localhost:8000/api/v1/board-mac/belong?market=SZ&code=000001" + +# 板块摘要(含主力净流入、涨跌家数) +curl "http://localhost:8000/api/v1/board-mac/summary?board_symbol=881001" + +# 行业板块涨幅排名 Top 10 +curl "http://localhost:8000/api/v1/board-mac/ranking?board_type=HY&top_n=10" + +# 板块 20 日涨幅排行 +curl "http://localhost:8000/api/v1/board-mac/change-ranking?board_type=HY&days=20&top_n=10" + +# ── 资金 / 信息 ── +# 个股资金流向(主力/散户净流入) +curl "http://localhost:8000/api/v1/mac/capital-flow?market=SH&code=600519" + +# 个股基本信息快照 +curl "http://localhost:8000/api/v1/mac/symbol-info?market=SZ&code=000001" + +# 服务器交易时段信息 +curl "http://localhost:8000/api/v1/mac/server-info" + +# ── 公告检索(巨潮资讯网,独立数据源)── +# 检索公司公告(无需 TDX 行情服务器) +curl "http://localhost:8000/api/v1/announcements?code=688017&count=30&page=1" +# 返回每条含 url(4 参数可直点打开)和 pdf_url(PDF 直链): +# {"data": [{"title":"...","type":"...","date":"...","url":".../detail?stockCode=...","pdf_url":"http://static.cninfo.com.cn/.../xxx.PDF",...}], "count": 30} + +# ── 财报三表(新浪财经,独立数据源)── +# 利润表(type: lrb/fzb/llb) +curl "http://localhost:8000/api/v1/sina/financial-report?code=600519&type=lrb&num=8" +# 返回每行一期(最新在前),列为科目名(float)+ {科目}_同比(如有): + +# ── 排行 / 竞价 / 异动 ── +# 全 A 涨幅排行前 20 +curl "http://localhost:8000/api/v1/mac/quote-list?category=A&count=20&sort_type=CHANGE_PCT" + +# 集合竞价数据 +curl "http://localhost:8000/api/v1/mac/auction?market=SZ&code=000001" + +# 市场异动行情 +curl "http://localhost:8000/api/v1/mac/unusual?market=SH&count=50" + +# ── 扩展市场(期货/港股/美股)── +# 港股 K 线 +curl "http://localhost:8000/api/v1/ex/bars?market=HK_MAIN_BOARD&code=00700&category=DAY&count=30" + +# 美股实时报价 +curl "http://localhost:8000/api/v1/ex/quote?market=US_STOCK&code=AAPL" + +# ── 技术指标 ── +# 列出所有可用指标 +curl "http://localhost:8000/api/v1/indicator/list" + +# 计算 MACD + KDJ 指标 +curl -X POST "http://localhost:8000/api/v1/indicator/compute" \ + -H "Content-Type: application/json" \ + -d '{"data": [{"open":10,"close":10.5,"high":11,"low":9.5,"vol":1000}], "indicators": ["MACD", "KDJ"]}' + +# ── 缠论分析 ── +curl -X POST "http://localhost:8000/api/v1/chanlun/analyze" \ + -H "Content-Type: application/json" \ + -d '{"market": "SZ", "code": "000001", "category": "DAY", "count": 200}' + +# ── 板块总览(一次取全部板块:当日涨跌幅 + 涨速 + 3/5/20日/YTD 涨幅 + 领涨股,服务端 15s 缓存)── +# board_type: HY 行业一级 / HY2 行业二级 / GN 概念 / FG 风格 / DQ 地区 +curl "http://localhost:8000/api/v1/board-mac/overview?board_type=HY" +curl "http://localhost:8000/api/v1/board-mac/overview?board_type=GN" + +# ── 回测任务(WebUI 回测工作台同款后端)── +# 列出内置策略及参数 schema +curl "http://localhost:8000/api/v1/backtest/strategies" +# 提交异步回测(strategy 见 /backtest/strategies;完整字段与 portfolio/multi/optimize/wf/evaluate +# 各端点的请求体以 /docs 的 Swagger 为准),返回 task_id +curl -X POST "http://localhost:8000/api/v1/backtest/run/async" \ + -H "Content-Type: application/json" \ + -d '{"strategy": "ma_cross", "symbol": "SZ:000001", "category": "DAY", "count": 2000}' +# 轮询任务结果(对比页/导出亦走 /backtest/tasks) +curl "http://localhost:8000/api/v1/backtest/tasks/" + +# ── 策略库(保存的策略持久化 SQLite)── +curl "http://localhost:8000/api/v1/strategies" + +# ── 自选股 ── +curl "http://localhost:8000/api/v1/watchlist" +curl -X POST "http://localhost:8000/api/v1/watchlist" \ + -H "Content-Type: application/json" -d '{"market": "SH", "code": "600519", "name": "贵州茅台"}' + +# ── AI 解读(模型 Key 只存本地 ~/.easy_tdx/llm.json)── +curl "http://localhost:8000/api/v1/llm/config" # 当前配置 + Provider 预设 +curl -X POST "http://localhost:8000/api/v1/llm/chat/async" \ + -H "Content-Type: application/json" \ + -d '{"prompt": "解读这份回测报告:..."}' # 后台任务,GET /llm/chat/tasks/{id} 轮询 + +# ── 交易时段(自动刷新门控用)── +curl "http://localhost:8000/api/v1/market/session" +``` + +## WebSocket 实时行情 + +`/api/v1/ws/realtime/{symbol}`(v1.28 起接通数据源):连接即订阅指定标的,服务端 +经 `RealtimeDataFeed`(按 `interval` 秒轮询五档快照 → `EventBus`)推送 tick 帧; +连接断开自动退订,无人订阅时完全停止轮询。盘外时段默认只睡不拉(交易时段过滤), +本地冒烟/演示可配合 `EASY_TDX_E2E_MOCK=1` 的合成行情随时验证(见 +`scripts/ws_smoke.py`)。 + +```javascript +const ws = new WebSocket("ws://localhost:8000/api/v1/ws/realtime/SZ000001"); + +ws.onmessage = (event) => { + const frame = JSON.parse(event.data); + if (frame.type === "tick") { + // {type:"tick", symbol:"SZ000001", market:"SZ", code:"000001", + // price:10.5, volume:12345, ts:1760000000.0, + // open, high, low, pre_close, amount, name} + console.log(frame.symbol, frame.price, frame.ts); + } else if (frame.type === "ping") { + // 服务端 30s 空闲心跳,忽略即可(客户端无须回包) + } +}; + +// 动态订阅更多标的(服务端回 {"type":"status","msg":"subscribed SH600000"}) +ws.send(JSON.stringify({action: "subscribe", symbol: "SH600000"})); +// 退订 +ws.send(JSON.stringify({action: "unsubscribe", symbol: "SH600000"})); +``` + +### 服务端推送帧(JSON) + +| type | 触发 | 字段 | +|------|------|------| +| `tick` | 轮询到标的的最新快照(价格/量变化才推,约 `interval` 秒一拍) | `symbol`、`market`、`code`、`price`、`volume`、`ts`(epoch 秒)、`open`、`high`、`low`、`pre_close`、`amount`、`name` | +| `ping` | 连续 30s 未收到客户端消息的心跳 | —(客户端忽略即可,无须回包) | +| `status` | 客户端 subscribe/unsubscribe 的确认 | `msg`(如 `subscribed SH600000`) | +| `error` | 非法 JSON / 未知 action / 超出订阅上限 | `msg` | + +### 客户端控制消息(JSON 文本帧) + +```json +{"action": "subscribe", "symbol": "SH600000"} +{"action": "unsubscribe", "symbol": "SH600000"} +``` + +### 行为约定 + +- **连接即订阅** path 上的 symbol;断开自动退订全部标的。 +- **按需轮询**:订阅集合为空时服务端不产生任何行情请求;去重后标的总数上限 + 80(`get_stock_quotes` 协议约束)。 +- **交易时段**:默认 A 股时段外只睡不拉(无 tick 帧,心跳照发);mock 模式 + (`EASY_TDX_E2E_MOCK=1`)不受限制。 +- **背压**:消费过慢时丢最旧快照保最新,不积压。 +- 环境变量:`EASY_TDX_WS_INTERVAL`(轮询间隔秒数,默认 3.0)。 + +浏览器接入建议(自动重连 + 心跳容忍):`onclose` 后指数退避重连(参考 +`web-ui/src/stores/quotes.ts` 对 SSE 的同类处理);`{"type":"ping"}` 心跳帧直接 +忽略、不回包;连续 N 秒无任何帧(含 ping)再视为僵死连接主动重连。 + +### 前端接入方式(自动重连 + 心跳容忍) + +```typescript +function connectRealtime(symbol: string, onTick: (f: TickFrame) => void) { + let retry = 0 + let ws: WebSocket | null = null + const open = () => { + ws = new WebSocket(`ws://${location.host}/api/v1/ws/realtime/${symbol}`) + ws.onmessage = (e) => { + const frame = JSON.parse(e.data) + if (frame.type === 'tick') { retry = 0; onTick(frame) } // ping/status 忽略 + } + ws.onclose = () => { + retry += 1 + setTimeout(open, Math.min(1000 * 2 ** (retry - 1), 30_000)) // 指数退避 + } + } + open() + return () => ws?.close() +} +``` + +> 说明:看板/自选页的实时刷新已由 SSE `/stream/quotes`(全量快照、单连接共享) +> 承担;WS 通道定位是**按需订阅单标的 tick 事件**(后续实时策略信号的接入点), +> 两条链路按场景选用,不要求同时连接。手动冒烟见 `scripts/ws_smoke.py`。 + + +## API 文档 + +启动服务后访问: +- Swagger UI: http://localhost:8000/docs +- ReDoc: http://localhost:8000/redoc + +## 编程 API + +```python +from easy_tdx.web import create_app +import uvicorn + +app = create_app(host="119.147.212.81", port=7709) +uvicorn.run(app, host="0.0.0.0", port=8000) +``` + diff --git a/docs/web-ui.md b/docs/web-ui.md new file mode 100644 index 0000000..b36da9a --- /dev/null +++ b/docs/web-ui.md @@ -0,0 +1,101 @@ +# Web UI 使用手册 + +## 概述 + +行情终端 + 回测可视化 Web UI(v1.17 新增,v1.23 升级为行情终端)。不想写命令行?用浏览器。`easy-tdx serve` 一条命令启动,浏览器自动打开 `http://localhost:8000`。 + +Web UI 截图 1 + +Web UI 截图 2 + +Web UI 截图 3 + +Web UI 包含两大模块: + +- **行情终端**——侧边栏专业终端布局(行情:市场看板 / 行业总览 / 概念总览 / 自选行情 / 龙头池 / 期货持仓排名): + - **市场看板**:五大指数实时行情(SSE 推送)、全市场涨跌统计(涨/跌/平/涨停/跌停 + 堆叠条)、行业/概念板块热度榜、涨幅榜/跌幅榜、两市异动雷达(加速拉升/封涨停板/大单托盘等),点击个股打开五档盘口 + 分时/日K 对话框; + - **行业总览 / 概念总览**(v1.32.1):全部行业(一级/二级可切)/概念板块一屏尽览——板块广度统计条、涨跌幅分布直方图、热力图与表格双视图、搜索过滤、涨幅/跌幅/涨速异动三榜、翻红/翻绿轮动时间线,30s 自动刷新(休市暂停);点击板块复用详情弹窗(分时/日K + 成分股涨跌榜直达个股); + - **自选行情**:输入 6 位代码一键加自选(SQLite 持久化),全表实时刷新(SSE),行内迷你分时图,点击行看个股详情; + - **龙头池**:159 只核心龙头名单一键只扫龙头(名单仅为扫描范围,不构成任何推荐); + - **期货持仓排名**(v1.29.1):中金所每日成交/持仓前 20 名会员一键采集(品种下拉 + 日期选择 + 自动回溯最近交易日开关),合约页签自动标注主力,前 20 名合计多单/空单/净持仓概览,三组排名并排表格;附「品种一览」「多单空单加减仓怎么看」新手科普(重点:排名看不出套保还是投机,空单多 ≠ 看空市场); + - **实时推送架构**:后端单条轮询循环 fan-out 到所有 SSE 连接(交易时段 ~8s 一拍,盘外降频 60s,无人订阅自动休眠),前端指数退避重连。 +- **回测工作台**——浏览器里选标的、挑策略、调参数,K 线买卖点、净值回撤、25 项绩效指标一目了然。支持组合回测、参数网格寻优、多策略结果对比、策略库(SQLite 持久化)与多策略资金分仓、信号雷达、Walk-Forward / 一条龙附加分析、**AI 解读与解读历史**(分析:单标的回测 / 组合回测 / 参数寻优 / 结果对比 / 策略库 / 信号雷达 / AI 解读历史),全程零代码。 + +## 启动 + +**前置条件:** + +```bash +# 需安装 web 可选依赖(FastAPI + Uvicorn) +pip install -e ".[web]" +``` + +**启动(一条命令):** + +```bash +# 启动后端 + 自动打开浏览器(默认 http://localhost:8000) +easy-tdx serve + +# 自定义端口/不自动开浏览器 +easy-tdx serve --port 8080 --no-open-browser +``` + +> 后端启动后约 1-2 秒会自动弹出浏览器。前端界面已编译进 `web-ui/dist/`,由后端同源托管,无需单独跑前端开发服务器。后端行情连接失败时回测路由仍可用(用内联数据),但取行情功能需要后端连通通达信服务器。 + +## 桌面版(EXE) + +不想装 Python?下载 EXE 直接用(面向零基础用户): + +Windows 用户可以下载打包好的单一 EXE(约 80-150MB),双击即可使用,无需安装 Python/Node 或任何依赖: + +1. 到 [Releases 页面](../../releases) 下载最新的 `easy-tdx-<版本>-windows.exe` +2. 双击运行(首次会被 SmartScreen 拦截,点"更多信息 → 仍要运行") +3. 等待 2-5 秒,浏览器自动打开回测界面 +4. 右下角任务栏出现小图标,右键 → "退出" 可关闭 + +EXE 打包方法见 [`packaging.md`](./packaging.md)。 + +## 回测工作台页面 + +打开浏览器后,「分析」分组下是回测工作台的核心页面: + +### 1. 单标的回测(首页 `/`) + +左侧配置面板从上到下填写,右侧自动出图: + +- **取行情**:选市场(深/沪/北),填 6 位代码,选周期(日线/周线/分钟线),设日期范围(默认最近 3 年),点「取行情」。超过 800 根会自动翻页拼接 +- **选策略**:下拉选 18 个内置策略之一(双均线交叉、MACD、布林带、RSI、KDJ、唐安奇通道、CCI 等),选中后参数表单自动出现,按推荐范围调参 +- **资金与成本**:初始资金、佣金率、滑点、成交模式(默认 next_open 下一根开盘成交) +- 点「开始回测」,右侧依次出:K 线主图(红三角=买入、绿钉=卖出)、净值曲线与回撤双轴图、25 项绩效指标表(总收益/夏普/最大回撤/胜率/盈亏比/Ulcer/VaR/SQN 等)、成交记录明细 +- 结果区右上角有「💾 保存策略」按钮,把当前策略 + 标的 + 成绩快照存进策略库,下次直接载入或参与组合回测 + +### 2. 组合回测(`/portfolio`) + +- 添加多只标的(如 SZ:000001、SH:600519),选策略和日期范围 +- 点「开始组合回测」,右侧出:组合整体绩效(加权收益率)、组合净值曲线(各标的按日期对齐求和)、各标的净值归一化叠加对比图、各标的绩效横向对比表 +- 同样有「保存策略」按钮,可把整个组合配置存进策略库 + +### 3. 参数寻优(`/optimize`) + +- 先取行情(同单标的),选策略 +- 勾选 1-2 个想寻优的参数,填入取值列表(逗号分隔,如 fast 填 `5,10,20,30`),页面实时显示网格点数(上限 200) +- 点「开始寻优」,右侧出:最优结果摘要、参数热力图(2 参数时,颜色映射收益率)、所有网格点排名表 +- 排名表每行有「查看」按钮,点击跳转单标的回测页,自动填充该参数组合跑完整回测 + +### 4. 结果对比(`/compare`) + +- 左侧列出最近 20 个已完成的回测任务(含单标的和组合) +- 勾选 2-4 个,右侧出:归一化净值叠加图(初始=1,看相对走势)、8 项核心指标横向对比表(总收益/夏普/最大回撤/胜率/盈亏比/交易数/年化/波动率) + +### 5. 策略库(`/strategies`,v1.17.11 新增) + +- 保存你觉得不错的策略,下次直接载入或重跑。数据存在本地 SQLite 单文件(`~/.easy_tdx/strategies.db`,重启不丢) +- 每张卡片展示策略名、标的、保存时的成绩快照(总收益/夏普/回撤)、标签、备注、创建时间 +- **载入**:点「载入」跳转对应回测页(单标的/组合),自动回填标的、日期、策略参数,可直接重跑 +- **多策略组合回测**:勾选多个单标的策略(卡片左上角复选框),点顶部「组合回测(N)」——每个策略各拿 1/N 资金、各跑在它保存时的原标的上(取最新行情),净值曲线按日期对齐求和,看综合表现。结果区展示:组合净值曲线、25 项完整绩效指标(与单标的同口径)、各策略绩效对比表、净值叠加图、各策略当前持仓表(回测结束时谁还套着票) + +## 注意事项 + +> ⚠️ **任务不持久化**:回测结果存在后端进程内存,重启 `easy-tdx serve` 后清空。对比页只能选当前运行期间产生的任务。**策略库除外**——保存到策略库的策略持久存在 SQLite,重启不丢。 + +技术栈:Vue 3 + Vite + TypeScript + Pinia + ECharts(按需引入,构建产物约 800KB)。前端代码在 `web-ui/` 目录,独立 `package.json`,不依赖 Python 环境。 From 36b586b0159919eab2cb1eb663b74033a5eebb1e Mon Sep 17 00:00:00 2001 From: awayings Date: Tue, 8 Sep 2026 23:21:35 +0800 Subject: [PATCH 3/6] =?UTF-8?q?docs:=20README=20Python=20API=20=E7=AB=A0?= =?UTF-8?q?=E6=8B=86=E8=87=B3=20python-api.md=EF=BC=88=E6=95=99=E7=A8=8B?= =?UTF-8?q?=EF=BC=89=EF=BC=8C=E6=9E=9A=E4=B8=BE/API=20=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E5=BD=92=E5=85=A5=E5=8F=82=E8=80=83=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - python-api.md:连接/MAC/统一客户端/标准协议/离线/缠论/公告/财报/实时轮询教程 - MAC 协议枚举(Period/Adjust/Category/BoardType/SortType/ExMarket)并入 field_mapping.md - MacClient/MacExClient 完整方法表并入 api_reference.md(TdxClient 表与正文重复,删除) Co-Authored-By: Claude --- docs/python-api.md | 421 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 421 insertions(+) create mode 100644 docs/python-api.md diff --git a/docs/python-api.md b/docs/python-api.md new file mode 100644 index 0000000..205ce45 --- /dev/null +++ b/docs/python-api.md @@ -0,0 +1,421 @@ +# Python API 使用指南 + +## 连接管理 + +所有客户端支持 `from_best_host()` 自动选最低延迟服务器: + +```python +from easy_tdx import MacClient + +with MacClient.from_best_host() as c: + df = c.get_stock_kline(...) +``` + +| 客户端 | 端口 | 覆盖范围 | +|--------|------|----------| +| `MacClient` / `AsyncMacClient` | 7709 | A 股行情(MAC 协议,推荐) | +| `MacExClient` / `AsyncMacExClient` | 7727 | 港股/美股/期货(MAC 协议) | +| `UnifiedTdxClient` / `AsyncUnifiedTdxClient` | 自动 | A 股 + 扩展市场统一入口 | +| `TdxClient` / `AsyncTdxClient` | 7709 | A 股行情(标准协议) | + +## MAC 协议(推荐) + +### 报价 + +```python +from easy_tdx import MacClient, Market, Category, SortType, SortOrder + +with MacClient.from_best_host() as c: + # 批量报价(最多 80 只/次) + df = c.get_stock_quotes([(Market.SH, "600519"), (Market.SZ, "000858")]) + + # 市场分类排序报价 + df = c.get_stock_quotes_list( + Category.A, count=20, + sort_type=SortType.CHANGE_PCT, + sort_order=SortOrder.DESC, + ) +``` + +返回列:`market, code, name` + 动态字段(`pre_close, open, high, low, close, vol, amount, turnover, vol_ratio` 等)。 + +### K 线(支持复权) + +```python +from easy_tdx import MacClient, Market, Period, Adjust + +with MacClient.from_best_host() as c: + # 日K前复权 + df = c.get_stock_kline(Market.SH, "600519", Period.DAILY, count=10, adjust=Adjust.QFQ) + # 5分钟线 + df = c.get_stock_kline(Market.SZ, "000001", Period.MIN_5, count=100) +``` + +返回列:`datetime, open, close, high, low, vol, amount`。 + +### 技术指标 + +自动获取 200+ 条历史数据预热 EMA,返回最后 `count` 条带指标的结果: + +```python +from easy_tdx import MacClient, Market, Period, Adjust +from easy_tdx.indicator import compute_indicators, list_indicators + +with MacClient.from_best_host() as c: + # 便捷方法:获取 K 线 + 计算指标一步完成(默认前复权) + df = c.get_stock_kline_with_indicators( + Market.SH, "600519", + indicators=["MACD", "KDJ", "RSI", "BOLL"], + count=30, + ) + # df 包含: datetime, open, close, high, low, vol, amount + # + MACD_DIF, MACD_DEA, MACD_HIST, KDJ_K, KDJ_D, KDJ_J, RSI, + # BOLL_UPPER, BOLL_MID, BOLL_LOWER + + # 自定义指标参数 + df = c.get_stock_kline_with_indicators( + Market.SH, "600519", + indicators=["MACD"], + params={"MACD": {"SHORT": 10, "LONG": 22}}, + ) + + # 独立使用:对已有 DataFrame 计算指标 + raw = c.get_stock_kline(Market.SH, "600519", Period.DAILY, count=200, adjust=Adjust.QFQ) + result = compute_indicators(raw, ["ATR", "CCI", "WR"], tail=30) + + # 查看所有可用指标 + for info in list_indicators(): + print(info["name"], info["description"], info["outputs"]) +``` + +支持 34 个技术指标: + +| 指标 | 输入 | 输出列 | +|------|------|--------| +| MACD | close | MACD_DIF, MACD_DEA, MACD_HIST | +| KDJ | close, high, low | KDJ_K, KDJ_D, KDJ_J | +| RSI | close | RSI | +| BOLL | close | BOLL_UPPER, BOLL_MID, BOLL_LOWER | +| DMI | close, high, low | DMI_PDI, DMI_MDI, DMI_ADX, DMI_ADXR | +| ATR | close, high, low | ATR | +| WR | close, high, low | WR1, WR2 | +| CCI | close, high, low | CCI | +| BIAS | close | BIAS1, BIAS2, BIAS3 | +| OBV | close, vol | OBV | +| VR | close, vol | VR | +| EMV | high, low, vol | EMV, EMV_MA | +| MFI | close, high, low, vol | MFI | +| BRAR | open, close, high, low | AR, BR | +| ASI | open, close, high, low | ASI, ASI_MA | +| TRIX | close | TRIX, TRIX_MA | +| DPO | close | DPO, DPO_MA | +| MTM | close | MTM, MTM_MA | +| ROC | close | ROC, ROC_MA | +| EXPMA | close | EXPMA_12, EXPMA_50 | +| BBI | close | BBI | +| PSY | close | PSY, PSY_MA | +| DFMA | close | DFMA_DIF, DFMA_DMA | +| CR | close, high, low | CR | +| KTN | close, high, low | KTN_UPPER, KTN_MID, KTN_LOWER | +| XSII | close, high, low | XSII_TD1, XSII_TD2, XSII_TD3, XSII_TD4 | +| MASS | high, low | MASS, MASS_MA | +| TAQ | high, low | TAQ_UP, TAQ_MID, TAQ_DOWN | +| ZHUOYAO | close | ZY_LONG, ZY_MID, ZY_SHORT, ZY_TREND | +| BIAS_SIGNAL | close | BS_X, BS_SMA, BS_LMA | +| SAR | high, low | SAR(抛物线转向/动态止损位) | +| VWAP | close, high, low, vol | VWAP(N日滚动成交量加权均价) | +| AROON | high, low | AROON_UP, AROON_DOWN, AROON_OSC | +| FK | close | FK(EMA(2) 突破斜率外推 EMA(42)) | + +### 分时 + +```python +with MacClient.from_best_host() as c: + df = c.get_tick_chart(Market.SH, "600519") # 单日分时 + df = c.get_tick_charts(Market.SH, "600519", days=3) # 多日分时(最多5天) + df = c.get_chart_sampling(Market.SH, "600519") # 240点缩略采样 +``` + +### 逐笔成交 + +```python +with MacClient.from_best_host() as c: + df = c.get_transactions(Market.SH, "600519", count=100) + df = c.get_transactions(Market.SH, "600519", count=100, date=20250115) +``` + +### 板块 + +```python +from easy_tdx import BoardSortColumn, BoardType + +with MacClient.from_best_host() as c: + df = c.get_board_list(BoardType.GN) # 概念板块 + df = c.get_board_list(sort_column=BoardSortColumn.SPEED) # 按涨速排序取涨速% + df = c.get_board_members("881001", sort_type=SortType.CHANGE_PCT) + df = c.get_belong_board(Market.SZ, "000001") # 个股所属板块 + + # 板块汇总:成交额、主力净流入、涨跌家数 + summary = c.get_board_summary("881001") + # summary = { + # "member_count": 82, + # "amount": 5823456000.0, # 板块总成交额(元) + # "vol": 412356789, # 板块总成交量(股) + # "main_net_amount": -123456.0, # 当日主力净流入 + # "main_net_3d": -567890.0, # 近3日主力净流入 + # "main_net_5d": -234567.0, # 近5日主力净流入 + # "up_count": 45, + # "down_count": 37, + # "members": DataFrame(...), # 成分股明细 + # } + + # 板块涨跌幅排行榜 + df = c.get_board_ranking(BoardType.HY, top_n=10, sort_by="change_pct") + df = c.get_board_ranking(BoardType.GN, top_n=20, sort_by="main_net_amount") + # 返回列:code, name, change_pct, amount, vol, main_net_amount, up_count, down_count, member_count + + # 板块 N 日涨跌幅排行(支持指定截止日期,默认全部) + df = c.get_board_change_ranking(BoardType.HY, days=20) + df = c.get_board_change_ranking(BoardType.GN, target_date=20250530, days=10, top_n=15) + # 返回列:code, name, close_end, close_start, change_pct +``` + +### 资金流向 + +```python +with MacClient.from_best_host() as c: + df = c.get_capital_flow(Market.SH, "600519") +``` + +返回列:`date, main_in, main_out, main_net, small_in/out/net, mid_in/out/net, large_in/out/net`。 + +### 监控 + +```python +with MacClient.from_best_host() as c: + df = c.get_auction(Market.SH, "600519") # 集合竞价 + df = c.get_unusual(Market.SH) # 市场异动 + df = c.get_symbol_info(Market.SZ, "000001") # 个股特征快照 + df = c.get_server_info() # 服务器交易时段 +``` + +`get_unusual` 返回列含 `unusual_type`(类型码)与 `desc`(中文描述),共 19 种类型 +(主力买卖/加速拉升/急速拉升/盘中强弱/竞价异动/涨跌停/大单盘口等)。类型码→名称 +可用顶层常量映射: + +```python +from easy_tdx import UNUSUAL_TYPE_NAMES + +df["type_name"] = df["unusual_type"].map(UNUSUAL_TYPE_NAMES) +``` + +## 扩展市场 + +```python +from datetime import date + +from easy_tdx import MacExClient, ExMarket, Period + +with MacExClient.from_best_host() as c: + count = c.goods_count(ExMarket.HK_MAIN_BOARD) + df = c.goods_list(ExMarket.HK_MAIN_BOARD, start=0, count=50) + df = c.goods_kline(ExMarket.US_STOCK, "AAPL", Period.DAILY, count=10) + df = c.goods_quotes([(ExMarket.HK_MAIN_BOARD, "00700")]) + df = c.goods_tick_chart(ExMarket.HK_MAIN_BOARD, "00700") + df = c.goods_transaction(ExMarket.HK_MAIN_BOARD, "00700", count=100) + df = c.goods_transaction_all(ExMarket.HK_MAIN_BOARD, "00700", date(2026, 7, 3)) # 港股当日全部逐笔 +``` + +> **逐笔成交排序**:通达信协议为**倒序**——`start=0` 指向最新一笔(收盘方向),`count=2000` 默认只取最近 2000 笔。港股单日成交常达数万笔(如 02715 约 1.3 万笔/日),若需当日全部成交,用 `goods_transaction_all`(仅港股股票类市场,自动按 1800/页翻页取全天,安全上限 9 万条;返回协议原生倒序,需正序展示自行 `df.iloc[::-1]`)。 + +## 统一客户端 + +```python +from easy_tdx import UnifiedTdxClient, ExMarket, Market, Period + +with UnifiedTdxClient() as client: + # A 股 -- 自动路由到 MacClient + df = client.get_stock_kline(Market.SH, "600519", Period.DAILY, count=5) + df = client.get_stock_quotes([(Market.SH, "600519")]) + df = client.get_board_list() + + # 扩展市场 -- 自动路由到 MacExClient + df = client.goods_kline(ExMarket.HK_MAIN_BOARD, "00700", Period.DAILY, count=5) +``` + +## 标准协议 + +```python +from easy_tdx import TdxClient, Market, KlineCategory + +with TdxClient.from_best_host() as c: + count = c.get_security_count(Market.SH) + stocks = c.get_security_list(Market.SH, start=0) + quotes = c.get_security_quotes([(Market.SH, "600000"), (Market.SZ, "000001")]) + bars = c.get_security_bars(Market.SZ, "002176", KlineCategory.DAY, 0, 100) + minute = c.get_minute_time_data(Market.SH, "600000") + trades = c.get_transaction_data(Market.SH, "600000", 0, 20) + flow = c.get_fund_flow(Market.SH, "600519") + blocks = c.get_block_info("block_gn.dat") + xdxr = c.get_xdxr_info(Market.SH, "600519") + stat = c.get_market_stat() +``` + +> **资金流口径注意**(Issue #55):`get_fund_flow` / `get_history_fund_flow` 按 0x0fb5 逐笔接口的"单笔成交额"分档,而该接口返回的记录是交易所真实逐笔**聚合**后的(实测 000001.SZ 单日约 17:1),分档看的也不是挂单额。结果:高价股小单档可不足成交额 1%、主力档常占 95%+,`main_net_inflow` 实质更接近"当日主动买卖总失衡"。东财/同花顺的"主力净流入"基于 L2 逐笔委托、按挂单额分档——两套口径**不可比**(实证同规则选股信号重合度仅约 14%),勿混用于同一张表或同一个因子。 + +`AsyncTdxClient` 提供对应的 `async def` 方法,接口一一对应。 + +## SecurityQuote 字段说明 + +`get_security_quotes()` 返回的 DataFrame 包含以下特殊字段: + +| 字段 | 类型 | 说明 | +|------|------|------| +| `trading_status` | int | 交易状态标志。`0x8020`(32800) = 停牌,其余值表示正常交易或集合竞价 | +| `open_amount` | float | 集合竞价成交金额(元)。仅个股有效,指数该字段无意义 | +| `server_time` | str | 服务器时间,格式 `HH:MM:SS.mmm` | +| `unknown_2` | int | 指数: 集合竞价成交金额/100;个股: 舍入残差≈0 | +| `unknown_3` | int | 个股: 集合竞价成交金额/100;指数: 负值/无意义 | +| `unknown_5-8` | int | 保留字段,恒为 0 | + +检测停牌: + +```python +df = c.get_security_quotes([(Market.SH, "600000")]) +is_suspended = df.iloc[0]["trading_status"] == 0x8020 +``` + + +## 公告检索(巨潮资讯网) + +独立数据源(巨潮资讯网 cninfo),无需连接 TDX 行情服务器即可检索公司公告。 +标准库 urllib 实现,零额外依赖。 + +```python +from easy_tdx.cninfo import CninfoClient + +client = CninfoClient() + +# 检索公告(默认 30 条,最新在前) +df = client.get_announcements("688017") +# → DataFrame[title, type, date, url, code, org_id, announcement_id, announcement_time, pdf_url] + +# 翻页 + 自定义数量 +df = client.get_announcements("601088", count=10, page=2) + +# 返回示例(url 含 4 参数可直点打开,pdf_url 为 PDF 直链): +# title type date url pdf_url +# 0 关于召开2025年年度股东大会... 股东大会 2025-06-14 .../detail?stockCode=688017&announcementId=... http://static.cninfo.com.cn/.../xxx.PDF +# 1 2024年年度报告 PDF 2025-03-28 .../detail?stockCode=688017&announcementId=... http://static.cninfo.com.cn/.../yyy.PDF +``` + +> - ``type`` 优先取 cninfo 的 ``announcementTypeName``;该字段对很多公告为 null +> (数据源限制),此时回退到 ``adjunctType``(如 "PDF"),再为空给空字符串。 +> - ``url`` 必须含 4 参数(``stockCode``/``announcementId``/``orgId``/``announcementTime``) +> 才能打开,少参数会 404。 +> - orgId 解析沿用 #19 修复:动态拉取官方映射表,查不到回退硬编码规则, +> 保证 601xxx 等非标 orgId 段也能正常查询。 + +### 下载公告 PDF + +```python +# 下载最新一条公告的 PDF 到当前目录 +df = client.get_announcements("601088", count=5) +path = client.download_pdf(df.iloc[0]) # 接受 Announcement 或 DataFrame 的一行 +print(path) # /abs/path/20260605_1225351400.PDF + +# 批量下载 +for _, row in df.iterrows(): + try: + path = client.download_pdf(row, dest_dir="./pdfs") + except Exception as e: + print(f"跳过(无附件或失败): {e}") +``` + +## 财报三表(新浪财经) + +独立数据源(新浪财经),无需连接 TDX 行情服务器即可获取利润表/资产负债表/现金流量表。 +标准库 urllib 实现,零额外依赖。 + +```python +from easy_tdx.sina import SinaClient + +client = SinaClient() + +# 利润表(默认 8 期,最新在前) +df = client.get_financial_report("600519", report_type="lrb") +# → DataFrame,每行一期,列 = [报告期, 营业总收入, 营业总收入_同比, ...] + +# 资产负债表 / 现金流量表(report_type 也接受中文别名:利润表/资产负债表/现金流量表) +df = client.get_financial_report("600519", report_type="fzb", num=4) +df = client.get_financial_report("600519", report_type="llb", num=4) + +# 返回示例(item_value 已转 float,可直接数值计算): +# 报告期 营业总收入 营业总收入_同比 营业收入 营业收入_同比 +# 0 2026-03-31 54702912385.23 0.06336 53909252220.51 0.06538 +# 1 2025-12-31 174000000000.00 0.10000 NaN NaN +``` + +> - ``item_value`` 是字符串(新浪原始格式),本实现转 float;空/非数值转 None +> - 有同比的科目附加 ``{科目}_同比`` 列(float 比例,如 0.06336 = +6.3%) +> - 大类标题行(如 ``流动资产``,原 ``item_value=""``)保留为 None,反映报表结构 + +## 实时行情轮询(RealtimeDataFeed) + +> ⚠️ 通达信协议**没有服务端推送**,只有请求/响应。本模块的「实时」是 **轮询五档快照近似** +> (默认约 3 秒延迟),适合盘中信号提醒、轻量监控;**不适合高频 / 逐笔撮合**。 + +`EventBus` 自身是纯发布/订阅管道,不会产生数据。要让 `RealtimeStrategy` 跑起来, +需要配合 `RealtimeDataFeed`:它自动完成 `get_stock_quotes → MarketEvent → bus.publish`。 + +```python +import asyncio +from easy_tdx.mac.client import AsyncMacClient +from easy_tdx.realtime import ( + EventBus, + RealtimeStrategy, + MarketEvent, + RealtimeDataFeed, +) + + +class MyStrategy(RealtimeStrategy): + def on_tick(self, event: MarketEvent) -> None: + print(f"{event.market}{event.code} price={event.price} vol={event.volume}") + + +async def main(): + bus = EventBus() + strategy = MyStrategy() + bus.subscribe("SZ000001", strategy.on_tick) # 注意:key 必须带市场前缀 + + feed = RealtimeDataFeed( + bus=bus, + symbols=[(0, "000001"), (1, "600519")], # [(Market.SZ, code), ...],单批 ≤80 只 + interval=3.0, # 轮询间隔(秒),下限 0.1 + dedup=True, # (price, volume) 未变的标的跳过发布 + # sessions=(), # 传空 tuple 表示全天轮询;默认仅 9:15-11:30 / 13:00-15:00 + ) + async with AsyncMacClient.from_best_host() as client: + await feed.run_async(client) # Ctrl+C 或 feed.stop() 退出 + + +asyncio.run(main()) +``` + +同步客户端(`MacClient`)用 `run_sync`,feed 会把阻塞调用丢到线程池,不卡事件循环: + +```python +from easy_tdx.mac.client import MacClient + +with MacClient.from_best_host() as client: + feed.run_sync(client) +``` + +> **关键坑(issue #34)**: +> - 订阅 key 必须与 `publish` 内部拼的 `f"{market}{code}"` 一致,即 `"SZ000001"` +> 而不是 `"000001"`;否则事件分发匹配不到。 +> - 传给 `subscribe` 的必须是**实例的绑定方法** `strategy.on_tick`, +> 不是未绑定的类方法 `MyStrategy.on_tick`。 +> - 整个流程跑在 `asyncio.run()` 里,否则协程不会被调度。 + From 990b4a7802a838a3ac854e0598e950842c26a99b Mon Sep 17 00:00:00 2001 From: awayings Date: Tue, 8 Sep 2026 23:21:44 +0800 Subject: [PATCH 4/6] =?UTF-8?q?docs:=20=E6=8B=86=E5=88=86=E8=B6=85?= =?UTF-8?q?=E5=A4=A7=E6=96=87=E6=A1=A3=E2=80=94=E2=80=94=E6=95=99=E7=A8=8B?= =?UTF-8?q?/=E5=8F=82=E8=80=83=E5=88=86=E7=A6=BB=EF=BC=8C=E5=8E=BB?= =?UTF-8?q?=E8=BF=87=E6=9C=9F=E7=89=88=E6=9C=AC=E6=A8=AA=E5=B9=85=EF=BC=8C?= =?UTF-8?q?=E6=A8=A1=E5=9E=8B=E6=9E=9A=E4=B8=BE=E5=BD=92=E5=B9=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - backtest_usage(742→485):CLI 章移交 cli-backtest.md,示例/注意事项 抽至 backtest-examples.md,重建目录 - quantitative-guide(628→325):第 5-7 章(滑点/执行仿真/归因/工作流) 抽至 quantitative-advanced.md 并重编号 - api_reference(704→478):删除过期版本横幅(1.16.2)与快速开始教程段; 数据模型/枚举与 field_mapping.md 逐表核对后去重(field_mapping 为唯一权威); WebSocket 节随 web-api.md 合并移除 - field_mapping:吸收 MAC 协议枚举(Period/Adjust/Category/BoardType/ SortType/ExMarket),全部文档回到 ≤500 行 Co-Authored-By: Claude --- docs/api_reference.md | 308 +++++---------------------------- docs/backtest-examples.md | 153 +++++++++++++++++ docs/backtest_usage.md | 265 +---------------------------- docs/field_mapping.md | 75 +++++++- docs/quantitative-advanced.md | 308 +++++++++++++++++++++++++++++++++ docs/quantitative-guide.md | 310 +--------------------------------- 6 files changed, 581 insertions(+), 838 deletions(-) create mode 100644 docs/backtest-examples.md create mode 100644 docs/quantitative-advanced.md diff --git a/docs/api_reference.md b/docs/api_reference.md index 2171671..6096f26 100644 --- a/docs/api_reference.md +++ b/docs/api_reference.md @@ -1,10 +1,11 @@ # easy_tdx API 参考文档 -> 版本: 1.16.2 | 运行时依赖: pandas / tzdata / click | 需要网络连接通达信行情服务器 +> 本文档为**方法速查参考**;上手教程见 [python-api.md](./python-api.md),数据模型与枚举字段见 [field_mapping.md](./field_mapping.md),Web 服务端点见 [web-api.md](./web-api.md)。 +> +> 文档不写死版本号,对应版本以 [CHANGELOG.md](../CHANGELOG.md) 与 pyproject.toml 为准。 ## 目录 -- [快速开始](#快速开始) - [客户端](#客户端) - [TdxClient(同步)](#tdxclient同步) - [AsyncTdxClient(异步)](#asynctdxclient异步) @@ -18,29 +19,10 @@ - [资金流向](#资金流向) - [文件下载](#文件下载) - [市场统计](#市场统计) -- [数据模型](#数据模型) -- [枚举](#枚举) - [异常](#异常) - [涨跌停价计算](#涨跌停价计算) - ---- - -## 快速开始 - -```python -from easy_tdx import TdxClient, Market, KlineCategory - -# 自动选择最优服务器 -with TdxClient.from_best_host() as c: - # 沪市证券总数 - count = c.get_security_count(Market.SH) - - # 浦发银行日K线 - bars = c.get_security_bars(Market.SH, "600000", KlineCategory.DAY, 0, 10) - - # 实时行情 - quotes = c.get_security_quotes([(Market.SH, "600000"), (Market.SZ, "000001")]) -``` +- [全局常量](#全局常量) +- [完整 API 列表(MAC 协议客户端)](#完整-api-列表mac-协议客户端) --- @@ -396,193 +378,6 @@ c.get_market_stat() -> MarketStat --- -## 数据模型 - -### SecurityInfo - -证券列表条目。 - -| 字段 | 类型 | 说明 | -|------|------|------| -| market | `Market` | 市场代码 | -| code | `str` | 证券代码 | -| name | `str` | 证券名称 | -| volunit | `int` | 成交量单位(手 = volunit 股) | -| decimal_point | `int` | 价格小数位数 | -| pre_close | `float` | 昨收价 | -| industry_tdx | `str` | 通达信行业代码(扩展字段) | -| industry_sw | `str` | 申万行业代码(扩展字段) | - -### SecurityQuote - -实时五档行情。 - -| 字段 | 类型 | 说明 | -|------|------|------| -| market | `Market` | 市场代码 | -| code | `str` | 证券代码 | -| price | `float` | 现价 | -| pre_close | `float` | 昨收 | -| open | `float` | 今开 | -| high | `float` | 最高 | -| low | `float` | 最低 | -| vol | `float` | 总成交量(手) | -| amount | `float` | 成交额(元) | -| bid1~bid5 | `float` | 买一到买五价 | -| bid_vol1~bid_vol5 | `float` | 买一到买五量 | -| ask1~ask5 | `float` | 卖一到卖五价 | -| ask_vol1~ask_vol5 | `float` | 卖一到卖五量 | -| s_vol | `float` | 内盘(主动卖) | -| b_vol | `float` | 外盘(主动买) | -| rise_speed | `float` | 涨速 | -| server_time | `str` | 服务器时间 | - -### SecurityBar - -K 线数据。 - -| 字段 | 类型 | 说明 | -|------|------|------| -| open | `float` | 开盘价 | -| close | `float` | 收盘价 | -| high | `float` | 最高价 | -| low | `float` | 最低价 | -| vol | `float` | 成交量(股) | -| amount | `float` | 成交额(元) | -| year | `int` | 年 | -| month | `int` | 月 | -| day | `int` | 日 | -| hour | `int` | 时 | -| minute | `int` | 分 | -| datetime_str | `str` | 属性,格式化时间字符串 | - -### MinuteBar - -分时数据。 - -| 字段 | 类型 | 说明 | -|------|------|------| -| price | `float` | 价格 | -| vol | `int` | 成交量 | - -### TransactionRecord - -逐笔成交。 - -| 字段 | 类型 | 说明 | -|------|------|------| -| hour | `int` | 时 | -| minute | `int` | 分 | -| price | `float` | 成交价 | -| vol | `int` | 成交量 | -| buyorsell | `int` | 方向(0=买, 1=卖, 2=中性, 8=集合竞价) | - -### XdxrRecord - -除权除息记录。 - -| 字段 | 类型 | 说明 | -|------|------|------| -| market | `Market` | 市场 | -| code | `str` | 代码 | -| year/month/day | `int` | 日期 | -| category | `int` | 事件类型(见 XDXR_CATEGORY_NAMES) | -| fenhong | `float \| None` | 每股分红(元) | -| peigujia | `float \| None` | 配股价 | -| songzhuangu | `float \| None` | 每股送转股比例 | -| peigu | `float \| None` | 每股配股比例 | - -### FinanceInfo - -最新财务数据。包含股本结构(流通股本、总股本、国家股等)、资产负债(总资产、净资产等)、利润指标(主营收入、净利润等)和每股指标。字段名使用拼音,完整列表见源码 `models/finance.py`。 - -### CompanyInfoCategory - -公司信息文件目录。 - -| 字段 | 类型 | 说明 | -|------|------|------| -| name | `str` | 目录名 | -| filename | `str` | 文件名 | -| start | `int` | 起始偏移 | -| length | `int` | 内容长度 | - -### TdxBlock - -板块信息。 - -| 字段 | 类型 | 说明 | -|------|------|------| -| name | `str` | 板块名称 | -| category | `int` | 分类(0=行业, 1=地域, 2=概念, 3=风格) | -| count | `int` | 成分股数量 | -| codes | `list[str]` | 成分股代码列表 | - -### MarketStat - -市场统计。 - -| 字段 | 类型 | 说明 | -|------|------|------| -| up_count | `int` | 上涨家数 | -| down_count | `int` | 下跌家数 | -| neutral_count | `int` | 平盘家数 | -| suspended_count | `int` | 停牌估算 | -| total_count | `int` | 总计 | -| total_amount | `float` | 总成交额 | -| total_volume | `float` | 总成交量 | -| total_market_cap | `float` | 总市值(元),来自 880001 收盘价 | -| limit_up_count | `int` | 涨停家数,来自 880006 close | -| limit_down_count | `int` | 跌停家数,来自 880006 open | - -### FundFlow - -资金流向。 - -| 字段 | 类型 | 说明 | -|------|------|------| -| super_in / super_out | `float` | 超大单流入/流出 | -| large_in / large_out | `float` | 大单流入/流出 | -| medium_in / medium_out | `float` | 中单流入/流出 | -| small_in / small_out | `float` | 小单流入/流出 | -| main_net_inflow | `float` | 属性:主力净流入(超大+大) | -| total_net_inflow | `float` | 属性:全单净流入 | - -### HistoricalFundFlow - -历史日线资金流向。字段同 FundFlow,额外包含 `year`/`month`/`day` 日期字段。 - ---- - -## 枚举 - -### Market - -| 值 | 名称 | 说明 | -|----|------|------| -| 0 | SZ | 深圳 | -| 1 | SH | 上海 | -| 2 | BJ | 北京 | - -### KlineCategory - -| 值 | 名称 | 说明 | -|----|------|------| -| 0 | MIN_5 | 5 分钟 | -| 1 | MIN_15 | 15 分钟 | -| 2 | MIN_30 | 30 分钟 | -| 3 | MIN_60 | 60 分钟 | -| 4 | DAY | 日线 | -| 5 | WEEK | 周线 | -| 6 | MONTH | 月线 | -| 7 | MIN_1 | 1 分钟 | -| 8 | MIN_3 | 3 分钟(内部用) | -| 9 | YEAR | 年线 | -| 10 | SEASON | 季线 | -| 11 | YEAR_ALT | 年线(备用) | - ---- - ## 异常 所有异常继承自 `TdxError`。 @@ -640,65 +435,44 @@ compute_price_limits(market, code, name, pre_close, listed_days=None) | `KNOWN_EX_HOSTS` | `list[str]` | 扩展行情服务器列表 | | `XDXR_CATEGORY_NAMES` | `dict[int, str]` | 除权除息事件类型映射 | ---- +## 完整 API 列表(MAC 协议客户端) -## WebSocket 实时行情(serve /ws/realtime/*) +### MacClient / AsyncMacClient -`easy-tdx serve` 后可建立 WebSocket 连接(v1.28 起联动 `RealtimeDataFeed`,此前 -该端点不推送数据): +| 方法 | 说明 | +|------|------| +| `get_stock_quotes(stocks, fields)` | 批量实时报价 | +| `get_stock_quotes_list(category, ...)` | 市场分类排序报价 | +| `get_stock_kline(market, code, period, ...)` | K 线(支持复权) | +| `get_stock_kline_with_indicators(market, code, indicators, ...)` | K 线 + 技术指标 | +| `get_tick_chart(market, code, date)` | 单日分时图 | +| `get_tick_charts(market, code, days)` | 多日分时图 | +| `get_chart_sampling(market, code)` | 分时缩略采样 | +| `get_transactions(market, code, ...)` | 逐笔成交 | +| `get_symbol_info(market, code)` | 个股特征快照 | +| `get_board_list(board_type, ..., sort_column)` | 板块列表(sort_value 列=排序键指标值) | +| `get_board_members(board_symbol, ...)` | 板块成分股报价 | +| `get_board_summary(board_symbol, ...)` | 板块汇总(成交额、主力净流入、涨跌家数) | +| `get_board_ranking(board_type, top_n, sort_by, ...)` | 板块涨跌幅排行榜(行业/概念排行) | +| `get_board_change_ranking(board_type, target_date, days, ...)` | 板块 N 日涨跌幅排行 | +| `get_belong_board(market, code)` | 个股所属板块 | +| `get_capital_flow(market, code)` | 资金流向 | +| `get_auction(market, code)` | 集合竞价 | +| `get_unusual(market, ...)` | 市场异动 | +| `get_server_info()` | 服务器交易时段 | +| `get_kline_offset(offset, count)` | K 线偏移信息 | +| `get_goods_list(market, ...)` | 扩展市场商品列表 | -``` -ws://127.0.0.1:8000/api/v1/ws/realtime/{symbol} # symbol 如 SZ000001 / SH600519 -``` +### MacExClient / AsyncMacExClient -### 服务端推送帧(JSON) +| 方法 | 说明 | +|------|------| +| `goods_count(market)` | 商品总数 | +| `goods_list(market, start, count)` | 商品列表 | +| `goods_quotes(stocks, fields)` | 批量报价 | +| `goods_quotes_list(market, ...)` | 市场分类报价列表 | +| `goods_kline(market, code, period, ...)` | K 线(支持复权) | +| `goods_tick_chart(market, code, ...)` | 分时图 | +| `goods_chart_sampling(market, code)` | 分时缩略采样 | +| `goods_transaction(market, code, ...)` | 逐笔成交 | -| type | 触发 | 字段 | -|------|------|------| -| `tick` | 轮询到标的的最新快照(价格/量变化才推,约 `interval` 秒一拍) | `symbol`、`market`、`code`、`price`、`volume`、`ts`(epoch 秒)、`open`、`high`、`low`、`pre_close`、`amount`、`name` | -| `ping` | 连续 30s 未收到客户端消息的心跳 | —(客户端忽略即可,无须回包) | -| `status` | 客户端 subscribe/unsubscribe 的确认 | `msg`(如 `subscribed SH600000`) | -| `error` | 非法 JSON / 未知 action / 超出订阅上限 | `msg` | - -### 客户端控制消息(JSON 文本帧) - -```json -{"action": "subscribe", "symbol": "SH600000"} -{"action": "unsubscribe", "symbol": "SH600000"} -``` - -### 行为约定 - -- **连接即订阅** path 上的 symbol;断开自动退订全部标的。 -- **按需轮询**:订阅集合为空时服务端不产生任何行情请求;去重后标的总数上限 - 80(`get_stock_quotes` 协议约束)。 -- **交易时段**:默认 A 股时段外只睡不拉(无 tick 帧,心跳照发);mock 模式 - (`EASY_TDX_E2E_MOCK=1`)不受限制。 -- **背压**:消费过慢时丢最旧快照保最新,不积压。 -- 环境变量:`EASY_TDX_WS_INTERVAL`(轮询间隔秒数,默认 3.0)。 - -### 前端接入方式(自动重连 + 心跳容忍) - -```typescript -function connectRealtime(symbol: string, onTick: (f: TickFrame) => void) { - let retry = 0 - let ws: WebSocket | null = null - const open = () => { - ws = new WebSocket(`ws://${location.host}/api/v1/ws/realtime/${symbol}`) - ws.onmessage = (e) => { - const frame = JSON.parse(e.data) - if (frame.type === 'tick') { retry = 0; onTick(frame) } // ping/status 忽略 - } - ws.onclose = () => { - retry += 1 - setTimeout(open, Math.min(1000 * 2 ** (retry - 1), 30_000)) // 指数退避 - } - } - open() - return () => ws?.close() -} -``` - -> 说明:看板/自选页的实时刷新已由 SSE `/stream/quotes`(全量快照、单连接共享) -> 承担;WS 通道定位是**按需订阅单标的 tick 事件**(后续实时策略信号的接入点), -> 两条链路按场景选用,不要求同时连接。手动冒烟见 `scripts/ws_smoke.py`。 diff --git a/docs/backtest-examples.md b/docs/backtest-examples.md new file mode 100644 index 0000000..9c7ab3d --- /dev/null +++ b/docs/backtest-examples.md @@ -0,0 +1,153 @@ +# 回测完整示例集 + +本文件汇集回测引擎的完整可运行示例与注意事项,配合 [backtest_usage.md](./backtest_usage.md)(手册)与 [cli-backtest.md](./cli-backtest.md)(CLI 参考)使用。 + +## 完整示例 + +### 示例 1:双均线交叉策略 + +```python +"""双均线交叉策略:MA5 上穿 MA20 买入,下穿卖出。""" +import pandas as pd +from easy_tdx.backtest import BacktestEngine, Strategy, crossover +from easy_tdx import MyTT + + +class DualMACross(Strategy): + def init(self): + self.ma5 = self.I(MyTT.MA, self.data.close, 5) + self.ma20 = self.I(MyTT.MA, self.data.close, 20) + self.golden = crossover(self.ma5, self.ma20) + self.death = crossover(self.ma20, self.ma5) + + def next(self): + if self.golden[self._bar_index] and self.position["size"] == 0: + self.buy(size=0) + elif self.death[self._bar_index] and self.position["size"] > 0: + self.sell(size=0) + + +# 构造模拟数据(实际使用 TdxClient 获取) +dates = pd.date_range("2024-01-01", periods=200, freq="D") +import numpy as np +rng = np.random.default_rng(42) +close = 10.0 + np.cumsum(rng.normal(0, 0.2, 200)) + +df = pd.DataFrame({ + "datetime": dates, + "open": close + rng.uniform(-0.1, 0.1, 200), + "close": close, + "high": close + rng.uniform(0, 0.3, 200), + "low": close - rng.uniform(0, 0.3, 200), + "vol": rng.integers(10000, 100000, 200), +}) + +engine = BacktestEngine(DualMACross, cash=100000, commission=0.0003) +result = engine.run(df) + +result.summary() +print(f"\n年化收益: {result.performance['annual_return']:.2%}") +print(f"夏普比率: {result.performance['sharpe']:.2f}") +``` + +### 示例 2:MACD 策略 + 预计算指标 + +```python +"""MACD 策略:DIF 上穿 DEA 买入,下穿卖出。""" +from easy_tdx.backtest import BacktestEngine, Strategy, crossover +from easy_tdx import MyTT + + +class MACDStrategy(Strategy): + def init(self): + dif, dea, macd_hist = self.I(MyTT.MACD, self.data.close) + self.dif = dif + self.dea = dea + self.golden = crossover(dif, dea) + self.death = crossover(dea, dif) + + def next(self): + if self.golden[self._bar_index] and self.position["size"] == 0: + self.buy(size=0) + elif self.death[self._bar_index] and self.position["size"] > 0: + self.sell(size=0) + + +engine = BacktestEngine(MACDStrategy, cash=100000) +result = engine.run(df) # df 包含 OHLCV 数据 +``` + +### 示例 3:布林带突破 + 滑点模拟 + +```python +"""布林带策略:跌破下轨买入,突破上轨卖出,模拟滑点。""" +from easy_tdx.backtest import BacktestEngine, Strategy +from easy_tdx import MyTT + + +class BollingerBreakout(Strategy): + def init(self): + upper, mid, lower = self.I(MyTT.BOLL, self.data.close, 20) + self.upper = upper + self.lower = lower + + def next(self): + cur = self.data.close[0] + if cur <= self.lower[self._bar_index] and self.position["size"] == 0: + self.buy(size=0) + elif cur >= self.upper[self._bar_index] and self.position["size"] > 0: + self.sell(size=0) + + +# 模拟滑点和保守成交价 +engine = BacktestEngine( + BollingerBreakout, + cash=100000, + slippage=0.02, # 每股 2 分钱滑点 + execution="worst", # 保守成交价 + reject_policy="skip", # 资金不足直接跳过 +) +result = engine.run(df) +``` + +### 示例 4:从文件运行 CLI + +```python +# save as rsi_strategy.py +from easy_tdx.backtest import Strategy +from easy_tdx import MyTT + + +class RSIStrategy(Strategy): + """RSI 超卖超买策略。""" + def init(self): + self.rsi = self.I(MyTT.RSI, self.data.close, 14) + + def next(self): + cur_rsi = self.rsi[self._bar_index] + if cur_rsi < 30 and self.position["size"] == 0: + self.buy(size=0) + elif cur_rsi > 70 and self.position["size"] > 0: + self.sell(size=0) +``` + +```bash +easy-tdx backtest SZ 000001 \ + --strategy-file rsi_strategy.py \ + --cash 200000 \ + --execution next_open \ + --count 1000 \ + --adjust QFQ \ + --table +``` + +--- + +## 注意事项 + +1. **DataFrame 格式要求**:必须包含 `datetime`, `open`, `close`, `high`, `low` 列。`vol`/`amount` 为可选但推荐。 +2. **成交时机**:默认 `next_open` 模式下,信号产生后需等待下一根 K 线才能成交。如果信号在最后一根 K 线产生,则无法成交。 +3. **整手交易**:A 股按 100 股整手交易。全仓模式会自动向下取整到 100 的倍数。 +4. **做空限制**:v1 不支持做空,卖出数量不能超过当前持仓。 +5. **未来函数警告**:使用 `this_close` 模式时,结果中的 `config.future_leak_warning` 会标记为 `True`。 +6. **多笔同 bar 交易**:引擎支持同一根 K 线上产生多笔交易(如分批建仓),按顺序依次撮合。 diff --git a/docs/backtest_usage.md b/docs/backtest_usage.md index dca7046..5a05ed6 100644 --- a/docs/backtest_usage.md +++ b/docs/backtest_usage.md @@ -21,15 +21,12 @@ - [资金曲线](#资金曲线) - [交易记录](#交易记录) - [序列化输出](#序列化输出) -- [CLI 命令行](#cli-命令行) - - [内置策略列表(strategies)](#内置策略列表strategies) - - [参数网格寻优(optimize)](#参数网格寻优optimize) - - [组合级分析(portfolio)](#组合级分析portfolio) +- [CLI 命令行](#cli-命令行) → 见 [cli-backtest.md](./cli-backtest.md) - [进阶用法](#进阶用法) - [预计算指标列](#预计算指标列) - [缠论结果注入](#缠论结果注入) - [自定义策略文件](#自定义策略文件) -- [完整示例](#完整示例) +- [完整示例](#完整示例) → 见 [backtest-examples.md](./backtest-examples.md) --- @@ -392,115 +389,10 @@ config = result.config --- + ## CLI 命令行 -```bash -# 基本用法 -easy-tdx backtest SZ 000001 --strategy-file my_strategy.py - -# 查看帮助 -easy-tdx backtest --help - -# 指定参数 -easy-tdx backtest SH 600519 \ - --strategy-file ma_cross.py \ - --cash 50000 \ - --commission 0.0003 \ - --execution next_open \ - --period DAILY \ - --count 500 \ - --table - -# 预计算指标(MACD, KDJ 会作为额外列注入 DataFrame) -easy-tdx backtest SZ 000001 \ - --strategy-file macd_strategy.py \ - --indicators MACD,KDJ - -# 输出 JSON(默认) -easy-tdx backtest SZ 000001 --strategy-file my_strategy.py - -# 输出表格 -easy-tdx backtest SZ 000001 --strategy-file my_strategy.py --table -``` - -**CLI 参数**: - -| 参数 | 默认值 | 说明 | -|------|--------|------| -| `MARKET` | — | 市场代码:SZ / SH | -| `CODE` | — | 股票代码:如 000001 | -| `--strategy-file` | — | Python 策略文件路径 | -| `--strategy` | — | DSL 表达式(P1,尚未实现) | -| `--cash` | 100000 | 初始资金 | -| `--commission` | 0.0003 | 佣金率 | -| `--execution` | next_open | 成交价规则 | -| `--period` | DAILY | K 线周期 | -| `--adjust` | NONE | 复权方式:NONE / QFQ / HFQ | -| `--count` | 500 | K 线数量 | -| `--indicators` | — | 预计算指标(逗号分隔) | -| `--table` | False | 表格输出 | -| `--output` | json | 输出格式:json / table / csv | -| `--wf` | False | 附加 Walk-Forward 样本外验证 | -| `--wf-windows` | 7 | Walk-Forward 窗口数 | -| `--evaluate` | False | 一条龙评估(回测+WF+适配性+评分+评级+基准对比) | -| `--auto-fees` | False | 按标的品种自动解析费率 | - -### 内置策略列表(strategies) - -```bash -# 表格列出全部内置策略(名称/参数/预设寻优网格) -easy-tdx strategies - -# JSON 输出(含完整参数 schema,与 Web API GET /backtest/strategies 同构) -easy-tdx strategies --output json -``` - -### 参数网格寻优(optimize) - -对注册表内置策略的 1-2 个参数做网格搜索,按总收益率排名: - -```bash -# 单策略:用该策略的预设寻优网格(见 strategies 命令) -easy-tdx optimize SZ 000001 --strategy ma_cross - -# 单策略:自定义网格(--param 参数名=值1,值2,可多次指定) -easy-tdx optimize SZ 000001 --strategy ma_cross --param fast=5,10,15 --param slow=20,60 - -# 一键寻优所有内置策略:逐策略按预设网格寻优后全局排名 -easy-tdx optimize SZ 000001 --all - -# 并行加速(2+ 进程级并行;1 = 串行 + 指标缓存复用) -easy-tdx optimize SZ 000001 --all --workers 4 -``` - -**optimize 参数**: - -| 参数 | 默认值 | 说明 | -|------|--------|------| -| `--strategy` | — | 注册表策略名(与 `--all` 二选一) | -| `--all` | False | 一键寻优所有内置策略(STRATEGY_PRESETS 预设网格) | -| `--param` | 预设网格 | 自定义参数网格,如 `fast=5,10,15`(最多 2 个参数,笛卡尔积 ≤ 200) | -| `--cash` | 1000000 | 初始资金 | -| `--commission` | 0.0003 | 佣金率 | -| `--slippage` | 0.0 | 滑点 | -| `--workers` | 1 | 并行进程数 | -| `--top` | 15 | 表格输出显示前 N 行 | - -Python API 同名能力:`easy_tdx.backtest.optimizer.ParamGridOptimizer`(单策略)与 -`easy_tdx.backtest.optimizer.optimize_all_strategies`(一键全策略)。 - -### 组合级分析(portfolio) - -```bash -# 组合级 Walk-Forward 样本外验证(全部标的日期并集切窗,每窗独立开仓) -easy-tdx portfolio --stocks SZ:000001,SH:600519 --strategy-file strategies/ma_cross.py --wf --wf-windows 7 - -# 组合级一条龙评估:组合回测 + 组合WF + 跨标的适配性 + 综合评分 -# + 组合评级 + 等权买入持有基准对比(与 Web UI /portfolio 页同构) -easy-tdx portfolio --stocks SZ:000001,SH:600519 --strategy-file strategies/ma_cross.py --evaluate -``` - ---- +CLI 用法见 [cli-backtest.md](./cli-backtest.md)(回测/寻优/组合/run-all 命令与参数)。 ## 进阶用法 @@ -591,152 +483,3 @@ easy-tdx backtest SZ 000001 --strategy-file my_strategy.py --table --- -## 完整示例 - -### 示例 1:双均线交叉策略 - -```python -"""双均线交叉策略:MA5 上穿 MA20 买入,下穿卖出。""" -import pandas as pd -from easy_tdx.backtest import BacktestEngine, Strategy, crossover -from easy_tdx import MyTT - - -class DualMACross(Strategy): - def init(self): - self.ma5 = self.I(MyTT.MA, self.data.close, 5) - self.ma20 = self.I(MyTT.MA, self.data.close, 20) - self.golden = crossover(self.ma5, self.ma20) - self.death = crossover(self.ma20, self.ma5) - - def next(self): - if self.golden[self._bar_index] and self.position["size"] == 0: - self.buy(size=0) - elif self.death[self._bar_index] and self.position["size"] > 0: - self.sell(size=0) - - -# 构造模拟数据(实际使用 TdxClient 获取) -dates = pd.date_range("2024-01-01", periods=200, freq="D") -import numpy as np -rng = np.random.default_rng(42) -close = 10.0 + np.cumsum(rng.normal(0, 0.2, 200)) - -df = pd.DataFrame({ - "datetime": dates, - "open": close + rng.uniform(-0.1, 0.1, 200), - "close": close, - "high": close + rng.uniform(0, 0.3, 200), - "low": close - rng.uniform(0, 0.3, 200), - "vol": rng.integers(10000, 100000, 200), -}) - -engine = BacktestEngine(DualMACross, cash=100000, commission=0.0003) -result = engine.run(df) - -result.summary() -print(f"\n年化收益: {result.performance['annual_return']:.2%}") -print(f"夏普比率: {result.performance['sharpe']:.2f}") -``` - -### 示例 2:MACD 策略 + 预计算指标 - -```python -"""MACD 策略:DIF 上穿 DEA 买入,下穿卖出。""" -from easy_tdx.backtest import BacktestEngine, Strategy, crossover -from easy_tdx import MyTT - - -class MACDStrategy(Strategy): - def init(self): - dif, dea, macd_hist = self.I(MyTT.MACD, self.data.close) - self.dif = dif - self.dea = dea - self.golden = crossover(dif, dea) - self.death = crossover(dea, dif) - - def next(self): - if self.golden[self._bar_index] and self.position["size"] == 0: - self.buy(size=0) - elif self.death[self._bar_index] and self.position["size"] > 0: - self.sell(size=0) - - -engine = BacktestEngine(MACDStrategy, cash=100000) -result = engine.run(df) # df 包含 OHLCV 数据 -``` - -### 示例 3:布林带突破 + 滑点模拟 - -```python -"""布林带策略:跌破下轨买入,突破上轨卖出,模拟滑点。""" -from easy_tdx.backtest import BacktestEngine, Strategy -from easy_tdx import MyTT - - -class BollingerBreakout(Strategy): - def init(self): - upper, mid, lower = self.I(MyTT.BOLL, self.data.close, 20) - self.upper = upper - self.lower = lower - - def next(self): - cur = self.data.close[0] - if cur <= self.lower[self._bar_index] and self.position["size"] == 0: - self.buy(size=0) - elif cur >= self.upper[self._bar_index] and self.position["size"] > 0: - self.sell(size=0) - - -# 模拟滑点和保守成交价 -engine = BacktestEngine( - BollingerBreakout, - cash=100000, - slippage=0.02, # 每股 2 分钱滑点 - execution="worst", # 保守成交价 - reject_policy="skip", # 资金不足直接跳过 -) -result = engine.run(df) -``` - -### 示例 4:从文件运行 CLI - -```python -# save as rsi_strategy.py -from easy_tdx.backtest import Strategy -from easy_tdx import MyTT - - -class RSIStrategy(Strategy): - """RSI 超卖超买策略。""" - def init(self): - self.rsi = self.I(MyTT.RSI, self.data.close, 14) - - def next(self): - cur_rsi = self.rsi[self._bar_index] - if cur_rsi < 30 and self.position["size"] == 0: - self.buy(size=0) - elif cur_rsi > 70 and self.position["size"] > 0: - self.sell(size=0) -``` - -```bash -easy-tdx backtest SZ 000001 \ - --strategy-file rsi_strategy.py \ - --cash 200000 \ - --execution next_open \ - --count 1000 \ - --adjust QFQ \ - --table -``` - ---- - -## 注意事项 - -1. **DataFrame 格式要求**:必须包含 `datetime`, `open`, `close`, `high`, `low` 列。`vol`/`amount` 为可选但推荐。 -2. **成交时机**:默认 `next_open` 模式下,信号产生后需等待下一根 K 线才能成交。如果信号在最后一根 K 线产生,则无法成交。 -3. **整手交易**:A 股按 100 股整手交易。全仓模式会自动向下取整到 100 的倍数。 -4. **做空限制**:v1 不支持做空,卖出数量不能超过当前持仓。 -5. **未来函数警告**:使用 `this_close` 模式时,结果中的 `config.future_leak_warning` 会标记为 `True`。 -6. **多笔同 bar 交易**:引擎支持同一根 K 线上产生多笔交易(如分批建仓),按顺序依次撮合。 diff --git a/docs/field_mapping.md b/docs/field_mapping.md index 42aa4c3..a180efa 100644 --- a/docs/field_mapping.md +++ b/docs/field_mapping.md @@ -1,6 +1,6 @@ # easy_tdx 字段映射表 -> 模型字段名 ↔ 中文含义 ↔ 数据类型对照 +> 模型字段名 ↔ 中文含义 ↔ 数据类型对照。方法速查见 [api_reference.md](./api_reference.md),上手教程见 [python-api.md](./python-api.md)。 --- @@ -313,3 +313,76 @@ | 9 | YEAR | 年线 | | 10 | SEASON | 季线 | | 11 | YEAR_ALT | 年线(备用) | + +## 枚举参考 + +### Period(K 线周期) + +| 值 | 名称 | 说明 | +|----|------|------| +| 7 | `MIN_1` | 1 分钟 | +| 0 | `MIN_5` | 5 分钟 | +| 1 | `MIN_15` | 15 分钟 | +| 2 | `MIN_30` | 30 分钟 | +| 3 | `MIN_60` | 60 分钟 | +| 4 | `DAILY` | 日线 | +| 5 | `WEEKLY` | 周线 | +| 6 | `MONTHLY` | 月线 | +| 10 | `QUARTERLY` | 季线 | +| 11 | `YEARLY` | 年线 | + +### Adjust(复权类型) + +| 值 | 名称 | 说明 | +|----|------|------| +| 0 | `NONE` | 不复权 | +| 1 | `QFQ` | 前复权 | +| 2 | `HFQ` | 后复权 | + +### Category(市场分类) + +| 值 | 名称 | 说明 | +|----|------|------| +| 0 | `SH` | 上证 A 股 | +| 2 | `SZ` | 深证 A 股 | +| 6 | `A` | 全部 A 股 | +| 7 | `B` | B 股 | +| 8 | `KCB` | 科创板 | +| 12 | `BJ` | 北证 A 股 | +| 14 | `CYB` | 创业板 | + +### BoardType(板块类型) + +| 值 | 名称 | 说明 | +|----|------|------| +| 0 | `HY` | 行业一级 | +| 1 | `HY2` | 行业二级 | +| 3 | `GN` | 概念 | +| 4 | `FG` | 风格 | +| 5 | `DQ` | 地区 | +| 255 | `ALL` | 全部 | + +### SortType(排序字段) + +| 名称 | 说明 | +|------|------| +| `CODE` | 代码 | +| `PRICE` | 现价 | +| `CHANGE_PCT` | 涨幅% | +| `VOLUME` | 成交量 | +| `TOTAL_AMOUNT` | 成交额 | +| `TURNOVER_RATE` | 换手% | +| `MAIN_NET_AMOUNT` | 主力净额 | + +### ExMarket(扩展市场) + +| 值 | 名称 | 说明 | +|----|------|------| +| 28 | `ZZ_FUTURES` | 郑州商品 | +| 29 | `DL_FUTURES` | 大连商品 | +| 30 | `SH_FUTURES` | 上海期货 | +| 31 | `HK_MAIN_BOARD` | 香港主板 | +| 47 | `CFFEX_FUTURES` | 中金所期货 | +| 48 | `HK_GEM` | 香港创业板 | +| 74 | `US_STOCK` | 美国股票 | + diff --git a/docs/quantitative-advanced.md b/docs/quantitative-advanced.md new file mode 100644 index 0000000..95fcbe6 --- /dev/null +++ b/docs/quantitative-advanced.md @@ -0,0 +1,308 @@ +# 量化进阶:执行仿真与归因 + +滑点建模、执行仿真(TWAP/VWAP/限价单)、归因分析与完整工作流。因子/组合基础见 [quantitative-guide.md](./quantitative-guide.md)。 + +## 1. 高级回测 + +### 1.1 滑点模型 + +4 种可插拔滑点模型,替代原有固定滑点: + +```python +from easy_tdx.backtest import BacktestEngine +from easy_tdx.backtest.slippage import ( + FixedSlippage, + PercentSlippage, + SquareRootSlippage, + VolumeSlippage, +) + +# 1. 固定每股滑点(与旧行为一致) +model1 = FixedSlippage(per_share=0.01) + +# 2. 按金额百分比 +model2 = PercentSlippage(rate=0.001) + +# 3. 方根市场冲击模型(Almgren-Chriss 简化版) +# impact = sigma * sqrt(participation_rate) * price * size * coeff +# A 股量化主流:参与率 >5% 时冲击显著 +model3 = SquareRootSlippage(impact_coeff=0.1) + +# 4. 成交量比例滑点 +model4 = VolumeSlippage(base_bps=10.0) + +# 在 BacktestEngine 中使用 +engine = BacktestEngine( + MyStrategy, + cash=1_000_000, + slippage_model=SquareRootSlippage(impact_coeff=0.1), +) +result = engine.run(df) +``` + +**模型选择建议**: + +| 场景 | 推荐模型 | 参数 | +|------|---------|------| +| 快速原型 | `FixedSlippage` | `per_share=0.01` | +| 中频策略 | `PercentSlippage` | `rate=0.001` | +| 大额订单 | `SquareRootSlippage` | `impact_coeff=0.1` | +| 低流动性股票 | `VolumeSlippage` | `base_bps=10.0` | + +### 1.2 执行仿真 + +4 种执行模型,将单笔信号拆分为多笔子交易: + +```python +from easy_tdx.backtest.execution import ( + ImmediateExecution, + TWAPExecution, + VWAPExecution, + LimitExecution, +) + +# 1. 即时成交(默认,与旧行为一致) +exec1 = ImmediateExecution() + +# 2. TWAP:时间加权平均价格,N 根 K 线均匀拆单 +exec2 = TWAPExecution(n_bars=5) + +# 3. VWAP:成交量加权平均价格,按历史量分布拆单 +exec3 = VWAPExecution(n_bars=5, volume_lookback=20) + +# 4. 限价单:目标价挂单,TTL 内未触发则放弃 +exec4 = LimitExecution(ttl_bars=5) + +# 在 BacktestEngine 中使用 +engine = BacktestEngine( + MyStrategy, + cash=1_000_000, + execution_model=TWAPExecution(n_bars=3), + slippage_model=SquareRootSlippage(), +) +result = engine.run(df) +``` + +**执行模型选择**: + +| 场景 | 推荐模型 | 参数 | +|------|---------|------| +| 小额/快速验证 | `ImmediateExecution` | 默认 | +| 大额建仓/平仓 | `TWAPExecution` | `n_bars=3~5` | +| 追踪 VWAP 基准 | `VWAPExecution` | `n_bars=5` | +| 精确入场价位 | `LimitExecution` | `ttl_bars=5` | + +**TWAP vs VWAP 示例**: + +```python +# TWAP: 300 股拆成 3 笔 100 股,在 bar 1/2/3 以 close 执行 +engine = BacktestEngine( + MyStrategy, cash=100_000, + execution_model=TWAPExecution(n_bars=3), +) + +# VWAP: 按成交量分布拆 300 股 — 成交量大的 bar 分配更多 +engine = BacktestEngine( + MyStrategy, cash=100_000, + execution_model=VWAPExecution(n_bars=3, volume_lookback=20), +) + +# 限价单:在 50 元挂买入,5 根 K 线内 low <= 50 才成交 +class LimitBuyStrategy(Strategy): + def init(self): pass + def next(self): + if self._bar_index == 0: + self.buy(size=100, price=50.0) # 指定限价 + +engine = BacktestEngine( + LimitBuyStrategy, cash=100_000, + execution_model=LimitExecution(ttl_bars=5), +) +``` + +### 1.3 归因分析 + +从回测结果生成归因报告: + +```python +from easy_tdx.backtest import BacktestEngine +from easy_tdx.backtest.attribution import AttributionAnalyzer + +# 运行回测 +engine = BacktestEngine(MyStrategy, cash=1_000_000) +result = engine.run(df) + +# --- 成本归因 --- +analyzer = AttributionAnalyzer(result.trades, result.equity_curve) +cost_report = analyzer.cost_attribution() +print(f"总收益: {cost_report.total_return:.2%}") +print(f"总交易成本: {cost_report.total_trade_cost:.0f} 元") +print(f" 佣金: {cost_report.commission_cost:.0f}") +print(f" 滑点: {cost_report.slippage_cost:.0f}") +print(f" 印花税: {cost_report.stamp_tax_cost:.0f}") + +# --- Brinson 归因(需要基准)--- +import numpy as np +import pandas as pd +# 构造基准曲线(如沪深300) +benchmark = pd.DataFrame({ + "datetime": result.equity_curve["datetime"], + "total": np.linspace(100000, 108000, len(result.equity_curve)), +}) +analyzer = AttributionAnalyzer(result.trades, result.equity_curve, benchmark=benchmark) +brinson_report = analyzer.brinson_attribution() +print(f"配置贡献: {brinson_report.allocation_return:.2%}") +print(f"选股贡献: {brinson_report.selection_return:.2%}") +print(f"交叉效应: {brinson_report.interaction_return:.2%}") + +# --- 因子归因(需要因子数据)--- +exposures = pd.DataFrame({"momentum": [0.5, 0.3, 0.2], "quality": [0.1, -0.1, 0.0]}) +returns = pd.DataFrame({"momentum": [0.05, 0.03, 0.02], "quality": [0.01, -0.02, 0.0]}) +analyzer = AttributionAnalyzer( + result.trades, result.equity_curve, + factor_exposures=exposures, factor_returns=returns, +) +factor_report = analyzer.factor_attribution() +for name, ret in factor_report.factor_returns.items(): + print(f" {name}: {ret:.4f}") +print(f"特质收益: {factor_report.specific_return:.4f}") + +# --- 完整报告(自动选择最佳归因模式)--- +full_report = analyzer.full_report() +``` + +**归因模式优先级**:因子归因 > Brinson 归因 > 成本归因。`full_report()` 自动选择数据最完整的模式。 + +--- + +## 2. CLI 命令 + +```bash +# 列出所有内置因子 +easy-tdx factor list --table + +# 因子分析(需要数据,输出示例代码) +easy-tdx factor analyze momentum_20d + +# 组合因子回测(需要数据,输出示例代码) +easy-tdx pfactor backtest momentum_20d --n-stocks 10 --optimizer factor_weighted +``` + +CLI 命令输出 Python API 示例代码,方便复制使用。完整的因子计算和组合回测建议通过 Python API 完成。 + +--- + +## 3. 完整工作流示例 + +从数据获取到组合回测再到归因分析的完整管道: + +```python +""" +easy-tdx 量化研究完整工作流示例。 + +依赖: pip install easy-tdx +""" + +from easy_tdx import TdxClient, Market, KlineCategory +from easy_tdx.factor import FactorEngine, FactorAnalyzer, preprocess +from easy_tdx.portfolio import RebalanceEngine, FactorWeightedOptimizer +from easy_tdx.backtest import BacktestEngine +from easy_tdx.backtest.slippage import SquareRootSlippage +from easy_tdx.backtest.execution import TWAPExecution +from easy_tdx.backtest.attribution import AttributionAnalyzer + +# ── 1. 数据获取 ────────────────────────────────────── +client = TdxClient() +stock_pool = ["000001", "000858", "600519", "600036", "601318", + "000333", "002415", "601012", "600276", "000568"] + +data = {} +for code in stock_pool: + market = Market.SH if code.startswith("6") else Market.SZ + data[code] = client.get_security_bars( + market, code, KlineCategory.DAY, 0, 500 + ) +print(f"获取 {len(data)} 只股票数据") + +# ── 2. 因子计算 ────────────────────────────────────── +engine = FactorEngine() +factor_data = engine.compute_cross_section( + data, ["momentum_20d", "volatility_20d", "rsi_14"] +) +print(f"截面因子数据: {len(factor_data)} 行") + +# ── 3. 因子预处理 ───────────────────────────────────── +clean = preprocess( + factor_data, + factor_names=["momentum_20d", "volatility_20d", "rsi_14"], + steps=["winsorize", "zscore", "fill_missing"], +) + +# ── 4. 因子分析 ────────────────────────────────────── +forward_returns = engine.compute_forward_returns(data, period=5) + +for factor_name in ["momentum_20d", "volatility_20d", "rsi_14"]: + analyzer = FactorAnalyzer(clean, forward_returns) + report = analyzer.full_report(factor_name) + print(f"\n── {factor_name} ──") + print(f" IC均值: {report.mean_ic:.4f} ICIR: {report.icir:.4f}") + print(f" 多头年化: {report.long_only_annual:.2%}") + print(f" 多空夏普: {report.long_short_sharpe:.4f}") + +# ── 5. 组合回测 ────────────────────────────────────── +rebalancer = RebalanceEngine( + optimizer=FactorWeightedOptimizer(), + factor_name="momentum_20d", + n_stocks=5, + rebalance_freq="M", + cash=1_000_000, +) +result = rebalancer.run(data, start_date=20230101, end_date=20240101) +print(f"\n── 组合回测 ──") +print(f" 总收益: {result.performance['total_return']:.2%}") +print(f" 年化: {result.performance['annual_return']:.2%}") +print(f" 最大回撤: {result.performance['max_drawdown']:.2%}") +print(f" 夏普: {result.performance['sharpe']:.4f}") + +# ── 6. 高级单策略回测(滑点 + 执行仿真)────── +from easy_tdx.backtest import Strategy + +class MomentumStrategy(Strategy): + def init(self): + pass + def next(self): + if self._bar_index < 20: + return + ret = (self.data.close[0] - self.data.close[-20]) / self.data.close[-20] + if ret > 0.05 and self.position["size"] == 0: + self.buy(size=0) + elif ret < -0.03 and self.position["size"] > 0: + self.sell(size=0) + +bt_engine = BacktestEngine( + MomentumStrategy, + cash=500_000, + slippage_model=SquareRootSlippage(impact_coeff=0.1), + execution_model=TWAPExecution(n_bars=3), +) +# 选一只股票做回测 +bt_result = bt_engine.run(data["600519"]) +print(f"\n── 高级回测(600519)──") +print(f" 总收益: {bt_result.performance['total_return']:.2%}") +print(f" 夏普: {bt_result.performance['sharpe']:.4f}") + +# ── 7. 归因分析 ────────────────────────────────────── +att_analyzer = AttributionAnalyzer(bt_result.trades, bt_result.equity_curve) +cost_report = att_analyzer.cost_attribution() +print(f"\n── 成本归因 ──") +print(f" 总交易成本: {cost_report.total_trade_cost:.0f} 元") +print(f" 佣金: {cost_report.commission_cost:.0f}") +print(f" 滑点: {cost_report.slippage_cost:.0f}") +print(f" 印花税: {cost_report.stamp_tax_cost:.0f}") + +print("\n完成。") +client.close() +``` + +--- + diff --git a/docs/quantitative-guide.md b/docs/quantitative-guide.md index ad54f3e..3f00db2 100644 --- a/docs/quantitative-guide.md +++ b/docs/quantitative-guide.md @@ -18,12 +18,7 @@ - [4.1 权重优化器](#41-权重优化器) - [4.2 风险模型](#42-风险模型) - [4.3 再平衡引擎](#43-再平衡引擎) -- [5. 高级回测](#5-高级回测) - - [5.1 滑点模型](#51-滑点模型) - - [5.2 执行仿真](#52-执行仿真) - - [5.3 归因分析](#53-归因分析) -- [6. CLI 命令](#6-cli-命令) -- [7. 完整工作流示例](#7-完整工作流示例) +- [高级回测(滑点/执行仿真/归因)、CLI 与完整工作流](#高级回测滑点执行仿真归因cli-与完整工作流) → 见 [quantitative-advanced.md](./quantitative-advanced.md) --- @@ -309,309 +304,6 @@ for state in result.states[-5:]: --- -## 5. 高级回测 - -### 5.1 滑点模型 - -4 种可插拔滑点模型,替代原有固定滑点: - -```python -from easy_tdx.backtest import BacktestEngine -from easy_tdx.backtest.slippage import ( - FixedSlippage, - PercentSlippage, - SquareRootSlippage, - VolumeSlippage, -) - -# 1. 固定每股滑点(与旧行为一致) -model1 = FixedSlippage(per_share=0.01) - -# 2. 按金额百分比 -model2 = PercentSlippage(rate=0.001) - -# 3. 方根市场冲击模型(Almgren-Chriss 简化版) -# impact = sigma * sqrt(participation_rate) * price * size * coeff -# A 股量化主流:参与率 >5% 时冲击显著 -model3 = SquareRootSlippage(impact_coeff=0.1) - -# 4. 成交量比例滑点 -model4 = VolumeSlippage(base_bps=10.0) - -# 在 BacktestEngine 中使用 -engine = BacktestEngine( - MyStrategy, - cash=1_000_000, - slippage_model=SquareRootSlippage(impact_coeff=0.1), -) -result = engine.run(df) -``` - -**模型选择建议**: - -| 场景 | 推荐模型 | 参数 | -|------|---------|------| -| 快速原型 | `FixedSlippage` | `per_share=0.01` | -| 中频策略 | `PercentSlippage` | `rate=0.001` | -| 大额订单 | `SquareRootSlippage` | `impact_coeff=0.1` | -| 低流动性股票 | `VolumeSlippage` | `base_bps=10.0` | - -### 5.2 执行仿真 - -4 种执行模型,将单笔信号拆分为多笔子交易: - -```python -from easy_tdx.backtest.execution import ( - ImmediateExecution, - TWAPExecution, - VWAPExecution, - LimitExecution, -) - -# 1. 即时成交(默认,与旧行为一致) -exec1 = ImmediateExecution() - -# 2. TWAP:时间加权平均价格,N 根 K 线均匀拆单 -exec2 = TWAPExecution(n_bars=5) - -# 3. VWAP:成交量加权平均价格,按历史量分布拆单 -exec3 = VWAPExecution(n_bars=5, volume_lookback=20) - -# 4. 限价单:目标价挂单,TTL 内未触发则放弃 -exec4 = LimitExecution(ttl_bars=5) - -# 在 BacktestEngine 中使用 -engine = BacktestEngine( - MyStrategy, - cash=1_000_000, - execution_model=TWAPExecution(n_bars=3), - slippage_model=SquareRootSlippage(), -) -result = engine.run(df) -``` - -**执行模型选择**: - -| 场景 | 推荐模型 | 参数 | -|------|---------|------| -| 小额/快速验证 | `ImmediateExecution` | 默认 | -| 大额建仓/平仓 | `TWAPExecution` | `n_bars=3~5` | -| 追踪 VWAP 基准 | `VWAPExecution` | `n_bars=5` | -| 精确入场价位 | `LimitExecution` | `ttl_bars=5` | - -**TWAP vs VWAP 示例**: - -```python -# TWAP: 300 股拆成 3 笔 100 股,在 bar 1/2/3 以 close 执行 -engine = BacktestEngine( - MyStrategy, cash=100_000, - execution_model=TWAPExecution(n_bars=3), -) - -# VWAP: 按成交量分布拆 300 股 — 成交量大的 bar 分配更多 -engine = BacktestEngine( - MyStrategy, cash=100_000, - execution_model=VWAPExecution(n_bars=3, volume_lookback=20), -) - -# 限价单:在 50 元挂买入,5 根 K 线内 low <= 50 才成交 -class LimitBuyStrategy(Strategy): - def init(self): pass - def next(self): - if self._bar_index == 0: - self.buy(size=100, price=50.0) # 指定限价 - -engine = BacktestEngine( - LimitBuyStrategy, cash=100_000, - execution_model=LimitExecution(ttl_bars=5), -) -``` - -### 5.3 归因分析 - -从回测结果生成归因报告: - -```python -from easy_tdx.backtest import BacktestEngine -from easy_tdx.backtest.attribution import AttributionAnalyzer - -# 运行回测 -engine = BacktestEngine(MyStrategy, cash=1_000_000) -result = engine.run(df) - -# --- 成本归因 --- -analyzer = AttributionAnalyzer(result.trades, result.equity_curve) -cost_report = analyzer.cost_attribution() -print(f"总收益: {cost_report.total_return:.2%}") -print(f"总交易成本: {cost_report.total_trade_cost:.0f} 元") -print(f" 佣金: {cost_report.commission_cost:.0f}") -print(f" 滑点: {cost_report.slippage_cost:.0f}") -print(f" 印花税: {cost_report.stamp_tax_cost:.0f}") - -# --- Brinson 归因(需要基准)--- -import numpy as np -import pandas as pd -# 构造基准曲线(如沪深300) -benchmark = pd.DataFrame({ - "datetime": result.equity_curve["datetime"], - "total": np.linspace(100000, 108000, len(result.equity_curve)), -}) -analyzer = AttributionAnalyzer(result.trades, result.equity_curve, benchmark=benchmark) -brinson_report = analyzer.brinson_attribution() -print(f"配置贡献: {brinson_report.allocation_return:.2%}") -print(f"选股贡献: {brinson_report.selection_return:.2%}") -print(f"交叉效应: {brinson_report.interaction_return:.2%}") - -# --- 因子归因(需要因子数据)--- -exposures = pd.DataFrame({"momentum": [0.5, 0.3, 0.2], "quality": [0.1, -0.1, 0.0]}) -returns = pd.DataFrame({"momentum": [0.05, 0.03, 0.02], "quality": [0.01, -0.02, 0.0]}) -analyzer = AttributionAnalyzer( - result.trades, result.equity_curve, - factor_exposures=exposures, factor_returns=returns, -) -factor_report = analyzer.factor_attribution() -for name, ret in factor_report.factor_returns.items(): - print(f" {name}: {ret:.4f}") -print(f"特质收益: {factor_report.specific_return:.4f}") - -# --- 完整报告(自动选择最佳归因模式)--- -full_report = analyzer.full_report() -``` - -**归因模式优先级**:因子归因 > Brinson 归因 > 成本归因。`full_report()` 自动选择数据最完整的模式。 - ---- - -## 6. CLI 命令 - -```bash -# 列出所有内置因子 -easy-tdx factor list --table - -# 因子分析(需要数据,输出示例代码) -easy-tdx factor analyze momentum_20d - -# 组合因子回测(需要数据,输出示例代码) -easy-tdx pfactor backtest momentum_20d --n-stocks 10 --optimizer factor_weighted -``` - -CLI 命令输出 Python API 示例代码,方便复制使用。完整的因子计算和组合回测建议通过 Python API 完成。 - ---- - -## 7. 完整工作流示例 - -从数据获取到组合回测再到归因分析的完整管道: - -```python -""" -easy-tdx 量化研究完整工作流示例。 - -依赖: pip install easy-tdx -""" - -from easy_tdx import TdxClient, Market, KlineCategory -from easy_tdx.factor import FactorEngine, FactorAnalyzer, preprocess -from easy_tdx.portfolio import RebalanceEngine, FactorWeightedOptimizer -from easy_tdx.backtest import BacktestEngine -from easy_tdx.backtest.slippage import SquareRootSlippage -from easy_tdx.backtest.execution import TWAPExecution -from easy_tdx.backtest.attribution import AttributionAnalyzer - -# ── 1. 数据获取 ────────────────────────────────────── -client = TdxClient() -stock_pool = ["000001", "000858", "600519", "600036", "601318", - "000333", "002415", "601012", "600276", "000568"] - -data = {} -for code in stock_pool: - market = Market.SH if code.startswith("6") else Market.SZ - data[code] = client.get_security_bars( - market, code, KlineCategory.DAY, 0, 500 - ) -print(f"获取 {len(data)} 只股票数据") - -# ── 2. 因子计算 ────────────────────────────────────── -engine = FactorEngine() -factor_data = engine.compute_cross_section( - data, ["momentum_20d", "volatility_20d", "rsi_14"] -) -print(f"截面因子数据: {len(factor_data)} 行") - -# ── 3. 因子预处理 ───────────────────────────────────── -clean = preprocess( - factor_data, - factor_names=["momentum_20d", "volatility_20d", "rsi_14"], - steps=["winsorize", "zscore", "fill_missing"], -) - -# ── 4. 因子分析 ────────────────────────────────────── -forward_returns = engine.compute_forward_returns(data, period=5) - -for factor_name in ["momentum_20d", "volatility_20d", "rsi_14"]: - analyzer = FactorAnalyzer(clean, forward_returns) - report = analyzer.full_report(factor_name) - print(f"\n── {factor_name} ──") - print(f" IC均值: {report.mean_ic:.4f} ICIR: {report.icir:.4f}") - print(f" 多头年化: {report.long_only_annual:.2%}") - print(f" 多空夏普: {report.long_short_sharpe:.4f}") - -# ── 5. 组合回测 ────────────────────────────────────── -rebalancer = RebalanceEngine( - optimizer=FactorWeightedOptimizer(), - factor_name="momentum_20d", - n_stocks=5, - rebalance_freq="M", - cash=1_000_000, -) -result = rebalancer.run(data, start_date=20230101, end_date=20240101) -print(f"\n── 组合回测 ──") -print(f" 总收益: {result.performance['total_return']:.2%}") -print(f" 年化: {result.performance['annual_return']:.2%}") -print(f" 最大回撤: {result.performance['max_drawdown']:.2%}") -print(f" 夏普: {result.performance['sharpe']:.4f}") - -# ── 6. 高级单策略回测(滑点 + 执行仿真)────── -from easy_tdx.backtest import Strategy - -class MomentumStrategy(Strategy): - def init(self): - pass - def next(self): - if self._bar_index < 20: - return - ret = (self.data.close[0] - self.data.close[-20]) / self.data.close[-20] - if ret > 0.05 and self.position["size"] == 0: - self.buy(size=0) - elif ret < -0.03 and self.position["size"] > 0: - self.sell(size=0) - -bt_engine = BacktestEngine( - MomentumStrategy, - cash=500_000, - slippage_model=SquareRootSlippage(impact_coeff=0.1), - execution_model=TWAPExecution(n_bars=3), -) -# 选一只股票做回测 -bt_result = bt_engine.run(data["600519"]) -print(f"\n── 高级回测(600519)──") -print(f" 总收益: {bt_result.performance['total_return']:.2%}") -print(f" 夏普: {bt_result.performance['sharpe']:.4f}") - -# ── 7. 归因分析 ────────────────────────────────────── -att_analyzer = AttributionAnalyzer(bt_result.trades, bt_result.equity_curve) -cost_report = att_analyzer.cost_attribution() -print(f"\n── 成本归因 ──") -print(f" 总交易成本: {cost_report.total_trade_cost:.0f} 元") -print(f" 佣金: {cost_report.commission_cost:.0f}") -print(f" 滑点: {cost_report.slippage_cost:.0f}") -print(f" 印花税: {cost_report.stamp_tax_cost:.0f}") - -print("\n完成。") -client.close() -``` - ---- ## 向后兼容 From ae24c3a5f154b78baa916867c93675166adcea9b Mon Sep 17 00:00:00 2001 From: awayings Date: Tue, 8 Sep 2026 23:21:50 +0800 Subject: [PATCH 5/6] =?UTF-8?q?docs:=20=E6=96=B0=E5=A2=9E=20architecture/d?= =?UTF-8?q?evelopment=EF=BC=8C=E9=87=8D=E5=86=99=20docs/index.md=20?= =?UTF-8?q?=E5=85=A8=E9=87=8F=E7=B4=A2=E5=BC=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - architecture.md:七层架构图 + 源码树 + 分层要点(越层直调/协议层无 IO/ e2e_mock 替身/__main__ 三形态/平台差异) - development.md:环境初始化/测试三层分布/静态检查/开发流程四阶段 (需求 Issue→开发测试→提交 CI→发布 release+CHANGELOG)/文档规范 - index.md:人类目录(分类+每文件一句描述+历史归档标注)+ 完整 toctree (38 个 md 全部入树,消除 ReadTheDocs orphan 页面) Co-Authored-By: Claude --- docs/architecture.md | 54 ++++++++++++++++++++++ docs/development.md | 87 ++++++++++++++++++++++++++++++++++ docs/index.md | 108 +++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 244 insertions(+), 5 deletions(-) create mode 100644 docs/architecture.md create mode 100644 docs/development.md diff --git a/docs/architecture.md b/docs/architecture.md new file mode 100644 index 0000000..f181603 --- /dev/null +++ b/docs/architecture.md @@ -0,0 +1,54 @@ +# 架构 + +easy-tdx 七层架构总览:接口 → 服务 → 领域 → 持久 → 网关 → 协议 → 外部源 + +七层分层,请求自上而下、数据(pandas DataFrame)自下而上:**① 用户接口层**(Web UI / CLI / Python API / 桌面 EXE)→ **② Web 服务层**(FastAPI + SSE 实时推送 + 异步任务)→ **③ 领域层**(回测 / 指标 / 缠论 / 因子 / 选股 / 组合,纯计算零网络)→ **④ 数据持久层**(DuckDB K 线仓库 + 通达信本地 vipdoc 文件)→ **⑤ 客户端网关层**(8 个客户端 + 健康分 / 故障转移)→ **⑥ 协议层**(通达信二进制协议编解码)→ **⑦ 外部数据源**(通达信服务器 / 中金所 / 新浪 / 巨潮 / LLM)。虚线为旁路直连(HTTP 数据源 / 本地文件 / CLI 与 Python API 越层直调)。 + +🖼️ 交互版架构图(可缩放平移、悬停查看 38 个模块的职责详情、一键导出 PNG):[architecture.html](./architecture.html) + +## 源码树 + +``` +src/easy_tdx/ +├── client.py # TdxClient / AsyncTdxClient(标准协议) +├── unified.py # UnifiedTdxClient(统一入口) +├── config.py # 服务器地址、端口、超时配置 +├── indicator.py # 技术指标计算(34 个,基于 MyTT) +├── MyTT.py # 麦语言技术指标算法库 +├── mac/ +│ ├── client.py # MacClient / AsyncMacClient(MAC 协议) +│ ├── enums.py # Period, Adjust, Category, ExMarket, SortType, ... +│ ├── models.py # MacBar, MacQuoteField, MacTick, BoardInfo, ... +│ └── commands/ # MAC 命令(build_request + parse_response,无 IO) +├── ex/ +│ ├── client.py # ExTdxClient / AsyncExTdxClient(标准协议扩展市场) +│ ├── mac_client.py # MacExClient / AsyncMacExClient(MAC 协议扩展市场) +│ └── transport/ # ExTdxConnection(端口 7727) +├── transport/ +│ ├── sync.py # TdxConnection + ping_host / ping_all +│ └── async_.py # AsyncTdxConnection(asyncio) +├── commands/ # 标准协议命令(无 IO) +├── codec/ # price / volume / datetime / frame / bitmap 编解码 +├── chanlun/ # 缠论技术分析(K线合并/分型/笔/线段/中枢/买卖点/背驰) +├── factor/ # 因子引擎(Factor ABC/19内置因子/截面计算/因子分析/预处理管道) +├── portfolio/ # 组合管理(4优化器/风险模型/再平衡引擎) +├── backtest/ # 回测引擎(Strategy基类/向量化引擎/多因子组合/滑点模型/执行仿真/归因分析) +├── screen/ # 策略选股扫描(scan信号扫描/rank回测排名/并发扫描/增量缓存) +├── realtime/ # 实时数据推送框架(EventBus/事件驱动/asyncio) +├── web/ # Web API(FastAPI REST + WebSocket) +├── models/ # 纯 dataclass,无业务逻辑 +├── offline/ # 离线数据读写模块(读取 + 写入同步) +└── cli/ # easy-tdx CLI(click) +``` + +commands 层不依赖 transport,可独立单测。 + +## 分层要点 + +- **协议层无 IO**:`commands/`、`codec/`、`mac/commands/` 只做编解码,可完全离线单测(`tests/fixtures/` 的 hex dump 即其测试镜像)。 +- **领域层零网络**:`backtest/`、`chanlun/`、`factor/`、`portfolio/`、`screen/` 只吃 DataFrame,不碰网络——这是回测/扫描可在无行情连接时运行的基础。 +- **网关层统一入口**:`unified.py` 封装 8 个客户端(标准/MAC × 同步/异步 × 常规/扩展),带健康分与故障转移;上层(Web、CLI)优先走它。 +- **越层直调**:CLI 与 Python API 不经过 Web 服务层,直接调网关/领域层;HTTP 数据源(新浪/巨潮/中金所)与本地文件直读是旁路。因此同一功能常有三处入口(CLI 命令 / Python API / REST 端点),改领域逻辑三处受益;改协议/网关时注意 Web 层的替身切入点(`web/e2e_mock.py` 在 `EASY_TDX_E2E_MOCK=1` 下替换全部客户端)。 +- **CLI 薄封装**:`cli/cmd_*.py` 每个文件一个 click 命令组,业务全部在领域/网关层;领域模块内也有 CLI(`backtest/cli.py`、`screen/cli.py`),由 `cli/__init__.py` 汇总注册。入口链:`easy-tdx` 命令 → `_editable_guard:main`(可编辑安装失效时打印修复指引)→ CLI。 +- **`python -m easy_tdx` 三种形态**(`__main__.py`):开发态无参默认等价 `easy-tdx serve`;打包态双击走托盘(uvicorn 后台线程 + 主线程 pystray 托盘);multiprocessing 子进程拦截保护(Windows spawn 下防止子进程重复启动 uvicorn,一键寻优/screen 扫描等多进程功能依赖它)。 +- **离线数据平台差异**:`.day` 文件路径分隔符 / GBK 文件名 / 时区行为在 Windows 与 Linux 不同,CI 有 Windows matrix 覆盖,改 `offline/` 时留意。 diff --git a/docs/development.md b/docs/development.md new file mode 100644 index 0000000..f7e97a9 --- /dev/null +++ b/docs/development.md @@ -0,0 +1,87 @@ +# 开发环境与流程 + +本文档是开发者的完整工作流参考。命令速查亦见 [CLAUDE.md](../CLAUDE.md)。 + +## 环境初始化 + +```bash +git clone git@github.com:awayings/easy_tdx.git && cd easy_tdx +uv sync --all-extras # 建 .venv 并装全部 extras(普通 uv sync 只装基础依赖) +``` + +CI 不用 uv,走 `pip install -e ".[dev]"` + `pip install -r requirements-dev.txt`。改依赖时两套流程都要考虑:pyproject.toml 只写下界+上界,`uv.lock` 与 `requirements-dev.txt` 才是可复现锁(dev 工具链锁定版本必须兼容 Python 3.10,CI 矩阵跑 3.10/3.12/3.13)。 + +前端:`cd web-ui && npm ci && npm run build`(`build` = vue-tsc 类型检查 + vite build)。**`pip install -e .` 要求 `web-ui/dist` 存在**(hatchling `force-include` 把它打进 wheel 的 `easy_tdx/web/dist/`),所以改前端后、跑 Python 测试/安装前必须先构建。 + +## 测试 + +```bash +python -m pytest tests/unit/ -v # 单元测试(无需网络,全部 mock) +XMTDX_LIVE=1 python -m pytest tests/integration/ -v # 集成测试(连真实通达信服务器,默认 skip) +python -m pytest tests/unit/ --cov src/easy_tdx --cov-fail-under=60 # 覆盖率门槛 60 +``` + +三层测试分布: + +| 层 | 位置 | 跑在哪 | 说明 | +|---|---|---|---| +| 单元 | `tests/unit/` | CI(6 格矩阵)+ 本地 | 全 mock:`tests/fixtures/` 真实协议 hex dump + JSON 对照,`tests/golden/` 期望输出 | +| 集成 | `tests/integration/` | **仅本地** | `XMTDX_LIVE=1` 才执行,连真实 TDX 服务器 smoke test | +| 前端 E2E | `web-ui/e2e/*.spec.ts` | CI frontend job + 本地 | Playwright,`EASY_TDX_E2E_MOCK=1` 后端合成行情,不连真实服务器 | + +- `tests/conftest.py` 默认设 `EASY_TDX_NO_TASK_DB=1`,防单测污染 `~/.easy_tdx/tasks.db`;需要测试存储的用例用 `EASY_TDX_CONFIG_DIR` 指向 `tmp_path` 显式重开。 +- `tests/unit/test_ai_llm.py` 依赖 LLM API key 轮询,CI 用 `--ignore` 跳过,本地有 mock 可跑。 +- `asyncio_mode = "auto"`:async 测试无需 `@pytest.mark.asyncio`。 + +## 静态检查 + +```bash +mypy src/ # strict 模式(pyproject 配置) +ruff check src/ tests/ # E/F/I/UP 规则 +ruff format --check src/ tests/ +``` + +mypy/ruff 均排除 `src/easy_tdx/exchange_margin.py`;`MyTT.py` 有手写 `MyTT.pyi` stub 保持 strict 检查。 + +本地一键门禁(等价 CI 三 job 的本地版): + +```bash +bash scripts/verify_ci.sh # ruff → format → mypy → pytest(排除 integration)→ 前端 build + E2E +bash scripts/verify_ci.sh --fast # 只跑静态检查 +# 可选:ln -s ../../scripts/verify_ci.sh .git/hooks/pre-push +``` + +## 开发流程 + +### a. 需求(Issue) + +- 功能/缺陷先在 GitHub Issues 提出;代码注释与提交说明中引用编号(如 `#58`、`审计 #9`)。 +- 复杂功能先写设计文档再动手(历史范本:`docs/board-overview-design.md`、`docs/hotspot-rolling-design.md`,以及 `docs/superpowers/` 下的 specs)。 +- 功能变更时同步评估文档更新(见「文档规范」)。 + +### b. 开发与测试 + +- 新功能/修复按 TDD 习惯先写红测试再实现;单元测试必须零网络、零真实服务器依赖。 +- 命令形态变更时 `easy-tdx --help` 自检;Web 路由变更时 `/docs` Swagger 自检。 + +### c. 提交与 CI + +- 提交信息带前缀(`feat:` / `fix:` / `test:` / `docs:` / `refactor:`,可带作用域如 `feat(web):`),中文描述。push/PR 到 `main` 触发 `ci.yml`: + - test job:ubuntu/windows × py3.10/3.12/3.13 六格矩阵跑单测(覆盖率 ≥60)+ ruff + format + - mypy job:strict 模式(py3.13) + - frontend job:vue-tsc + Playwright mock E2E +- **集成测试不进 CI**(依赖真实 TDX 服务器),发布前本地 `XMTDX_LIVE=1` 手动跑一遍。 + +### d. 发布版本 + +1. 收敛时打一个聚合提交 `release: vX.Y.Z — 中文一句话摘要`,同一提交内包含:代码与测试改动 + `pyproject.toml` 版本号 bump + `CHANGELOG.md` 新增版本小节。 +2. CHANGELOG 遵循 Keep a Changelog(zh-CN):`## [X.Y.Z] — 日期` 倒序最新在前,先一段加粗导语再按主题分 `###` 小节,条目带文件链接,测试小节报数字验收(如「全量 1820 通过,ruff / mypy / vue-tsc 全绿」)。**无 Unreleased 区,CHANGELOG 在 release 提交时写入**。 +3. 打 tag 推送即自动发布:`git tag vX.Y.Z && git push origin vX.Y.Z`,触发两个独立 workflow——`publish.yml`(PyPI trusted publishing,OIDC 无 token)与 `release.yml`(Windows EXE via PyInstaller + GitHub Release,正文含 SHA256/SmartScreen 说明;GitHub release notes 自动生成,**不读取 CHANGELOG.md**)。 +4. 版本单一来源是 `pyproject.toml`(前端品牌区版本来自后端 `GET /api/v1/meta`);文档一律不写死版本号。 + +## 文档规范 + +- **大小限制**:每份文档约 500 行为上限,超限必须拆分,通过 [index.md](./index.md) 与 README 文档导航串联。过大文件不可新增。 +- **类型两分**:教程(how-to,代码示例)与参考(速查/字段/命令表)原则上分开成文。 +- **可达性标准**:任何文档变更必须以「[README.md](../README.md) + [docs/index.md](./index.md) 可达的文件」为标准——新文件必须同时进 README 文档导航与 index.md;删除/改名必须同步修复全部链接。 +- **禁止硬编码版本横幅**:版本信息以 `pyproject.toml` 与 `CHANGELOG.md` 为准;功能引入说明里的版本标注(如「v1.29.1」)除外。 diff --git a/docs/index.md b/docs/index.md index c85d9ac..2d622e1 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,16 +1,114 @@ -# easy-tdx 文档 +# easy-tdx 文档索引 + +本索引是文档的目录目录:**新增或删除文档必须同步更新本文件与 README 文档导航**(见 [development.md](./development.md) 的文档规范)。每份文档 ≤500 行,超限拆分;教程(how-to)与参考(速查)分开成文。 + +## 开始 + +- [README](../README.md) — 项目门面:功能总览、30 秒上手、安装、文档导航(ReadTheDocs 落地页即其包含) + +## CLI 参考 + +- [cli.md](./cli.md) — 全部命令速查表 + 按域导航 +- [cli-market.md](./cli-market.md) — 行情数据:报价 / K线 / 分时 / 板块 / 资金 / 中金所 / 扩展市场 +- [cli-finance.md](./cli-finance.md) — 财务与公告:巨潮公告检索 / 财报三表 / 通达信 F10 +- [cli-indicators.md](./cli-indicators.md) — 技术指标与公式:34 指标 / 通达信公式 / 捉妖 / 乖离率 +- [cli-backtest.md](./cli-backtest.md) — 回测与寻优:backtest / optimize / portfolio / run-all(含参数表) +- [cli-screen.md](./cli-screen.md) — 选股扫描:全市场信号扫描 / 强势股排名 +- [chanlun.md](./chanlun.md) — 缠论分析(CLI + Python,含完整输出示例) + +## 本地数据 + +- [data-local.md](./data-local.md) — K 线仓库(DuckDB)与 vipdoc 离线读写(CLI + Python 合一操作手册) + +## Web + +- [web-api.md](./web-api.md) — REST + WebSocket + SSE 端点与示例、帧规范 +- [web-ui.md](./web-ui.md) — 行情终端与回测工作台零代码操作手册 +- [packaging.md](./packaging.md) — Windows EXE 打包(PyInstaller)与分发 + +## Python API + +- [python-api.md](./python-api.md) — 教程:连接管理 / MAC 协议 / 统一客户端 / 离线 / 缠论 / 公告 / 财报 / 实时轮询 +- [api_reference.md](./api_reference.md) — 参考:TdxClient 标准协议方法速查 + MAC 客户端方法表 +- [field_mapping.md](./field_mapping.md) — 参考:数据模型字段 ↔ 中文含义 ↔ 类型 + 枚举(标准 + MAC) + +## 回测与量化 + +- [backtest_usage.md](./backtest_usage.md) — 回测引擎使用手册(策略 / 配置 / 结果) +- [backtest-examples.md](./backtest-examples.md) — 完整示例集 + 注意事项 +- [quantitative-guide.md](./quantitative-guide.md) — 因子引擎与组合管理(基础) +- [quantitative-advanced.md](./quantitative-advanced.md) — 滑点模型 / 执行仿真 / 归因分析 / 完整工作流 + +## 指标深度 + +- [indicator-zhuoyao.md](./indicator-zhuoyao.md) — 捉妖大师(ZHUOYAO)多周期 ROC 共振详解 +- [indicator-bias-signal.md](./indicator-bias-signal.md) — 30 日乖离率信号(BIAS_SIGNAL)详解 + +## 开发者 + +- [architecture.md](./architecture.md) — 七层架构图 / 源码树 / 分层要点 +- [development.md](./development.md) — 环境初始化 / 测试 / CI / 发布流程 / 文档规范 + +## 协议与逆向 + +- [protocol-reverse-engineering.md](./protocol-reverse-engineering.md) — 通达信二进制协议逆向过程 +- [protocol-unknown-fields.md](./protocol-unknown-fields.md) — 未知字段研究日志(活文档) + +## 历史归档(已实施 / 规划完成,供追溯) + +- [board-overview-design.md](./board-overview-design.md) — 行业/概念总览页设计稿(已上线) +- [hotspot-rolling-design.md](./hotspot-rolling-design.md) — 市场热点滚动页设计稿(已上线) +- [market-insights-roadmap.md](./market-insights-roadmap.md) — 盘面洞察功能路线图(已收尾) +- [upgrade-plan-2026H2.md](./upgrade-plan-2026H2.md) — 2026 H2 升级计划(全部阶段完成) +- [superpowers/](superpowers/) — 回测/因子/组合引擎的计划与设计存档(v1.11–v1.15 时代,非现行文档) + +## HTML 资产(仅 GitHub 可交互,ReadTheDocs 不发布) + +- [architecture.html](./architecture.html) — 38 模块交互式架构图(可缩放平移、导出 PNG) +- [回测系统完全上手手册.html](./回测系统完全上手手册.html) — 零基础图文回测手册(13 章) + +--- ```{toctree} -:maxdepth: 2 -:caption: 目录 +:maxdepth: 1 +:caption: 文档目录 readme +cli +cli-market +cli-finance +cli-indicators +cli-backtest +cli-screen +chanlun +data-local +web-api +web-ui +python-api api_reference field_mapping backtest_usage +backtest-examples quantitative-guide -protocol-reverse-engineering -protocol-unknown-fields +quantitative-advanced indicator-zhuoyao indicator-bias-signal +architecture +development +packaging +protocol-reverse-engineering +protocol-unknown-fields +board-overview-design +hotspot-rolling-design +market-insights-roadmap +upgrade-plan-2026H2 +superpowers/plans/2026-06-09-backtest-engine +superpowers/plans/2026-06-12-v1.11.0-factor-engine +superpowers/plans/2026-06-12-v1.12.0-factor-analysis +superpowers/plans/2026-06-12-v1.13.0-portfolio +superpowers/plans/2026-06-12-v1.14.0-slippage-execution +superpowers/plans/2026-06-12-v1.15.0-attribution +superpowers/specs/2026-06-09-backtest-engine-design +superpowers/specs/2026-06-12-advanced-backtest-design +superpowers/specs/2026-06-12-quantitative-factor-engine-design ``` From f58010ead8482408166d70cdac53f5c54b98bbde Mon Sep 17 00:00:00 2001 From: awayings Date: Tue, 8 Sep 2026 23:21:55 +0800 Subject: [PATCH 6/6] =?UTF-8?q?docs:=20README=20=E7=98=A6=E8=BA=AB?= =?UTF-8?q?=E8=87=B3=20204=20=E8=A1=8C=20+=20=E6=96=87=E6=A1=A3=E5=AF=BC?= =?UTF-8?q?=E8=88=AA=EF=BC=9B=E4=BF=AE=E5=A4=8D=20examples=20=E8=B4=A2?= =?UTF-8?q?=E5=8A=A1=E9=94=9A=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - README 保留功能介绍/30 秒上手/架构摘要/安装/Web UI 入口,CLI 参考、 Web API、Python API、枚举、完整 API 列表、架构树、开发章节全部移交 docs/ - 新增「文档导航」段:24 份 docs 全部从 README 可达,完整索引见 docs/index.md - examples/06_finance/README.md 的 #财务 锚点改指 docs/cli-finance.md#财务 Co-Authored-By: Claude --- README.md | 2017 +-------------------------------- examples/06_finance/README.md | 2 +- 2 files changed, 40 insertions(+), 1979 deletions(-) diff --git a/README.md b/README.md index 8695711..4d02335 100644 --- a/README.md +++ b/README.md @@ -127,2002 +127,63 @@ easy-tdx serve # 行情终端 + 回测工作台 随便用,随便改,随便分发。 **数据面前,人人平等。** + ## 项目架构 easy-tdx 七层架构总览:接口 → 服务 → 领域 → 持久 → 网关 → 协议 → 外部源 -七层分层,请求自上而下、数据(pandas DataFrame)自下而上:**① 用户接口层**(Web UI / CLI / Python API / 桌面 EXE)→ **② Web 服务层**(FastAPI + SSE 实时推送 + 异步任务)→ **③ 领域层**(回测 / 指标 / 缠论 / 因子 / 选股 / 组合,纯计算零网络)→ **④ 数据持久层**(DuckDB K 线仓库 + 通达信本地 vipdoc 文件)→ **⑤ 客户端网关层**(8 个客户端 + 健康分 / 故障转移)→ **⑥ 协议层**(通达信二进制协议编解码)→ **⑦ 外部数据源**(通达信服务器 / 中金所 / 新浪 / 巨潮 / LLM)。虚线为旁路直连(HTTP 数据源 / 本地文件 / CLI 与 Python API 越层直调)。 +七层分层,请求自上而下、数据(pandas DataFrame)自下而上:**用户接口层**(Web UI / CLI / Python API / 桌面 EXE)→ **Web 服务层**(FastAPI + SSE 实时推送 + 异步任务)→ **领域层**(回测 / 指标 / 缠论 / 因子 / 选股 / 组合,纯计算零网络)→ **数据持久层**(DuckDB K 线仓库 + 通达信本地 vipdoc 文件)→ **客户端网关层**(8 个客户端 + 健康分 / 故障转移)→ **协议层**(通达信二进制协议编解码)→ **外部数据源**(通达信服务器 / 中金所 / 新浪 / 巨潮 / LLM)。 -🖼️ 交互版架构图(可缩放平移、悬停查看 38 个模块的职责详情、一键导出 PNG):[docs/architecture.html](./docs/architecture.html) +🖼️ 交互版架构图(38 模块职责详情)+ 源码树 + 分层要点:[docs/architecture.md](./docs/architecture.md) · [architecture.html](./docs/architecture.html) ## 安装 ```bash -pip install easy-tdx +pip install easy-tdx # 自动注册 easy-tdx CLI 命令 +pip install -e ".[dev]" # 开发模式(测试 / 静态检查工具链) +pip install -e ".[web]" # Web API 模式(FastAPI + Uvicorn) ``` -安装后自动注册 `easy-tdx` CLI 命令: +可选依赖分组:`warehouse`(DuckDB 本地 K 线仓库)、`baostock`(通达信全部路径失败时的最后一级兜底数据源,仅日/周/月线,`EASY_TDX_BAOSTOCK=0` 可关闭)、`packaging`(PyInstaller 打包 EXE)。开发环境初始化(uv)与完整开发流程见 [docs/development.md](./docs/development.md)。 -```bash -easy-tdx --help -``` - -开发模式: - -```bash -pip install -e ".[dev]" - -# 开发 Web API 模式(含 FastAPI + Uvicorn) -pip install -e ".[web]" -``` - -### 可选:baostock 自动兜底数据源 - -通达信协议依赖第三方行情服务器,为了"部分兜底、总好过全挂",可选安装 baostock 作为最后一级自动回退: - -```bash -pip install "easy-tdx[baostock]" -``` - -装完即自动生效,平时**一次都不会调用**——只有当 MAC 协议与标准协议两条 TDX 路径全部失败或返回空时才启用,响应中会带 `source: "baostock"` 字段标注数据来源。设置环境变量 `EASY_TDX_BAOSTOCK=0` 可随时关闭。边界:baostock 是收盘后更新的数据源(当日数据约 17:30 后才有),因此只兜 **日/周/月 K 线** 的历史数据(覆盖沪深,不含北交所),实时行情、分时、板块等能力仍由通达信协议提供。本地 K 线仓库同步同样支持:`easy-tdx warehouse sync --symbols SH:600519 --source auto|tdx|baostock`(默认 auto)。 - -## CLI 参考 - -`easy-tdx` 默认输出 JSON(一行一条记录),`--table` 切换表格,`--output csv` 输出 CSV。 - -### 基础 - -```bash -easy-tdx ping # 服务器测速 -easy-tdx version # 版本号 -``` - -### 行情 - -```bash -# K 线 -easy-tdx kline SZ 000001 --count 30 --table -easy-tdx kline SH 600519 --period 5MIN --adjust QFQ - -# 实时报价 -easy-tdx quote "SZ 000001,SH 600519" --table - -# 市场分类报价(按涨幅排序) -easy-tdx quote-list A --count 20 --table -easy-tdx quote-list KCB --sort TOTAL_AMOUNT --order ASC -easy-tdx quote-list CYB --count 50 -``` - -### 分时 / 成交 - -```bash -easy-tdx tick SZ 000001 --table -easy-tdx tick SH 600519 --days 5 -easy-tdx tick SZ 000001 --date 20250115 - -easy-tdx transaction SZ 000001 --count 100 --table -easy-tdx transaction SH 600519 --date 20250115 -``` - -### 板块 - -```bash -easy-tdx board-list --type GN --table -easy-tdx board-list --type HY --count 200 -easy-tdx board-members 881001 --table -easy-tdx belong-board SZ 000001 --table -easy-tdx board-summary 881001 --table # 板块汇总(成交额/主力净流入/涨跌家数) -easy-tdx board-summary 881001 --members --table # 含成分股明细 -easy-tdx board-ranking --type HY --top 10 --table # 行业板块排行 -easy-tdx board-ranking --type GN --sort-by amount # 概念板块按成交额排行 - -# 板块 N 日涨跌幅排行(默认全部,支持指定日期) -easy-tdx board-change-ranking --table # 行业 20 日涨跌幅排行 -easy-tdx board-change-ranking --type GN --days 10 --table # 概念 10 日涨跌幅排行 -easy-tdx board-change-ranking --type HY --date 20250530 --days 20 --table -easy-tdx board-change-ranking --type HY --top 10 --asc # 行业跌幅前10 -``` - -### 资金 / 监控 - -```bash -easy-tdx capital-flow SH 600519 --table -easy-tdx auction SZ 000001 --table -easy-tdx unusual SH --count 100 --table -easy-tdx market-stat --table -easy-tdx server-info --table -easy-tdx symbol-info SZ 000001 --table -``` - -### 公告检索(巨潮资讯网) - -```bash -easy-tdx announcement 688017 # 默认 30 条,JSON 输出 -easy-tdx announcement 601088 --count 10 --page 2 # 翻页 -easy-tdx announcement 000001 --table # 表格输出(不截断 url) - -# 下载最新 5 条公告的 PDF 到 ./pdfs 目录 -easy-tdx announcement 601088 --count 5 --download 5 --download-dir ./pdfs -``` - -> 独立数据源(巨潮资讯网),无需连接 TDX 行情服务器即可使用。 -> 返回的 ``url`` 含 4 参数可直接打开,``pdf_url`` 为 PDF 直链。 - -### 中金所成交持仓排名(v1.29.1) - -```bash -easy-tdx ccpm IF --table # 最近有数据的交易日(缺省自动回溯) -easy-tdx ccpm IF --date 2026-09-02 # 指定交易日 -easy-tdx ccpm all --date 2026-08-28 --table # 全部 8 个品种一次抓取 -easy-tdx ccpm TL --refresh # 忽略本地缓存,强制重新抓取 -``` - -> 独立数据源(中金所官网),无需连接 TDX 行情服务器。品种:IF 沪深300 / IH 上证50 / IC 中证500 / IM 中证1000 股指期货,TS/TF/T/TL 为 2/5/10/30 年期国债期货。 -> 每个交易日收盘后约 16:15 发布,含该品种**全部合约 × 三类排名(成交量 / 持买单量·多单 / 持卖单量·空单)× 各前 20 名会员**; -> 数据发布后不可变,按日缓存到 `~/.easy_tdx/cache/ccpm/`,历史二次查询零网络。 -> JSON 输出为英文列名(vol/long_pos/short_pos 等,机器友好),`--table` 自动切换中文表头。 -> WebUI 对应「期货持仓排名」页(含新手科普),API 为 `GET /api/v1/ccpm/rank`。 - -### 技术指标 - -```bash -easy-tdx indicator-list --table # 列出所有可用指标 -easy-tdx indicator MACD -m SH -c 600519 --table # MACD -easy-tdx indicator KDJ -m SZ -c 000001 --table # KDJ -easy-tdx indicator RSI -m SH -c 600519 --table # RSI -easy-tdx indicator BOLL -m SH -c 600519 --table # BOLL 布林带 -easy-tdx indicator DMI -m SH -c 600519 --table # DMI 动向指标 -easy-tdx indicator ATR -m SH -c 600519 --table # ATR 真实波幅 -easy-tdx indicator WR -m SH -c 600519 --table # WR 威廉指标 -easy-tdx indicator CCI -m SH -c 600519 --table # CCI 顺势指标 -easy-tdx indicator BIAS -m SZ -c 000001 --table # BIAS 乖离率 -easy-tdx indicator BIAS_SIGNAL -m SH -c 600519 --table # 30日乖离率信号 -easy-tdx indicator OBV -m SZ -c 000001 --table # OBV 能量潮 - -# 多指标同时计算 -easy-tdx indicator MACD,KDJ,RSI,BOLL -m SH -c 600519 --count 10 --table - -# 自定义参数 -easy-tdx indicator MACD -m SH -c 600519 --params SHORT=10,LONG=22 - -# 分钟线指标 -easy-tdx indicator MACD -m SH -c 600519 --period 5MIN --count 50 - -# 仅输出指标值(不含 OHLCV) -easy-tdx indicator RSI -m SZ -c 000001 --no-ohlcv -``` - -### 缠论分析 - -基于缠论理论的技术分析,计算管道:`K 线合并 → 分型识别 → 笔 → 中枢 → 线段 → 买卖点 → 背驰`。默认输出 JSON,加 `--table` 输出可读表格。 - -```bash -easy-tdx chanlun SZ 000001 --table -easy-tdx chanlun SH 600519 --adjust QFQ --table -easy-tdx chanlun SZ 000001 --period 30MIN - -# 多级别联立:分析日线最后一笔在 30 分钟级别中的走势结构 -easy-tdx chanlun SZ 000001 --multi-level 30MIN --table -easy-tdx chanlun SH 600519 --multi-level 5MIN -``` - -#### 输出示例 - -以 `easy-tdx chanlun SH 601088 --table` 为例,输出分五个部分: - -**概要统计** - -``` -标的: 601088 周期: DAILY -原始K线: 800 缠论K线: 589 -分型: 275 笔: 131 中枢: 21 线段: 40 -买卖点: 125 背驰: 73 -``` - -| 字段 | 含义 | -|------|------| -| 原始 K 线 | 从服务端获取的原始 K 线条数 | -| 缠论 K 线 | 经过包含处理(合并)后的 K 线条数,数量一定 ≤ 原始 K 线 | -| 分型 | 识别出的顶分型 + 底分型总数 | -| 笔 | 相邻两个异向分型之间的连线(涨跌方向交替) | -| 中枢 | 至少 3 笔重叠区域形成的密集成交区间 | -| 线段 | 由笔构成的更大级别走势单位 | -| 买卖点 | 一二三类买卖点信号总数 | -| 背驰 | 力度衰减信号总数(笔背驰 / 盘整背驰 / 趋势背驰) | - -**笔** - -``` -[0] ↑ 2023-02-17 → 2023-02-23 h=28.46 l=26.76 ✓ -[1] ↓ 2023-02-23 → 2023-02-28 h=28.46 l=27.8 ✓ -[2] ↑ 2023-02-28 → 2023-03-09 h=29.77 l=27.8 ✓ -``` - -笔是缠论的基本走势单位。每条笔连接一个顶分型和一个底分型,方向严格交替(↑↓↑↓…)。`✓` 表示已确认(后续出现了反向笔),`…` 表示仍在进行中。 - -- `↑`:向上笔,起点是底分型(低点),终点是顶分型(高点) -- `↓`:向下笔,起点是顶分型(高点),终点是底分型(低点) -- `h`/`l`:该笔范围内的最高价 / 最低价 - -**中枢** - -``` -[0] zg=28.46 zd=28.11 gg=32.56 dd=26.76 lines=11 ✓ -[1] zg=31.2 zd=30.45 gg=32.56 dd=27.9 lines=3 ✓ -``` - -中枢是至少 3 笔重叠形成的密集成交区间,代表多空博弈的平衡区域。`✓` 表示已脱离,`…` 表示价格仍在中枢区间内震荡。 - -| 字段 | 含义 | -|------|------| -| `zg` | 中枢上沿(区间内最高的低点)— 支撑/压力的关键分界 | -| `zd` | 中枢下沿(区间内最低的高点) | -| `gg` | 中枢区间内的最高价 | -| `dd` | 中枢区间内的最低价 | -| `lines` | 构成该中枢的笔数,笔数越多代表震荡越充分 | - -中枢的意义:价格在中枢内震荡 → 突破中枢上沿看涨,跌破下沿看跌。`zg`/`zd` 是实战中最常用的参考价位。 - -**线段** - -``` -[0] ↑ 2023-02-17 → 2023-03-09 h=29.77 l=26.76 -[1] ↓ 2023-02-28 → 2023-03-29 h=29.77 l=27.18 -``` - -线段是比笔更大的走势单位,由多笔重叠组合而成。线段的方向不严格交替,可能出现连续同向(如连续多段向上),代表更高一级的趋势方向。实战中通常在线段级别判断大方向,在笔级别找买卖点。 - -**买卖点** - -``` -1buy: 中枢下方力度衰减,一类买点 (l=27.30 < zd=46.72) -2buy: 回调不创新低,二类买点 (l=27.33) -3buy: 回调不破中枢上沿,三类买点 (l=27.80 > zg=27.58) -1sell: 中枢上方力度衰减,一类卖点 (h=50.38 > zg=46.97) -2sell: 反弹不创新高,二类卖点 (h=29.32) -3sell: 反弹不破中枢下沿,三类卖点 (h=28.46 < zd=46.72) -``` - -缠论定义三类买点和三类卖点: - -| 类型 | 买点含义 | 卖点含义 | -|------|----------|----------| -| 一类 | 下跌趋势末端,力度衰减后的第一个低点(抄底) | 上涨趋势末端,力度衰减后的第一个高点(逃顶) | -| 二类 | 一类买点后的回调不创新低(确认反转) | 一类卖点后的反弹不创新高(确认反转) | -| 三类 | 回调不进入中枢上沿(趋势确认,中枢上方买) | 反弹不进入中枢下沿(趋势确认,中枢下方卖) | - -括号内的条件是该信号的触发依据,如 `l=27.80 > zg=27.58` 表示回调低点 27.80 高于中枢上沿 27.58,所以是三类买点。 - -**背驰** - -``` -[✓] bi: 笔背驰: 笔[4] 力度=1.32 < 笔[2] 力度=1.97 -[✓] pz: 盘整背驰: 中枢[11] 内末笔力度=2.49 < 首笔力度=6.64 -[✓] qs: 趋势背驰(上): 中枢[1] 离开力度=3.32 < 中枢[0] 离开力度=4.45 -``` - -背驰是力度衰减信号,表明当前走势动力正在减弱,可能即将反转。力度通过 MACD 面积计算,数值越小力度越弱。 - -| 类型 | 含义 | -|------|------| -| `bi`(笔背驰) | 同向相邻两笔比较,后一笔力度 < 前一笔 → 该方向动力减弱 | -| `pz`(盘整背驰) | 同一中枢内,末笔力度 < 首笔 → 中枢内动力衰减,即将突破 | -| `qs`(趋势背驰) | 两个同向中枢之间比较,后一中枢离开力度 < 前一中枢 → 趋势可能终结 | - -`[✓]` 表示确认背驰。趋势背驰(上)代表上涨趋势可能结束,趋势背驰(下)代表下跌趋势可能结束。 - -### 回测引擎 - -> 📖 **完整使用手册**:[docs/backtest_usage.md](docs/backtest_usage.md) —— -> 涵盖策略编写(`init()`/`next()`)、行情数据访问、指标注册、订单模拟、 -> 绩效指标、组合回测、调仓引擎与完整示例。回测相关用法以该手册为准。 - -内置向量回测引擎,加载 Python 策略文件即可跑回测。策略继承 `Strategy` 基类,在 `init()` 注册指标,在 `next()` 逐 bar 生成买卖信号,引擎完成订单模拟、持仓跟踪和绩效分析。 - -**单策略回测:** - -```bash -easy-tdx backtest SZ 300308 --strategy-file strategies/expma_cross.py --count 2000 --cash 1000000 --adjust QFQ --table -# 推荐加上 --slippage 0.01 模拟真实滑点(元/股),使回测更贴近实盘 - -# 缠论自动桥接:引擎自动计算缠论分析并注入策略 self.chanlun -easy-tdx backtest SZ 000001 --strategy-file strategies/chanlun_strategy.py --chanlun-level DAILY --table -``` - -**样本外验证(v1.25):** - -```bash -# 附加 Walk-Forward 七窗样本外验证(每窗独立开仓,窗口数可调) -easy-tdx backtest SZ 300308 --strategy-file strategies/expma_cross.py --wf --wf-windows 7 - -# 一条龙评估:回测 + WF + 适配性体检 + 综合评分 + S-D 评级 + 买入持有基准对比 -easy-tdx backtest SZ 300308 --strategy-file strategies/expma_cross.py --evaluate -``` - -输出示例: - -``` -=== 回测绩效概要 === -总收益率: 1413.51% -年化收益: 40.85% -最大回撤: 76.75% -夏普比率: 0.88 -胜率: 20.8% -交易次数: 24 -``` - -> ⚠️ **回测 ≠ 实盘**。以上收益率为历史数据回测结果,包含幸存者偏差和过拟合风险, -> 不构成投资建议。实际交易需考虑滑点、流动性、涨跌停无法成交等因素。 -> 请在充分理解策略逻辑后谨慎使用。 - -**参数网格寻优(optimize)与内置策略列表(strategies):** - -```bash -# 列出全部内置策略(名称/参数默认值/预设寻优网格) -easy-tdx strategies - -# 单策略网格寻优(预设网格或 --param 自定义,--workers 4 进程并行) -easy-tdx optimize SZ 000001 --strategy ma_cross -easy-tdx optimize SZ 000001 --strategy ma_cross --param fast=5,10,15 --param slow=20,60 - -# 一键寻优所有内置策略:逐策略按预设网格寻优后全局排名(对应 Web UI /optimize 页) -easy-tdx optimize SZ 000001 --all --workers 4 --table -``` - -**全策略批量对比(CLI):** - -`easy-tdx run-all` 一行命令跑完 `strategies/` 下所有策略并排名: - -```bash -easy-tdx run-all SZ 300308 --count 2000 --cash 1000000 --adjust QFQ - -# 多因子组合回测 -easy-tdx run-all SZ 300308 --combo 2 --combo-mode MAJORITY - -# 加 --show 自动弹出最佳策略的资金曲线 vs 股价对比图 -easy-tdx run-all SZ 300308 --count 2000 --cash 1000000 --adjust QFQ --show - -# 自定义策略目录 -easy-tdx run-all SZ 300308 --strategies-dir my_strategies/ -``` - -也可使用项目自带的 `run_all_strategies.py` 脚本(功能相同): - -```bash -python -X utf8 run_all_strategies.py SZ 300308 --count 2000 --cash 1000000 --adjust QFQ - -# 加 --show 自动弹出最佳策略的资金曲线 vs 股价对比图 -python -X utf8 run_all_strategies.py SZ 300308 --count 2000 --cash 1000000 --adjust QFQ --show -``` - -**多因子组合回测:** - -自动遍历所有 2 因子 / 3 因子组合,找到最优搭配: - -```bash -# 自动寻找最佳 2 因子和 3 因子组合(MAJORITY 模式) -python -X utf8 run_all_strategies.py SZ 300308 --combo 2 --combo 3 --combo-mode majority - -# CLI 方式 -easy-tdx run-all SZ 300308 --combo 2 --combo 3 --combo-mode majority -``` - -CLI 指定策略文件组合: - -```bash -easy-tdx backtest SZ 000001 \ - --combo-strategies strategies/macd_cross.py,strategies/rsi_reversal.py,strategies/bollinger_breakout.py \ - --combo-mode majority --table -``` - -Python API: - -```python -from easy_tdx.backtest import CombinationRunner - -runner = CombinationRunner( - strategy_classes=[MACDStrategy, RSIStrategy, BollingerStrategy], - df=df, cash=100000, -) -results = runner.screen(combo_sizes=(2, 3), mode="MAJORITY") -for r in results[:5]: - print(f"{r.name}: 收益={r.result.performance['total_return']:.2%}") -``` - -信号合并模式: - -| 模式 | 买入条件 | 卖出条件 | 特点 | -|------|---------|---------|------| -| `AND` | 所有因子都看多 | 所有因子都看空 | 极保守,交易少但精确 | -| `MAJORITY` | 过半因子看多 | 过半因子看空 | 平衡,推荐默认 | -| `OR` | 任一因子看多 | 任一因子看空 | 激进,信号多噪声大 | - -`--show` 会用 matplotlib 弹出一个双轴对比窗口:左轴蓝色线是归一化股价,右轴红色线是最佳策略的资金曲线,绿三角=买入、黄三角=卖出,标题显示股票名称和关键绩效指标。需要 `pip install matplotlib`。 - -**多标的组合回测(portfolio):** - -`easy-tdx portfolio` 对多只股票同时回测,共享资金池,按均等比例分配,汇总组合整体绩效: - -```bash -# 两只股票组合回测 -easy-tdx portfolio --stocks SZ:000001,SH:600519 --strategy-file strategies/ma_cross.py --table - -# 自定义资金和周期 -easy-tdx portfolio --stocks SZ:000001,SH:600519,SH:600036 \ - --strategy-file strategies/expma_cross.py --cash 500000 --period DAILY --count 1000 --table - -# 搭配缠论桥接 -easy-tdx portfolio --stocks SZ:000001,SH:600519 \ - --strategy-file strategies/chanlun_strategy.py --chanlun-level DAILY --table - -# 组合级 Walk-Forward / 一条龙评估(与 Web UI /portfolio 页同构) -easy-tdx portfolio --stocks SZ:000001,SH:600519 \ - --strategy-file strategies/ma_cross.py --wf --wf-windows 7 -easy-tdx portfolio --stocks SZ:000001,SH:600519 \ - --strategy-file strategies/ma_cross.py --evaluate -``` - -输出示例: - -``` -=== 组合回测绩效概要 === -标的数量: 3 -总资金: 200,000 -组合收益率: 28.50% -组合年化: 28.50% - -── 各标的详情 ── - SZ000001: 收益=35.20% 夏普=0.92 回撤=15.30% 分配=33% 交易=12 - SH600519: 收益=18.40% 夏普=0.68 回撤=8.50% 分配=33% 交易=8 - SH600036: 收益=31.90% 夏普=0.85 回撤=12.10% 分配=33% 交易=15 -``` - -| 参数 | 说明 | -|------|------| -| `--stocks` | 股票列表:逗号分隔的 `市场:代码`(如 `SZ:000001,SH:600519`) | -| `--cash` | 总资金(默认 20 万) | -| `--allocation` | 资金分配方式(目前支持 `equal` 均等分配) | -| `--chanlun-level` | 自动计算缠论分析并注入策略(如 DAILY/30MIN) | - -### 通达信公式(v1.27) - -粘贴通达信公式即可计算 / 选股 / 回测——命名布尔输出自动成为买卖信号(名字含「买/卖」或 BUY/SELL 优先),30+ 白名单函数(MA/EMA/SMA/HHV/LLV/REF/CROSS/LONGCROSS/MACD/KDJ/RSI/BOLL/ATR…)向量化求值,无未来数据: - -```bash -# 公式计算(最后一根各列值 + 最近信号明细) -easy-tdx formula compute SH 600519 --formula "金叉: CROSS(MA(C,5), MA(C,20));" - -# 批量选股:信号在最后一根 = 1 的标的(--symbols 支持逗号分隔或 @文件) -easy-tdx formula screen --symbols SH:600519,SZ:000001 --formula "金叉: CROSS(MA(C,5), MA(C,20));" - -# 公式回测:买/卖列自动挑选,信号下一根开盘成交,输出绩效 + 评级 + 评分 -easy-tdx formula backtest SH 600519 --file my_formula.txt -``` - -### 本地 K 线仓库(v1.26) - -行情沉淀为 DuckDB 单文件列存(可选依赖:`pip install easy-tdx[warehouse]`),增量同步 + 临时收盘价状态机 + 健康自检: - -```bash -easy-tdx warehouse sync --symbols SH:600519,SZ:000001 # 首次全量,此后只补尾部 -easy-tdx warehouse query SH 600519 --count 30 # 默认忽略未收盘的临时 bar -easy-tdx warehouse stats # 各标的行数 / 数据范围 -easy-tdx warehouse check # 缺口 / 除权跳变 / 新鲜度体检 -``` - -**行情终端 + 回测可视化 Web UI(v1.17 新增,v1.23 升级为行情终端):** - -Web UI 截图 1 - -Web UI 截图 2 - -Web UI 截图 3 - -不想写命令行?用浏览器。`easy-tdx serve` 一条命令启动,浏览器自动打开 `http://localhost:8000`。 - -Web UI 包含两大模块: - -- **行情终端**——侧边栏专业终端布局(行情:市场看板 / 行业总览 / 概念总览 / 自选行情 / 龙头池 / 期货持仓排名): - - **市场看板**:五大指数实时行情(SSE 推送)、全市场涨跌统计(涨/跌/平/涨停/跌停 + 堆叠条)、行业/概念板块热度榜、涨幅榜/跌幅榜、两市异动雷达(加速拉升/封涨停板/大单托盘等),点击个股打开五档盘口 + 分时/日K 对话框; - - **行业总览 / 概念总览**(v1.32.1):全部行业(一级/二级可切)/概念板块一屏尽览——板块广度统计条、涨跌幅分布直方图、热力图与表格双视图、搜索过滤、涨幅/跌幅/涨速异动三榜、翻红/翻绿轮动时间线,30s 自动刷新(休市暂停);点击板块复用详情弹窗(分时/日K + 成分股涨跌榜直达个股); - - **自选行情**:输入 6 位代码一键加自选(SQLite 持久化),全表实时刷新(SSE),行内迷你分时图,点击行看个股详情; - - **龙头池**:159 只核心龙头名单一键只扫龙头(名单仅为扫描范围,不构成任何推荐); - - **期货持仓排名**(v1.29.1):中金所每日成交/持仓前 20 名会员一键采集(品种下拉 + 日期选择 + 自动回溯最近交易日开关),合约页签自动标注主力,前 20 名合计多单/空单/净持仓概览,三组排名并排表格;附「品种一览」「多单空单加减仓怎么看」新手科普(重点:排名看不出套保还是投机,空单多 ≠ 看空市场); - - **实时推送架构**:后端单条轮询循环 fan-out 到所有 SSE 连接(交易时段 ~8s 一拍,盘外降频 60s,无人订阅自动休眠),前端指数退避重连。 -- **回测工作台**——浏览器里选标的、挑策略、调参数,K 线买卖点、净值回撤、25 项绩效指标一目了然。支持组合回测、参数网格寻优、多策略结果对比、策略库(SQLite 持久化)与多策略资金分仓、信号雷达、Walk-Forward / 一条龙附加分析、**AI 解读与解读历史**(分析:单标的回测 / 组合回测 / 参数寻优 / 结果对比 / 策略库 / 信号雷达 / AI 解读历史),全程零代码。 - -**前置条件:** - -```bash -# 需安装 web 可选依赖(FastAPI + Uvicorn) -pip install -e ".[web]" -``` - -**启动(一条命令):** - -```bash -# 启动后端 + 自动打开浏览器(默认 http://localhost:8000) -easy-tdx serve - -# 自定义端口/不自动开浏览器 -easy-tdx serve --port 8080 --no-open-browser -``` - -> 后端启动后约 1-2 秒会自动弹出浏览器。前端界面已编译进 `web-ui/dist/`,由后端同源托管,无需单独跑前端开发服务器。后端行情连接失败时回测路由仍可用(用内联数据),但取行情功能需要后端连通通达信服务器。 - -**不想装 Python?下载 EXE 直接用(面向零基础用户):** - -Windows 用户可以下载打包好的单一 EXE(约 80-150MB),双击即可使用,无需安装 Python/Node 或任何依赖: - -1. 到 [Releases 页面](../../releases) 下载最新的 `easy-tdx-<版本>-windows.exe` -2. 双击运行(首次会被 SmartScreen 拦截,点"更多信息 → 仍要运行") -3. 等待 2-5 秒,浏览器自动打开回测界面 -4. 右下角任务栏出现小图标,右键 → "退出" 可关闭 - -EXE 打包方法见 [`docs/packaging.md`](./docs/packaging.md)。 - -打开浏览器后,「分析」分组下是回测工作台的核心页面: - -**1. 单标的回测**(首页 `/`) - -左侧配置面板从上到下填写,右侧自动出图: - -- **取行情**:选市场(深/沪/北),填 6 位代码,选周期(日线/周线/分钟线),设日期范围(默认最近 3 年),点「取行情」。超过 800 根会自动翻页拼接 -- **选策略**:下拉选 18 个内置策略之一(双均线交叉、MACD、布林带、RSI、KDJ、唐安奇通道、CCI 等),选中后参数表单自动出现,按推荐范围调参 -- **资金与成本**:初始资金、佣金率、滑点、成交模式(默认 next_open 下一根开盘成交) -- 点「开始回测」,右侧依次出:K 线主图(红三角=买入、绿钉=卖出)、净值曲线与回撤双轴图、25 项绩效指标表(总收益/夏普/最大回撤/胜率/盈亏比/Ulcer/VaR/SQN 等)、成交记录明细 -- 结果区右上角有「💾 保存策略」按钮,把当前策略 + 标的 + 成绩快照存进策略库,下次直接载入或参与组合回测 - -**2. 组合回测**(`/portfolio`) - -- 添加多只标的(如 SZ:000001、SH:600519),选策略和日期范围 -- 点「开始组合回测」,右侧出:组合整体绩效(加权收益率)、组合净值曲线(各标的按日期对齐求和)、各标的净值归一化叠加对比图、各标的绩效横向对比表 -- 同样有「保存策略」按钮,可把整个组合配置存进策略库 - -**3. 参数寻优**(`/optimize`) - -- 先取行情(同单标的),选策略 -- 勾选 1-2 个想寻优的参数,填入取值列表(逗号分隔,如 fast 填 `5,10,20,30`),页面实时显示网格点数(上限 200) -- 点「开始寻优」,右侧出:最优结果摘要、参数热力图(2 参数时,颜色映射收益率)、所有网格点排名表 -- 排名表每行有「查看」按钮,点击跳转单标的回测页,自动填充该参数组合跑完整回测 - -**4. 结果对比**(`/compare`) - -- 左侧列出最近 20 个已完成的回测任务(含单标的和组合) -- 勾选 2-4 个,右侧出:归一化净值叠加图(初始=1,看相对走势)、8 项核心指标横向对比表(总收益/夏普/最大回撤/胜率/盈亏比/交易数/年化/波动率) - -**5. 策略库**(`/strategies`,v1.17.11 新增) - -- 保存你觉得不错的策略,下次直接载入或重跑。数据存在本地 SQLite 单文件(`~/.easy_tdx/strategies.db`,重启不丢) -- 每张卡片展示策略名、标的、保存时的成绩快照(总收益/夏普/回撤)、标签、备注、创建时间 -- **载入**:点「载入」跳转对应回测页(单标的/组合),自动回填标的、日期、策略参数,可直接重跑 -- **多策略组合回测**:勾选多个单标的策略(卡片左上角复选框),点顶部「组合回测(N)」——每个策略各拿 1/N 资金、各跑在它保存时的原标的上(取最新行情),净值曲线按日期对齐求和,看综合表现。结果区展示:组合净值曲线、25 项完整绩效指标(与单标的同口径)、各策略绩效对比表、净值叠加图、各策略当前持仓表(回测结束时谁还套着票) - -> ⚠️ **任务不持久化**:回测结果存在后端进程内存,重启 `easy-tdx serve` 后清空。对比页只能选当前运行期间产生的任务。**策略库除外**——保存到策略库的策略持久存在 SQLite,重启不丢。 - -技术栈:Vue 3 + Vite + TypeScript + Pinia + ECharts(按需引入,构建产物约 800KB)。前端代码在 `web-ui/` 目录,独立 `package.json`,不依赖 Python 环境。 - - - -``` -发现 9 个策略文件 -标的: SZ 300308 | K线: 2000 | 资金: 1,000,000 | 复权: QFQ -================================================================================ - ->> 运行策略: bias_reversal ... 完成 (2.4s) ->> 运行策略: bollinger_breakout ... 完成 (0.6s) ->> 运行策略: expma_cross ... 完成 (0.6s) ->> 运行策略: kdj_golden ... 完成 (0.1s) ->> 运行策略: ma_cross ... 完成 (1.4s) ->> 运行策略: macd_cross ... 完成 (2.1s) ->> 运行策略: rsi_reversal ... 完成 (0.2s) ->> 运行策略: turtle_breakout ... 完成 (0.1s) ->> 运行策略: volume_price ... 完成 (6.3s) - -================================================================================ -[*] 策略绩效排名 (按总收益率降序) -================================================================================ - 排名 策略 总收益率 年化收益 最大回撤 夏普 胜率 交易次数 盈亏比 ----------------------------------------------------------------------------------------------------- - *1* 1 expma_cross 1413.51% 40.85% 76.75% 0.88 20.8% 24 6.45 - *2* 2 ma_cross 1258.07% 38.94% 58.01% 0.87 38.2% 55 2.21 - *3* 3 turtle_breakout 905.07% 33.76% 48.30% 0.83 75.0% 4 10.14 - 4 bias_reversal 504.94% 25.47% 42.25% 0.70 66.3% 95 2.08 - 5 macd_cross 387.67% 22.11% 61.08% 0.60 40.0% 85 2.20 - 6 volume_price 247.72% 17.01% 65.73% 0.50 43.3% 254 1.40 - 7 bollinger_breakout 169.65% 13.32% 49.71% 0.44 66.7% 24 1.93 - 8 rsi_reversal 95.89% 8.85% 56.51% 0.33 57.1% 7 2.48 - 9 kdj_golden 89.10% 8.36% 61.86% 0.32 66.7% 3 10.49 -``` - -综合评分(夏普 × 0.4 + 收益/回撤 × 0.3 + 胜率 × 0.3): - -``` - *1* 1 turtle_breakout 23.04 0.83 0.70 75.0% - *2* 2 bias_reversal 20.35 0.70 0.60 66.3% - *3* 3 bollinger_breakout 20.26 0.44 0.27 66.7% -``` - -换一个标的再跑: - -```bash -# 贵州茅台 -python -X utf8 run_all_strategies.py SH 600519 --count 2000 --cash 1000000 --adjust QFQ -``` - -#### `--show` 可视化效果 - -

-
- SH601088 中国神华 — bollinger_breakout 策略 | 收益 1281.8% -

- -

-
- SH600522 中天科技 — kdj_golden 策略 | 收益 568.6% -

- -

-
- SH601179 中国西电 — expma_cross 策略 | 收益 168.0% -

- -

-
- SH600519 贵州茅台 — bollinger_breakout 策略 | 收益 187.0% -

- -> **⚠️ Demo 展示,不作为操作依据。** 历史回测收益不代表未来表现,策略参数未经过样本外验证。 - -#### 自带策略示例 - -`strategies/` 目录下有 16 个开箱即用的策略文件,可直接用于 `--strategy-file`: - -| 文件 | 策略 | 类型 | 适合行情 | -|------|------|------|----------| -| `ma_cross.py` | 双均线交叉(MA5/MA20) | 趋势跟踪 | 单边趋势 | -| `expma_cross.py` | EMA12/EMA50 交叉 | 趋势跟踪 | 单边趋势(比 MA 更灵敏) | -| `macd_cross.py` | MACD 金叉死叉 | 趋势跟踪 | 中长线趋势 | -| `bollinger_breakout.py` | 布林带突破 | 震荡反转 | 横盘震荡 | -| `rsi_reversal.py` | RSI 超买超卖 | 反转 | 震荡市 | -| `kdj_golden.py` | KDJ 低位金叉/高位死叉 | 反转 | 短线震荡 | -| `turtle_breakout.py` | 海龟交易法(唐安奇通道) | 趋势突破 | 牛市启动 | -| `bias_reversal.py` | 乖离率反转 | 反转 | 震荡回归 | -| `volume_price.py` | 量价配合 | 综合判断 | 放量突破 | -| `zhuoyao_momentum.py` | 捉妖大师多周期共振 | 趋势跟踪 | 多周期共振强势股 | -| `dmi_trend.py` | DMI/ADX 趋势强度跟踪 | 趋势跟踪 | 单边趋势(过滤震荡) | -| `cci_breakout.py` | CCI ±100 区间突破 | 区间突破 | 震荡转趋势 | -| `mfi_volume.py` | MFI 量价反转 | 量价反转 | 震荡市(带量能确认) | -| `trix_cross.py` | TRIX 三重平滑趋势交叉 | 趋势跟踪 | 中长线(抗噪音) | -| `mtm_momentum.py` | MTM 动量零线穿越 | 动量 | 趋势拐点 | -| `obv_trend.py` | OBV 能量潮趋势 | 量价趋势 | 资金持续流入的上升趋势 | - -编写自定义策略只需继承 `Strategy` 基类: - -```python -from easy_tdx.backtest import Strategy -from easy_tdx import MyTT - - -class MyStrategy(Strategy): - def init(self): - self.ma = self.I(MyTT.MA, self.data.close, 10) - - def next(self): - if self.data.close[0] > self.ma[self._bar_index]: - self.buy(size=0) # size=0 表示全仓 - elif self.position["size"] > 0: - self.sell(size=0) # size=0 表示清仓 -``` - -完整 API 参考:[docs/backtest_usage.md](docs/backtest_usage.md) - -### 量化因子与组合管理 - -新增三大模块:**因子引擎**(19 个内置因子 + 自定义扩展)、**因子分析**(IC/分层/衰减)、**组合管理**(4 种优化器 + 再平衡引擎)。加上**高级回测增强**:可插拔滑点模型(方根冲击/成交量比例)、执行仿真(TWAP/VWAP/限价单)、归因分析(Brinson + 因子归因)。 - -```python -from easy_tdx.factor import FactorEngine, FactorAnalyzer, preprocess -from easy_tdx.portfolio import RebalanceEngine, FactorWeightedOptimizer -from easy_tdx.backtest import BacktestEngine -from easy_tdx.backtest.slippage import SquareRootSlippage -from easy_tdx.backtest.execution import TWAPExecution - -# 因子研究 -engine = FactorEngine() -factor_data = engine.compute_cross_section(data, ["momentum_20d", "rsi_14"]) -clean = preprocess(factor_data, ["momentum_20d", "rsi_14"]) -forward_returns = engine.compute_forward_returns(data, period=5) -report = FactorAnalyzer(clean, forward_returns).full_report("momentum_20d") -print(f"IC均值={report.mean_ic:.4f} ICIR={report.icir:.4f}") - -# 组合回测 -result = RebalanceEngine( - FactorWeightedOptimizer(), factor_name="momentum_20d", n_stocks=50, cash=1_000_000, -).run(data, start_date=20230101, end_date=20240101) -print(f"年化={result.performance['annual_return']:.2%}") - -# 高级回测(滑点 + 执行仿真) -engine = BacktestEngine( - MyStrategy, cash=1_000_000, - slippage_model=SquareRootSlippage(impact_coeff=0.1), - execution_model=TWAPExecution(n_bars=3), -) -``` - -详细用法和完整工作流示例:**[docs/quantitative-guide.md](docs/quantitative-guide.md)** - -### 策略选股扫描(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` 同步最新数据。 - -### 捉妖大师(重点) - -捉妖大师是多周期涨幅共振指标,通过 20/60/120 日涨幅及指数平滑判断短中长线趋势是否同向,用于筛选趋势刚启动的强势股。 - -```bash -easy-tdx indicator ZHUOYAO -m SH -c 600519 --count 30 --table - -# 自定义周期参数 -easy-tdx indicator ZHUOYAO -m SZ -c 000001 --params N1=90,N2=45,N3=15 - -# 结合其他指标一起看 -easy-tdx indicator ZHUOYAO,MACD,KDJ -m SH -c 600519 --count 20 --table -``` - -输出列说明: - -| 列名 | 含义 | -|------|------| -| `ZY_LONG` | 长线 — 120 日涨幅的 10 日指数平滑 | -| `ZY_MID` | 中线 — 60 日涨幅(%) | -| `ZY_SHORT` | 短线 — 20 日涨幅(%) | -| `ZY_TREND` | 趋势 — 中线的 10 日指数平滑 | - -**核心信号:** 四线全部 > 0 且短线 > 中线 > 长线 = 短中长趋势完全一致向上,是强势股特征。详见 [捉妖大师指标详解](docs/indicator-zhuoyao.md)。 - -### 30日乖离率信号(重点) - -30日乖离率信号指标,在标准乖离率(BIAS)基础上叠加短/长信号线,通过三者位置关系判断趋势方向和转折点。源自通达信经典指标。 - -```bash -easy-tdx indicator BIAS_SIGNAL -m SH -c 600519 --count 60 --table - -# 自定义周期参数 -easy-tdx indicator BIAS_SIGNAL -m SZ -c 000001 --params P=5,M=20 - -# 结合其他指标一起看 -easy-tdx indicator BIAS_SIGNAL,MACD,KDJ -m SH -c 600519 --count 30 --table -``` - -输出列说明: - -| 列名 | 含义 | -|------|------| -| `BS_X` | M日乖离率 — 当前价格偏离30日均线的百分比 | -| `BS_SMA` | 短周期信号线 — 乖离率的 P 日均线,过滤短期噪音 | -| `BS_LMA` | 长周期信号线 — 乖离率的 M 日均线,捕捉中期趋势方向 | - -**核心信号:** X > S_SMA 且 X_LMA 上升 = 多头确认(通达信红色);S_SMA > X 或 X_LMA 下降 = 空头预警(通达信绿色)。多空判断非对称设计——多头需两个条件同时满足,空头只需其一,偏向保守预警。详见 [30日乖离率信号指标详解](docs/indicator-bias-signal.md)。 - -```python -# Python API 用法 -from easy_tdx import MacClient, Market - -with MacClient.from_best_host() as c: - df = c.get_stock_kline_with_indicators( - Market.SH, "600519", - indicators=["BIAS_SIGNAL"], - count=60, - ) - # df 包含: datetime, open, close, high, low, vol, amount - # + BS_X, BS_SMA, BS_LMA -``` - -支持 34 个指标:MACD, KDJ, RSI, BOLL, DMI, ATR, WR, CCI, BIAS, BIAS_SIGNAL, OBV, VR, EMV, MFI, BRAR, ASI, TRIX, DPO, MTM, ROC, EXPMA, BBI, PSY, DFMA, CR, KTN, XSII, MASS, TAQ, ZHUOYAO, SAR, VWAP, AROON, FK。 - -```python -# Python API 用法 -from easy_tdx import MacClient, Market - -with MacClient.from_best_host() as c: - df = c.get_stock_kline_with_indicators( - Market.SH, "600519", - indicators=["ZHUOYAO"], - count=30, - ) - # df 包含: datetime, open, close, high, low, vol, amount - # + ZY_LONG, ZY_MID, ZY_SHORT, ZY_TREND -``` - -支持 34 个指标:MACD, KDJ, RSI, BOLL, DMI, ATR, WR, CCI, BIAS, BIAS_SIGNAL, OBV, VR, EMV, MFI, BRAR, ASI, TRIX, DPO, MTM, ROC, EXPMA, BBI, PSY, DFMA, CR, KTN, XSII, MASS, TAQ, ZHUOYAO, SAR, VWAP, AROON, FK。 - -### 财务 - -```bash -easy-tdx f10 600519 # 茅台利润表,最近 8 期(默认 lrb) -easy-tdx f10 600519 --type fzb --num 4 # 资产负债表,最近 4 期 -easy-tdx f10 000001 --type llb --table # 平安现金流量表,表格输出 -``` - -> 新浪财经数据源,``--type`` 支持 ``lrb``(利润表)/``fzb``(资产负债表)/``llb``(现金流量表)。 -> 独立于 TDX 行情服务器,``item_value`` 已转 float 可直接数值计算,同比附 ``{科目}_同比`` 列。 - -### 通达信原生 F10 与最新财务快照 - -走通达信协议(与 Web 层 ``/finance`` ``/company/*`` 端点同源),覆盖 ``f10``(新浪三表)之外的 F10 全文板块。完整示例见 [examples/06_finance/](./examples/06_finance/README.md)。 - -```bash -easy-tdx finance-info SH 600519 --table # 最新财务快照(30+ 项单期指标) -easy-tdx company-info SH 600519 # F10 板块目录(最新提示/公司概况/...) -easy-tdx company-info SH 600519 "公司概况" # 读板块完整正文(自动解析+读全,无需 offset/length) -easy-tdx company-info SH 600519 600519.txt # 也可直接传文件名(此时用 --offset/--length) -``` - -- ``finance-info``:最新一期财务快照,含股本结构、资产负债、利润、现金流、每股指标(37 字段)。与 ``f10`` 互补——前者是单期快照,后者是多期三表。 -- ``company-info``:**一个命令两种用法**——无板块名参数列 F10 板块目录,有板块名参数读正文。目录含 16 个板块(最新提示、公司概况、财务分析、股东研究、股本结构、资本运作、业内点评、行业分析、公司大事、研究报告、经营分析、主力追踪、分红扩股、高层治理、龙虎榜单、关联个股)。 -- 读正文时传板块名即可自动读取完整内容(按目录 length 分块循环,大板块如「公司大事」也能一次读全);``--offset``/``--length`` 仅在传文件名时生效。通达信多服务器目录版本不一致时自动重试命中。 - - -### 扩展市场(港股/美股/期货) - -```bash -easy-tdx ex markets # 列出可用市场 -easy-tdx ex kline HK_MAIN_BOARD 00700 --count 30 --table # 港股 K 线 -easy-tdx ex kline US_STOCK AAPL --table # 美股 K 线 -easy-tdx ex quote US_STOCK TSLA --table # 美股报价 -easy-tdx ex quote-list HK_MAIN_BOARD --table # 港股商品列表 -easy-tdx ex tick HK_MAIN_BOARD 00700 --table # 港股分时 -``` - -### 离线数据(读取 + 写入同步) - -从本地通达信安装目录直接读取数据文件,无需网络连接: - -```bash -easy-tdx offline home # 检测通达信安装目录 -easy-tdx offline daily SH 600000 --count 10 --table # A 股日线 -easy-tdx offline min SZ 000001 --type lc5 --table # 分钟线(5min/lc1/lc5) -easy-tdx offline ex-files --table # 列出扩展市场可用文件 -easy-tdx offline ex-daily 38#2_CPI --count 5 --table # 扩展市场日线(期货/港股/外盘) -easy-tdx offline gbbq C:\new_jyplug\T0002\hq_cache\gbbq --table # 股本变迁 -easy-tdx offline financial C:\new_jyplug\vipdoc\fin\gpcw20260331.dat # 历史财务 -easy-tdx offline blocks C:\new_jyplug\T0002\blocknew --table # 自定义板块 -``` - -从服务端获取最新日线并写入本地 .day 文件,替代通达信内置下载功能: - -```bash -# 同步单只股票日线(自动增量/全量) -easy-tdx offline sync-daily SZ 000001 -easy-tdx offline sync-daily SH 600519 --vipdoc C:\new_jyplug\vipdoc - -# 一键同步沪深全市场(每天一条命令) -easy-tdx offline sync-all -``` - -> 建议在通达信关闭时执行 sync 命令,避免文件被锁定。空文件自动全量下载,已有数据只做增量追加。 - -## Web API - -将 easy-tdx 暴露为 REST + WebSocket 服务,供前端、其他语言或远程调用。无需额外注册,零配置启动。 - -### 安装 - -```bash -# 标准安装 -pip install easy-tdx[web] - -# 开发模式(从源码安装,支持热重载) -pip install -e ".[web]" -``` - -### 快速启动 - -```bash -# 启动 Web API 服务器(自动连接最优 TDX 服务器) -easy-tdx serve - -# 启动后浏览器打开 http://127.0.0.1:8000/docs 查看完整 API 文档(Swagger UI) -# 也可以访问 http://127.0.0.1:8000/redoc 查看 ReDoc 格式文档 - -# 指定端口和 TDX 服务器 -easy-tdx serve --port 8080 --tdx-host 119.147.212.81 - -# 开发模式(代码修改后自动重载) -easy-tdx serve --reload -``` - -> 💡 启动后访问 **http://127.0.0.1:8000/docs** 可以看到完整的交互式 API 文档,支持在线调试每个接口。 - -### REST API 示例 - -```bash -# ── 基础行情 ── -# 获取深圳市场证券数量 -curl "http://localhost:8000/api/v1/security/count?market=SZ" - -# 获取股票K线 -curl "http://localhost:8000/api/v1/bars?market=SZ&code=000001&category=DAY&count=100" - -# 批量获取实时行情 -curl -X POST "http://localhost:8000/api/v1/quotes" \ - -H "Content-Type: application/json" \ - -d '{"stocks": [{"market": "SZ", "code": "000001"}, {"market": "SH", "code": "600000"}]}' - -# 市场统计 -curl "http://localhost:8000/api/v1/market/stat" - -# 全市场强势股排名(基于本地 vipdoc 数据,扫描约 30-60 秒) -# steady = 中长期稳健 / breakout = 近期妖股 / balanced = 均衡 -curl "http://localhost:8000/api/v1/market/strength?preset=breakout&top_n=20" - -# 自定义权重 + 过滤低流动性(日均成交额 ≥ 5000 万) -curl "http://localhost:8000/api/v1/market/strength?w5=0.5&w20=0.3&w60=0.2&min_amount=50000000&top_n=30" - -# 板块信息(标准协议) -curl "http://localhost:8000/api/v1/block?filename=block_gn.dat" - -# ── 板块分析(MAC 协议)── -# 行业板块列表 -curl "http://localhost:8000/api/v1/board-mac/list?board_type=HY&count=50" - -# 板块成分股(按涨幅排序) -curl "http://localhost:8000/api/v1/board-mac/members?board_symbol=881001&count=20" - -# 个股所属板块 -curl "http://localhost:8000/api/v1/board-mac/belong?market=SZ&code=000001" - -# 板块摘要(含主力净流入、涨跌家数) -curl "http://localhost:8000/api/v1/board-mac/summary?board_symbol=881001" - -# 行业板块涨幅排名 Top 10 -curl "http://localhost:8000/api/v1/board-mac/ranking?board_type=HY&top_n=10" - -# 板块 20 日涨幅排行 -curl "http://localhost:8000/api/v1/board-mac/change-ranking?board_type=HY&days=20&top_n=10" - -# ── 资金 / 信息 ── -# 个股资金流向(主力/散户净流入) -curl "http://localhost:8000/api/v1/mac/capital-flow?market=SH&code=600519" - -# 个股基本信息快照 -curl "http://localhost:8000/api/v1/mac/symbol-info?market=SZ&code=000001" - -# 服务器交易时段信息 -curl "http://localhost:8000/api/v1/mac/server-info" - -# ── 公告检索(巨潮资讯网,独立数据源)── -# 检索公司公告(无需 TDX 行情服务器) -curl "http://localhost:8000/api/v1/announcements?code=688017&count=30&page=1" -# 返回每条含 url(4 参数可直点打开)和 pdf_url(PDF 直链): -# {"data": [{"title":"...","type":"...","date":"...","url":".../detail?stockCode=...","pdf_url":"http://static.cninfo.com.cn/.../xxx.PDF",...}], "count": 30} - -# ── 财报三表(新浪财经,独立数据源)── -# 利润表(type: lrb/fzb/llb) -curl "http://localhost:8000/api/v1/sina/financial-report?code=600519&type=lrb&num=8" -# 返回每行一期(最新在前),列为科目名(float)+ {科目}_同比(如有): - -# ── 排行 / 竞价 / 异动 ── -# 全 A 涨幅排行前 20 -curl "http://localhost:8000/api/v1/mac/quote-list?category=A&count=20&sort_type=CHANGE_PCT" - -# 集合竞价数据 -curl "http://localhost:8000/api/v1/mac/auction?market=SZ&code=000001" - -# 市场异动行情 -curl "http://localhost:8000/api/v1/mac/unusual?market=SH&count=50" - -# ── 扩展市场(期货/港股/美股)── -# 港股 K 线 -curl "http://localhost:8000/api/v1/ex/bars?market=HK_MAIN_BOARD&code=00700&category=DAY&count=30" - -# 美股实时报价 -curl "http://localhost:8000/api/v1/ex/quote?market=US_STOCK&code=AAPL" - -# ── 技术指标 ── -# 列出所有可用指标 -curl "http://localhost:8000/api/v1/indicator/list" - -# 计算 MACD + KDJ 指标 -curl -X POST "http://localhost:8000/api/v1/indicator/compute" \ - -H "Content-Type: application/json" \ - -d '{"data": [{"open":10,"close":10.5,"high":11,"low":9.5,"vol":1000}], "indicators": ["MACD", "KDJ"]}' - -# ── 缠论分析 ── -curl -X POST "http://localhost:8000/api/v1/chanlun/analyze" \ - -H "Content-Type: application/json" \ - -d '{"market": "SZ", "code": "000001", "category": "DAY", "count": 200}' - -# ── 板块总览(一次取全部板块:当日涨跌幅 + 涨速 + 3/5/20日/YTD 涨幅 + 领涨股,服务端 15s 缓存)── -# board_type: HY 行业一级 / HY2 行业二级 / GN 概念 / FG 风格 / DQ 地区 -curl "http://localhost:8000/api/v1/board-mac/overview?board_type=HY" -curl "http://localhost:8000/api/v1/board-mac/overview?board_type=GN" - -# ── 回测任务(WebUI 回测工作台同款后端)── -# 列出内置策略及参数 schema -curl "http://localhost:8000/api/v1/backtest/strategies" -# 提交异步回测(strategy 见 /backtest/strategies;完整字段与 portfolio/multi/optimize/wf/evaluate -# 各端点的请求体以 /docs 的 Swagger 为准),返回 task_id -curl -X POST "http://localhost:8000/api/v1/backtest/run/async" \ - -H "Content-Type: application/json" \ - -d '{"strategy": "ma_cross", "symbol": "SZ:000001", "category": "DAY", "count": 2000}' -# 轮询任务结果(对比页/导出亦走 /backtest/tasks) -curl "http://localhost:8000/api/v1/backtest/tasks/" - -# ── 策略库(保存的策略持久化 SQLite)── -curl "http://localhost:8000/api/v1/strategies" - -# ── 自选股 ── -curl "http://localhost:8000/api/v1/watchlist" -curl -X POST "http://localhost:8000/api/v1/watchlist" \ - -H "Content-Type: application/json" -d '{"market": "SH", "code": "600519", "name": "贵州茅台"}' - -# ── AI 解读(模型 Key 只存本地 ~/.easy_tdx/llm.json)── -curl "http://localhost:8000/api/v1/llm/config" # 当前配置 + Provider 预设 -curl -X POST "http://localhost:8000/api/v1/llm/chat/async" \ - -H "Content-Type: application/json" \ - -d '{"prompt": "解读这份回测报告:..."}' # 后台任务,GET /llm/chat/tasks/{id} 轮询 - -# ── 交易时段(自动刷新门控用)── -curl "http://localhost:8000/api/v1/market/session" -``` - -### WebSocket 实时行情 - -`/api/v1/ws/realtime/{symbol}`(v1.28 起接通数据源):连接即订阅指定标的,服务端 -经 `RealtimeDataFeed`(按 `interval` 秒轮询五档快照 → `EventBus`)推送 tick 帧; -连接断开自动退订,无人订阅时完全停止轮询。盘外时段默认只睡不拉(交易时段过滤), -本地冒烟/演示可配合 `EASY_TDX_E2E_MOCK=1` 的合成行情随时验证(见 -`scripts/ws_smoke.py`)。 - -```javascript -const ws = new WebSocket("ws://localhost:8000/api/v1/ws/realtime/SZ000001"); - -ws.onmessage = (event) => { - const frame = JSON.parse(event.data); - if (frame.type === "tick") { - // {type:"tick", symbol:"SZ000001", market:"SZ", code:"000001", - // price:10.5, volume:12345, ts:1760000000.0, - // open, high, low, pre_close, amount, name} - console.log(frame.symbol, frame.price, frame.ts); - } else if (frame.type === "ping") { - // 服务端 30s 空闲心跳,忽略即可(客户端无须回包) - } -}; - -// 动态订阅更多标的(服务端回 {"type":"status","msg":"subscribed SH600000"}) -ws.send(JSON.stringify({action: "subscribe", symbol: "SH600000"})); -// 退订 -ws.send(JSON.stringify({action: "unsubscribe", symbol: "SH600000"})); -``` - -浏览器接入建议(自动重连 + 心跳容忍):`onclose` 后指数退避重连(参考 -`web-ui/src/stores/quotes.ts` 对 SSE 的同类处理);`{"type":"ping"}` 心跳帧直接 -忽略、不回包;连续 N 秒无任何帧(含 ping)再视为僵死连接主动重连。协议字段完整 -说明见 `docs/api_reference.md` 的 WebSocket 一节;单标的 WS 订阅与看板 SSE -(全量快照)并存不冲突,按需选用。 - -### API 文档 - -启动服务后访问: -- Swagger UI: http://localhost:8000/docs -- ReDoc: http://localhost:8000/redoc - -### 编程 API - -```python -from easy_tdx.web import create_app -import uvicorn - -app = create_app(host="119.147.212.81", port=7709) -uvicorn.run(app, host="0.0.0.0", port=8000) -``` - -## CLI 命令汇总 - -| 命令 | 说明 | -|------|------| -| `ping` | 服务器延迟测速 | -| `version` | 版本号 | -| `kline` | K 线(日/周/月/分钟,支持复权) | -| `quote` | 实时报价(单只/批量) | -| `quote-list` | 市场分类排序报价(A/SH/SZ/KCB/CYB) | -| `tick` | 分时图(单日/多日/历史) | -| `transaction` | 逐笔成交 | -| `board-list` | 板块列表(行业/概念/风格) | -| `board-members` | 板块成分股报价 | -| `board-summary` | 板块汇总(成交额、主力净流入、涨跌家数) | -| `board-ranking` | 板块涨跌幅排行榜(行业/概念排行) | -| `board-change-ranking` | 板块 N 日涨跌幅排行(支持指定截止日期) | -| `belong-board` | 个股所属板块 | -| `capital-flow` | 资金流向 | -| `auction` | 集合竞价 | -| `unusual` | 市场异动 | -| `market-stat` | 全市场涨跌统计 | -| `server-info` | 服务器交易时段 | -| `symbol-info` | 个股特征快照 | -| `indicator` | 技术指标计算(34 个:MACD/KDJ/RSI/BOLL/DMI/ATR...) | -| `indicator-list` | 列出可用技术指标 | -| `backtest` | 回测引擎(加载策略文件,输出绩效报告) | -| `portfolio` | 多标的组合回测(共享资金池,均等分配,汇总绩效) | -| `factor list` | 列出所有内置因子 | -| `factor analyze` | 因子分析(IC/分层/衰减) | -| `pfactor backtest` | 组合因子选股回测 | -| `run-all` | 批量运行所有策略并排名(绩效排名 + 综合评分 + 可选图表) | -| `optimize` | 参数网格寻优(单策略网格搜索,或 `--all` 一键寻优所有内置策略并排名) | -| `strategies` | 列出内置策略注册表(名称/中文标签/参数默认值/预设寻优网格) | -| `formula compute` | 通达信公式计算(命名布尔输出即买卖信号) | -| `formula screen` | 公式批量选股(信号在最后一根 = 1 的标的) | -| `formula backtest` | 公式回测(买/卖列自动挑选,输出绩效 + 评级 + 评分) | -| `warehouse sync` | 本地 K 线仓库增量同步(DuckDB,需 `easy-tdx[warehouse]`) | -| `warehouse query` | 仓库查询(默认忽略未收盘的临时 bar) | -| `warehouse stats` | 仓库统计(各标的行数/数据范围) | -| `warehouse check` | 仓库健康自检(缺口/除权跳变/新鲜度) | -| `ccpm` | 中金所成交持仓排名(官网每日发布,按日落盘缓存) | -| `announcement` | 公告检索(巨潮资讯网,独立数据源,支持下载 PDF) | -| `screen scan` | 策略选股扫描(纯离线,全市场信号扫描) | -| `screen rank` | 扫描结果回测排名(按夏普/回撤等指标排序) | -| `screen strength` | 强势股排名(5/20/60 日涨幅加权,steady/breakout/balanced 三预设) | -| `serve` | 启动 Web API 服务器(REST + WebSocket,需 `easy-tdx[web]`) | -| `f10` | 财报三表(新浪:利润表/资产负债表/现金流量表) | -| `finance-info` | 最新财务快照(通达信协议,30+ 项单期指标) | -| `company-info` | F10 公司信息(无板块名列目录 / 有板块名读正文) | -| `fund-flow` | 历史资金流向(CLI 暂未实现,Web API `/fund-flow/history` 可用) | -| `ex kline` | 扩展市场 K 线 | -| `ex quote` | 扩展市场报价 | -| `ex quote-list` | 扩展市场商品列表 | -| `ex tick` | 扩展市场分时 | -| `ex markets` | 列出可用扩展市场 | -| `offline home` | 检测通达信安装目录 | -| `offline daily` | A 股日线(本地 .day 文件) | -| `offline sync-daily` | 从服务端同步单只股票日线到本地 .day 文件 | -| `offline sync-all` | 一键同步沪深全市场日线(扫描本地 .day 文件) | -| `offline min` | 分钟线(本地 .5/.lc1/.lc5 文件) | -| `offline ex-files` | 列出扩展市场可用文件 | -| `offline ex-daily` | 扩展市场日线(期货/港股/外盘) | -| `offline gbbq` | 股本变迁数据 | -| `offline financial` | 历史财务数据 | -| `offline blocks` | 自定义板块数据 | - -## Python API - -### 连接管理 - -所有客户端支持 `from_best_host()` 自动选最低延迟服务器: - -```python -from easy_tdx import MacClient - -with MacClient.from_best_host() as c: - df = c.get_stock_kline(...) -``` - -| 客户端 | 端口 | 覆盖范围 | -|--------|------|----------| -| `MacClient` / `AsyncMacClient` | 7709 | A 股行情(MAC 协议,推荐) | -| `MacExClient` / `AsyncMacExClient` | 7727 | 港股/美股/期货(MAC 协议) | -| `UnifiedTdxClient` / `AsyncUnifiedTdxClient` | 自动 | A 股 + 扩展市场统一入口 | -| `TdxClient` / `AsyncTdxClient` | 7709 | A 股行情(标准协议) | - -### MAC 协议(推荐) - -#### 报价 - -```python -from easy_tdx import MacClient, Market, Category, SortType, SortOrder - -with MacClient.from_best_host() as c: - # 批量报价(最多 80 只/次) - df = c.get_stock_quotes([(Market.SH, "600519"), (Market.SZ, "000858")]) - - # 市场分类排序报价 - df = c.get_stock_quotes_list( - Category.A, count=20, - sort_type=SortType.CHANGE_PCT, - sort_order=SortOrder.DESC, - ) -``` - -返回列:`market, code, name` + 动态字段(`pre_close, open, high, low, close, vol, amount, turnover, vol_ratio` 等)。 - -#### K 线(支持复权) - -```python -from easy_tdx import MacClient, Market, Period, Adjust - -with MacClient.from_best_host() as c: - # 日K前复权 - df = c.get_stock_kline(Market.SH, "600519", Period.DAILY, count=10, adjust=Adjust.QFQ) - # 5分钟线 - df = c.get_stock_kline(Market.SZ, "000001", Period.MIN_5, count=100) -``` - -返回列:`datetime, open, close, high, low, vol, amount`。 - -#### 技术指标 - -自动获取 200+ 条历史数据预热 EMA,返回最后 `count` 条带指标的结果: - -```python -from easy_tdx import MacClient, Market, Period, Adjust -from easy_tdx.indicator import compute_indicators, list_indicators - -with MacClient.from_best_host() as c: - # 便捷方法:获取 K 线 + 计算指标一步完成(默认前复权) - df = c.get_stock_kline_with_indicators( - Market.SH, "600519", - indicators=["MACD", "KDJ", "RSI", "BOLL"], - count=30, - ) - # df 包含: datetime, open, close, high, low, vol, amount - # + MACD_DIF, MACD_DEA, MACD_HIST, KDJ_K, KDJ_D, KDJ_J, RSI, - # BOLL_UPPER, BOLL_MID, BOLL_LOWER - - # 自定义指标参数 - df = c.get_stock_kline_with_indicators( - Market.SH, "600519", - indicators=["MACD"], - params={"MACD": {"SHORT": 10, "LONG": 22}}, - ) - - # 独立使用:对已有 DataFrame 计算指标 - raw = c.get_stock_kline(Market.SH, "600519", Period.DAILY, count=200, adjust=Adjust.QFQ) - result = compute_indicators(raw, ["ATR", "CCI", "WR"], tail=30) - - # 查看所有可用指标 - for info in list_indicators(): - print(info["name"], info["description"], info["outputs"]) -``` - -支持 34 个技术指标: - -| 指标 | 输入 | 输出列 | -|------|------|--------| -| MACD | close | MACD_DIF, MACD_DEA, MACD_HIST | -| KDJ | close, high, low | KDJ_K, KDJ_D, KDJ_J | -| RSI | close | RSI | -| BOLL | close | BOLL_UPPER, BOLL_MID, BOLL_LOWER | -| DMI | close, high, low | DMI_PDI, DMI_MDI, DMI_ADX, DMI_ADXR | -| ATR | close, high, low | ATR | -| WR | close, high, low | WR1, WR2 | -| CCI | close, high, low | CCI | -| BIAS | close | BIAS1, BIAS2, BIAS3 | -| OBV | close, vol | OBV | -| VR | close, vol | VR | -| EMV | high, low, vol | EMV, EMV_MA | -| MFI | close, high, low, vol | MFI | -| BRAR | open, close, high, low | AR, BR | -| ASI | open, close, high, low | ASI, ASI_MA | -| TRIX | close | TRIX, TRIX_MA | -| DPO | close | DPO, DPO_MA | -| MTM | close | MTM, MTM_MA | -| ROC | close | ROC, ROC_MA | -| EXPMA | close | EXPMA_12, EXPMA_50 | -| BBI | close | BBI | -| PSY | close | PSY, PSY_MA | -| DFMA | close | DFMA_DIF, DFMA_DMA | -| CR | close, high, low | CR | -| KTN | close, high, low | KTN_UPPER, KTN_MID, KTN_LOWER | -| XSII | close, high, low | XSII_TD1, XSII_TD2, XSII_TD3, XSII_TD4 | -| MASS | high, low | MASS, MASS_MA | -| TAQ | high, low | TAQ_UP, TAQ_MID, TAQ_DOWN | -| ZHUOYAO | close | ZY_LONG, ZY_MID, ZY_SHORT, ZY_TREND | -| BIAS_SIGNAL | close | BS_X, BS_SMA, BS_LMA | -| SAR | high, low | SAR(抛物线转向/动态止损位) | -| VWAP | close, high, low, vol | VWAP(N日滚动成交量加权均价) | -| AROON | high, low | AROON_UP, AROON_DOWN, AROON_OSC | -| FK | close | FK(EMA(2) 突破斜率外推 EMA(42)) | - -#### 分时 - -```python -with MacClient.from_best_host() as c: - df = c.get_tick_chart(Market.SH, "600519") # 单日分时 - df = c.get_tick_charts(Market.SH, "600519", days=3) # 多日分时(最多5天) - df = c.get_chart_sampling(Market.SH, "600519") # 240点缩略采样 -``` - -#### 逐笔成交 - -```python -with MacClient.from_best_host() as c: - df = c.get_transactions(Market.SH, "600519", count=100) - df = c.get_transactions(Market.SH, "600519", count=100, date=20250115) -``` - -#### 板块 - -```python -from easy_tdx import BoardSortColumn, BoardType - -with MacClient.from_best_host() as c: - df = c.get_board_list(BoardType.GN) # 概念板块 - df = c.get_board_list(sort_column=BoardSortColumn.SPEED) # 按涨速排序取涨速% - df = c.get_board_members("881001", sort_type=SortType.CHANGE_PCT) - df = c.get_belong_board(Market.SZ, "000001") # 个股所属板块 - - # 板块汇总:成交额、主力净流入、涨跌家数 - summary = c.get_board_summary("881001") - # summary = { - # "member_count": 82, - # "amount": 5823456000.0, # 板块总成交额(元) - # "vol": 412356789, # 板块总成交量(股) - # "main_net_amount": -123456.0, # 当日主力净流入 - # "main_net_3d": -567890.0, # 近3日主力净流入 - # "main_net_5d": -234567.0, # 近5日主力净流入 - # "up_count": 45, - # "down_count": 37, - # "members": DataFrame(...), # 成分股明细 - # } - - # 板块涨跌幅排行榜 - df = c.get_board_ranking(BoardType.HY, top_n=10, sort_by="change_pct") - df = c.get_board_ranking(BoardType.GN, top_n=20, sort_by="main_net_amount") - # 返回列:code, name, change_pct, amount, vol, main_net_amount, up_count, down_count, member_count - - # 板块 N 日涨跌幅排行(支持指定截止日期,默认全部) - df = c.get_board_change_ranking(BoardType.HY, days=20) - df = c.get_board_change_ranking(BoardType.GN, target_date=20250530, days=10, top_n=15) - # 返回列:code, name, close_end, close_start, change_pct -``` - -#### 资金流向 - -```python -with MacClient.from_best_host() as c: - df = c.get_capital_flow(Market.SH, "600519") -``` - -返回列:`date, main_in, main_out, main_net, small_in/out/net, mid_in/out/net, large_in/out/net`。 - -#### 监控 - -```python -with MacClient.from_best_host() as c: - df = c.get_auction(Market.SH, "600519") # 集合竞价 - df = c.get_unusual(Market.SH) # 市场异动 - df = c.get_symbol_info(Market.SZ, "000001") # 个股特征快照 - df = c.get_server_info() # 服务器交易时段 -``` - -`get_unusual` 返回列含 `unusual_type`(类型码)与 `desc`(中文描述),共 19 种类型 -(主力买卖/加速拉升/急速拉升/盘中强弱/竞价异动/涨跌停/大单盘口等)。类型码→名称 -可用顶层常量映射: - -```python -from easy_tdx import UNUSUAL_TYPE_NAMES - -df["type_name"] = df["unusual_type"].map(UNUSUAL_TYPE_NAMES) -``` - -### 扩展市场 - -```python -from datetime import date - -from easy_tdx import MacExClient, ExMarket, Period - -with MacExClient.from_best_host() as c: - count = c.goods_count(ExMarket.HK_MAIN_BOARD) - df = c.goods_list(ExMarket.HK_MAIN_BOARD, start=0, count=50) - df = c.goods_kline(ExMarket.US_STOCK, "AAPL", Period.DAILY, count=10) - df = c.goods_quotes([(ExMarket.HK_MAIN_BOARD, "00700")]) - df = c.goods_tick_chart(ExMarket.HK_MAIN_BOARD, "00700") - df = c.goods_transaction(ExMarket.HK_MAIN_BOARD, "00700", count=100) - df = c.goods_transaction_all(ExMarket.HK_MAIN_BOARD, "00700", date(2026, 7, 3)) # 港股当日全部逐笔 -``` - -> **逐笔成交排序**:通达信协议为**倒序**——`start=0` 指向最新一笔(收盘方向),`count=2000` 默认只取最近 2000 笔。港股单日成交常达数万笔(如 02715 约 1.3 万笔/日),若需当日全部成交,用 `goods_transaction_all`(仅港股股票类市场,自动按 1800/页翻页取全天,安全上限 9 万条;返回协议原生倒序,需正序展示自行 `df.iloc[::-1]`)。 - -### 统一客户端 - -```python -from easy_tdx import UnifiedTdxClient, ExMarket, Market, Period - -with UnifiedTdxClient() as client: - # A 股 -- 自动路由到 MacClient - df = client.get_stock_kline(Market.SH, "600519", Period.DAILY, count=5) - df = client.get_stock_quotes([(Market.SH, "600519")]) - df = client.get_board_list() - - # 扩展市场 -- 自动路由到 MacExClient - df = client.goods_kline(ExMarket.HK_MAIN_BOARD, "00700", Period.DAILY, count=5) -``` - -### 标准协议 - -```python -from easy_tdx import TdxClient, Market, KlineCategory - -with TdxClient.from_best_host() as c: - count = c.get_security_count(Market.SH) - stocks = c.get_security_list(Market.SH, start=0) - quotes = c.get_security_quotes([(Market.SH, "600000"), (Market.SZ, "000001")]) - bars = c.get_security_bars(Market.SZ, "002176", KlineCategory.DAY, 0, 100) - minute = c.get_minute_time_data(Market.SH, "600000") - trades = c.get_transaction_data(Market.SH, "600000", 0, 20) - flow = c.get_fund_flow(Market.SH, "600519") - blocks = c.get_block_info("block_gn.dat") - xdxr = c.get_xdxr_info(Market.SH, "600519") - stat = c.get_market_stat() -``` - -> **资金流口径注意**(Issue #55):`get_fund_flow` / `get_history_fund_flow` 按 0x0fb5 逐笔接口的"单笔成交额"分档,而该接口返回的记录是交易所真实逐笔**聚合**后的(实测 000001.SZ 单日约 17:1),分档看的也不是挂单额。结果:高价股小单档可不足成交额 1%、主力档常占 95%+,`main_net_inflow` 实质更接近"当日主动买卖总失衡"。东财/同花顺的"主力净流入"基于 L2 逐笔委托、按挂单额分档——两套口径**不可比**(实证同规则选股信号重合度仅约 14%),勿混用于同一张表或同一个因子。 - -`AsyncTdxClient` 提供对应的 `async def` 方法,接口一一对应。 - -### SecurityQuote 字段说明 - -`get_security_quotes()` 返回的 DataFrame 包含以下特殊字段: - -| 字段 | 类型 | 说明 | -|------|------|------| -| `trading_status` | int | 交易状态标志。`0x8020`(32800) = 停牌,其余值表示正常交易或集合竞价 | -| `open_amount` | float | 集合竞价成交金额(元)。仅个股有效,指数该字段无意义 | -| `server_time` | str | 服务器时间,格式 `HH:MM:SS.mmm` | -| `unknown_2` | int | 指数: 集合竞价成交金额/100;个股: 舍入残差≈0 | -| `unknown_3` | int | 个股: 集合竞价成交金额/100;指数: 负值/无意义 | -| `unknown_5-8` | int | 保留字段,恒为 0 | - -检测停牌: - -```python -df = c.get_security_quotes([(Market.SH, "600000")]) -is_suspended = df.iloc[0]["trading_status"] == 0x8020 -``` - -### 离线数据读取 - -无需网络,从本地通达信安装目录直接读取: - -```python -from easy_tdx.offline import detect_tdx_home, read_daily_bars, find_daily_bar_file -from easy_tdx import Market - -home = detect_tdx_home() -filepath = find_daily_bar_file(Market.SH, "600000") -bars = read_daily_bars(filepath) -``` - -支持:日线、分钟线、扩展市场日线、板块、股本变迁、历史财务数据。 - -### 离线数据写入同步 - -从服务端获取最新数据并追加写入本地通达信数据文件: - -```python -from easy_tdx.offline import ( - encode_daily_bar, append_daily_bars, get_last_bar_date, - encode_5min_bar, append_5min_bars, - encode_lc_min_bar, append_lc_min_bars, -) -from easy_tdx import Market -from easy_tdx.client import TdxClient - -# 追加日线到 .day 文件(自动跳过重复日期) -from easy_tdx.offline import sync_daily_bars_from_security_bars - -# 手动编码单条记录 -bar_bytes = encode_daily_bar(bar, price_coeff=0.01, vol_coeff=0.01) - -# 获取文件末尾日期 -last_date = get_last_bar_date("C:/new_jyplug/vipdoc/sh/lday/sh600000.day") -``` - -v1.5.0 起可通过 CLI 直接使用: - -```bash -easy-tdx offline daily SH 600000 --count 10 --table -easy-tdx offline ex-files --table -easy-tdx offline ex-daily 29#A1801 --table -``` - -### 缠论分析 - -基于缠论理论的技术分析模块,接收 easy_tdx 的 K 线 DataFrame,输出笔、中枢、线段、买卖点、背驰等分析结果: - -```python -from easy_tdx.chanlun import ChanlunAnalyser, ChanlunConfig - -# 使用 easy_tdx 获取 K 线数据 -with TdxClient() as client: - df = client.get_security_bars(Market.SH, "600519", KlineCategory.DAY, 0, 800) - -# 缠论分析 -analyser = ChanlunAnalyser("SH600519", "DAILY") -result = analyser.process_klines(df) - -# 获取结果 -print(f"笔数: {len(result.bis)}") -print(f"中枢数: {len(result.zss)}") -print(f"线段数: {len(result.xds)}") -print(f"买卖点: {[m.msg for m in result.mmds]}") -print(f"背驰: {[b.msg for b in result.bcs]}") - -# JSON 兼容字典输出 -print(result.to_dict()) -``` - -### 公告检索(巨潮资讯网) - -独立数据源(巨潮资讯网 cninfo),无需连接 TDX 行情服务器即可检索公司公告。 -标准库 urllib 实现,零额外依赖。 - -```python -from easy_tdx.cninfo import CninfoClient - -client = CninfoClient() - -# 检索公告(默认 30 条,最新在前) -df = client.get_announcements("688017") -# → DataFrame[title, type, date, url, code, org_id, announcement_id, announcement_time, pdf_url] - -# 翻页 + 自定义数量 -df = client.get_announcements("601088", count=10, page=2) - -# 返回示例(url 含 4 参数可直点打开,pdf_url 为 PDF 直链): -# title type date url pdf_url -# 0 关于召开2025年年度股东大会... 股东大会 2025-06-14 .../detail?stockCode=688017&announcementId=... http://static.cninfo.com.cn/.../xxx.PDF -# 1 2024年年度报告 PDF 2025-03-28 .../detail?stockCode=688017&announcementId=... http://static.cninfo.com.cn/.../yyy.PDF -``` - -> - ``type`` 优先取 cninfo 的 ``announcementTypeName``;该字段对很多公告为 null -> (数据源限制),此时回退到 ``adjunctType``(如 "PDF"),再为空给空字符串。 -> - ``url`` 必须含 4 参数(``stockCode``/``announcementId``/``orgId``/``announcementTime``) -> 才能打开,少参数会 404。 -> - orgId 解析沿用 #19 修复:动态拉取官方映射表,查不到回退硬编码规则, -> 保证 601xxx 等非标 orgId 段也能正常查询。 - -#### 下载公告 PDF - -```python -# 下载最新一条公告的 PDF 到当前目录 -df = client.get_announcements("601088", count=5) -path = client.download_pdf(df.iloc[0]) # 接受 Announcement 或 DataFrame 的一行 -print(path) # /abs/path/20260605_1225351400.PDF - -# 批量下载 -for _, row in df.iterrows(): - try: - path = client.download_pdf(row, dest_dir="./pdfs") - except Exception as e: - print(f"跳过(无附件或失败): {e}") -``` - -### 财报三表(新浪财经) - -独立数据源(新浪财经),无需连接 TDX 行情服务器即可获取利润表/资产负债表/现金流量表。 -标准库 urllib 实现,零额外依赖。 - -```python -from easy_tdx.sina import SinaClient - -client = SinaClient() - -# 利润表(默认 8 期,最新在前) -df = client.get_financial_report("600519", report_type="lrb") -# → DataFrame,每行一期,列 = [报告期, 营业总收入, 营业总收入_同比, ...] - -# 资产负债表 / 现金流量表(report_type 也接受中文别名:利润表/资产负债表/现金流量表) -df = client.get_financial_report("600519", report_type="fzb", num=4) -df = client.get_financial_report("600519", report_type="llb", num=4) - -# 返回示例(item_value 已转 float,可直接数值计算): -# 报告期 营业总收入 营业总收入_同比 营业收入 营业收入_同比 -# 0 2026-03-31 54702912385.23 0.06336 53909252220.51 0.06538 -# 1 2025-12-31 174000000000.00 0.10000 NaN NaN -``` - -> - ``item_value`` 是字符串(新浪原始格式),本实现转 float;空/非数值转 None -> - 有同比的科目附加 ``{科目}_同比`` 列(float 比例,如 0.06336 = +6.3%) -> - 大类标题行(如 ``流动资产``,原 ``item_value=""``)保留为 None,反映报表结构 - -### 实时行情轮询(RealtimeDataFeed) - -> ⚠️ 通达信协议**没有服务端推送**,只有请求/响应。本模块的「实时」是 **轮询五档快照近似** -> (默认约 3 秒延迟),适合盘中信号提醒、轻量监控;**不适合高频 / 逐笔撮合**。 - -`EventBus` 自身是纯发布/订阅管道,不会产生数据。要让 `RealtimeStrategy` 跑起来, -需要配合 `RealtimeDataFeed`:它自动完成 `get_stock_quotes → MarketEvent → bus.publish`。 - -```python -import asyncio -from easy_tdx.mac.client import AsyncMacClient -from easy_tdx.realtime import ( - EventBus, - RealtimeStrategy, - MarketEvent, - RealtimeDataFeed, -) - - -class MyStrategy(RealtimeStrategy): - def on_tick(self, event: MarketEvent) -> None: - print(f"{event.market}{event.code} price={event.price} vol={event.volume}") - - -async def main(): - bus = EventBus() - strategy = MyStrategy() - bus.subscribe("SZ000001", strategy.on_tick) # 注意:key 必须带市场前缀 - - feed = RealtimeDataFeed( - bus=bus, - symbols=[(0, "000001"), (1, "600519")], # [(Market.SZ, code), ...],单批 ≤80 只 - interval=3.0, # 轮询间隔(秒),下限 0.1 - dedup=True, # (price, volume) 未变的标的跳过发布 - # sessions=(), # 传空 tuple 表示全天轮询;默认仅 9:15-11:30 / 13:00-15:00 - ) - async with AsyncMacClient.from_best_host() as client: - await feed.run_async(client) # Ctrl+C 或 feed.stop() 退出 - - -asyncio.run(main()) -``` - -同步客户端(`MacClient`)用 `run_sync`,feed 会把阻塞调用丢到线程池,不卡事件循环: - -```python -from easy_tdx.mac.client import MacClient - -with MacClient.from_best_host() as client: - feed.run_sync(client) -``` +## Web UI 零代码使用 -> **关键坑(issue #34)**: -> - 订阅 key 必须与 `publish` 内部拼的 `f"{market}{code}"` 一致,即 `"SZ000001"` -> 而不是 `"000001"`;否则事件分发匹配不到。 -> - 传给 `subscribe` 的必须是**实例的绑定方法** `strategy.on_tick`, -> 不是未绑定的类方法 `MyStrategy.on_tick`。 -> - 整个流程跑在 `asyncio.run()` 里,否则协程不会被调度。 +`easy-tdx serve` 一条命令启动行情终端 + 回测工作台,浏览器自动打开 `http://localhost:8000`;不想装 Python 可下载 Windows 单文件 EXE 双击使用。页面操作手册见 [docs/web-ui.md](./docs/web-ui.md)。 -## 枚举参考 +## 文档导航 -### Period(K 线周期) +**快速入口**:[GitHub Wiki](https://github.com/handsomejustin/easy_tdx/wiki) · [回测系统完全上手手册](./docs/回测系统完全上手手册.html)(零基础图文,13 章)· [交互式架构图](./docs/architecture.html) -| 值 | 名称 | 说明 | +| 域 | 文档 | 说明 | |----|------|------| -| 7 | `MIN_1` | 1 分钟 | -| 0 | `MIN_5` | 5 分钟 | -| 1 | `MIN_15` | 15 分钟 | -| 2 | `MIN_30` | 30 分钟 | -| 3 | `MIN_60` | 60 分钟 | -| 4 | `DAILY` | 日线 | -| 5 | `WEEKLY` | 周线 | -| 6 | `MONTHLY` | 月线 | -| 10 | `QUARTERLY` | 季线 | -| 11 | `YEARLY` | 年线 | +| CLI | [cli.md](./docs/cli.md) | 全部命令速查表 + 按域导航 | +| CLI | [cli-market.md](./docs/cli-market.md) | 报价 / K线 / 分时 / 板块 / 资金 / 中金所 / 扩展市场 | +| CLI | [cli-finance.md](./docs/cli-finance.md) | 巨潮公告检索 / 财报三表 / 通达信 F10 | +| CLI | [cli-indicators.md](./docs/cli-indicators.md) | 34 个技术指标 / 通达信公式 / 捉妖 / 乖离率 | +| CLI | [cli-backtest.md](./docs/cli-backtest.md) | backtest / optimize / portfolio / run-all | +| CLI | [cli-screen.md](./docs/cli-screen.md) | 全市场选股扫描 / 强势股排名 | +| 教程 | [chanlun.md](./docs/chanlun.md) | 缠论分析(CLI + Python) | +| 教程 | [data-local.md](./docs/data-local.md) | 本地数据:DuckDB 仓库 / vipdoc 离线读写 | +| Web | [web-api.md](./docs/web-api.md) | REST + WebSocket + SSE 端点与示例 | +| Web | [web-ui.md](./docs/web-ui.md) | 行情终端与回测工作台操作手册 | +| Web | [packaging.md](./docs/packaging.md) | Windows EXE 打包与分发 | +| Python | [python-api.md](./docs/python-api.md) | 教程:连接 / 行情 / 指标 / 缠论 / 公告 / 财报 / 实时轮询 | +| Python | [api_reference.md](./docs/api_reference.md) | 参考:客户端方法速查 | +| Python | [field_mapping.md](./docs/field_mapping.md) | 参考:数据模型与枚举字段对照 | +| 回测 | [backtest_usage.md](./docs/backtest_usage.md) | 引擎使用手册(策略 / 配置 / 结果) | +| 回测 | [backtest-examples.md](./docs/backtest-examples.md) | 完整示例集 + 注意事项 | +| 量化 | [quantitative-guide.md](./docs/quantitative-guide.md) | 因子引擎与组合管理 | +| 量化 | [quantitative-advanced.md](./docs/quantitative-advanced.md) | 滑点 / 执行仿真 / 归因 / 完整工作流 | +| 指标 | [indicator-zhuoyao.md](./docs/indicator-zhuoyao.md) | 捉妖大师信号详解 | +| 指标 | [indicator-bias-signal.md](./docs/indicator-bias-signal.md) | 30 日乖离率信号详解 | +| 开发者 | [architecture.md](./docs/architecture.md) | 七层架构 / 源码树 / 分层要点 | +| 开发者 | [development.md](./docs/development.md) | 环境 / 测试 / CI / 发布流程 / 文档规范 | +| 协议 | [protocol-reverse-engineering.md](./docs/protocol-reverse-engineering.md) | 通达信协议逆向过程 | +| 协议 | [protocol-unknown-fields.md](./docs/protocol-unknown-fields.md) | 未知字段研究日志(活文档) | -### Adjust(复权类型) - -| 值 | 名称 | 说明 | -|----|------|------| -| 0 | `NONE` | 不复权 | -| 1 | `QFQ` | 前复权 | -| 2 | `HFQ` | 后复权 | - -### Category(市场分类) - -| 值 | 名称 | 说明 | -|----|------|------| -| 0 | `SH` | 上证 A 股 | -| 2 | `SZ` | 深证 A 股 | -| 6 | `A` | 全部 A 股 | -| 7 | `B` | B 股 | -| 8 | `KCB` | 科创板 | -| 12 | `BJ` | 北证 A 股 | -| 14 | `CYB` | 创业板 | - -### BoardType(板块类型) - -| 值 | 名称 | 说明 | -|----|------|------| -| 0 | `HY` | 行业一级 | -| 1 | `HY2` | 行业二级 | -| 3 | `GN` | 概念 | -| 4 | `FG` | 风格 | -| 5 | `DQ` | 地区 | -| 255 | `ALL` | 全部 | - -### SortType(排序字段) - -| 名称 | 说明 | -|------|------| -| `CODE` | 代码 | -| `PRICE` | 现价 | -| `CHANGE_PCT` | 涨幅% | -| `VOLUME` | 成交量 | -| `TOTAL_AMOUNT` | 成交额 | -| `TURNOVER_RATE` | 换手% | -| `MAIN_NET_AMOUNT` | 主力净额 | - -### ExMarket(扩展市场) - -| 值 | 名称 | 说明 | -|----|------|------| -| 28 | `ZZ_FUTURES` | 郑州商品 | -| 29 | `DL_FUTURES` | 大连商品 | -| 30 | `SH_FUTURES` | 上海期货 | -| 31 | `HK_MAIN_BOARD` | 香港主板 | -| 47 | `CFFEX_FUTURES` | 中金所期货 | -| 48 | `HK_GEM` | 香港创业板 | -| 74 | `US_STOCK` | 美国股票 | - -### Market(市场) - -| 值 | 名称 | 说明 | -|----|------|------| -| 0 | `SZ` | 深圳 | -| 1 | `SH` | 上海 | -| 2 | `BJ` | 北京 | - -## 完整 API 列表 - -### MacClient / AsyncMacClient - -| 方法 | 说明 | -|------|------| -| `get_stock_quotes(stocks, fields)` | 批量实时报价 | -| `get_stock_quotes_list(category, ...)` | 市场分类排序报价 | -| `get_stock_kline(market, code, period, ...)` | K 线(支持复权) | -| `get_stock_kline_with_indicators(market, code, indicators, ...)` | K 线 + 技术指标 | -| `get_tick_chart(market, code, date)` | 单日分时图 | -| `get_tick_charts(market, code, days)` | 多日分时图 | -| `get_chart_sampling(market, code)` | 分时缩略采样 | -| `get_transactions(market, code, ...)` | 逐笔成交 | -| `get_symbol_info(market, code)` | 个股特征快照 | -| `get_board_list(board_type, ..., sort_column)` | 板块列表(sort_value 列=排序键指标值) | -| `get_board_members(board_symbol, ...)` | 板块成分股报价 | -| `get_board_summary(board_symbol, ...)` | 板块汇总(成交额、主力净流入、涨跌家数) | -| `get_board_ranking(board_type, top_n, sort_by, ...)` | 板块涨跌幅排行榜(行业/概念排行) | -| `get_board_change_ranking(board_type, target_date, days, ...)` | 板块 N 日涨跌幅排行 | -| `get_belong_board(market, code)` | 个股所属板块 | -| `get_capital_flow(market, code)` | 资金流向 | -| `get_auction(market, code)` | 集合竞价 | -| `get_unusual(market, ...)` | 市场异动 | -| `get_server_info()` | 服务器交易时段 | -| `get_kline_offset(offset, count)` | K 线偏移信息 | -| `get_goods_list(market, ...)` | 扩展市场商品列表 | - -### MacExClient / AsyncMacExClient - -| 方法 | 说明 | -|------|------| -| `goods_count(market)` | 商品总数 | -| `goods_list(market, start, count)` | 商品列表 | -| `goods_quotes(stocks, fields)` | 批量报价 | -| `goods_quotes_list(market, ...)` | 市场分类报价列表 | -| `goods_kline(market, code, period, ...)` | K 线(支持复权) | -| `goods_tick_chart(market, code, ...)` | 分时图 | -| `goods_chart_sampling(market, code)` | 分时缩略采样 | -| `goods_transaction(market, code, ...)` | 逐笔成交 | - -### TdxClient / AsyncTdxClient - -| 方法 | 说明 | -|------|------| -| `get_security_count(market)` | 市场证券总数 | -| `get_security_list(market, start)` | 证券列表(分页) | -| `get_security_list_all()` | 沪深 A 股完整列表(含行业) | -| `get_security_quotes(stocks)` | 批量五档行情 | -| `get_security_bars(market, code, ...)` | 个股 K 线 | -| `get_index_bars(market, code, ...)` | 指数 K 线 | -| `get_minute_time_data(market, code)` | 今日分时 | -| `get_history_minute_time_data(market, code, date)` | 历史分时 | -| `get_transaction_data(market, code, ...)` | 当日逐笔成交 | -| `get_history_transaction_data(...)` | 历史逐笔成交 | -| `get_fund_flow(market, code)` | 当日资金流向(口径注意见上文) | -| `get_history_fund_flow(market, code, ...)` | 历史资金流向(口径注意见上文) | -| `get_xdxr_info(market, code)` | 除权除息历史 | -| `get_finance_info(market, code)` | 最新财务数据 | -| `get_company_info_category(market, code)` | 公司信息目录 | -| `get_company_info_content(...)` | 公司信息文本 | -| `get_block_info(filename)` | 板块信息 | -| `get_report_file(filename)` | 下载服务器文件 | -| `get_market_stat()` | 全市场涨跌统计 | -| `get_price_limits(market, code, name, pre_close)` | 涨跌停价 | - -## 架构 - -``` -src/easy_tdx/ -├── client.py # TdxClient / AsyncTdxClient(标准协议) -├── unified.py # UnifiedTdxClient(统一入口) -├── config.py # 服务器地址、端口、超时配置 -├── indicator.py # 技术指标计算(34 个,基于 MyTT) -├── MyTT.py # 麦语言技术指标算法库 -├── mac/ -│ ├── client.py # MacClient / AsyncMacClient(MAC 协议) -│ ├── enums.py # Period, Adjust, Category, ExMarket, SortType, ... -│ ├── models.py # MacBar, MacQuoteField, MacTick, BoardInfo, ... -│ └── commands/ # MAC 命令(build_request + parse_response,无 IO) -├── ex/ -│ ├── client.py # ExTdxClient / AsyncExTdxClient(标准协议扩展市场) -│ ├── mac_client.py # MacExClient / AsyncMacExClient(MAC 协议扩展市场) -│ └── transport/ # ExTdxConnection(端口 7727) -├── transport/ -│ ├── sync.py # TdxConnection + ping_host / ping_all -│ └── async_.py # AsyncTdxConnection(asyncio) -├── commands/ # 标准协议命令(无 IO) -├── codec/ # price / volume / datetime / frame / bitmap 编解码 -├── chanlun/ # 缠论技术分析(K线合并/分型/笔/线段/中枢/买卖点/背驰) -├── factor/ # 因子引擎(Factor ABC/19内置因子/截面计算/因子分析/预处理管道) -├── portfolio/ # 组合管理(4优化器/风险模型/再平衡引擎) -├── backtest/ # 回测引擎(Strategy基类/向量化引擎/多因子组合/滑点模型/执行仿真/归因分析) -├── screen/ # 策略选股扫描(scan信号扫描/rank回测排名/并发扫描/增量缓存) -├── realtime/ # 实时数据推送框架(EventBus/事件驱动/asyncio) -├── web/ # Web API(FastAPI REST + WebSocket) -├── models/ # 纯 dataclass,无业务逻辑 -├── offline/ # 离线数据读写模块(读取 + 写入同步) -└── cli/ # easy-tdx CLI(click) -``` - -commands 层不依赖 transport,可独立单测。 - -## 开发 - -```bash -python -m pytest tests/unit/ -v # 单元测试(无需网络) -XMTDX_LIVE=1 python -m pytest tests/integration/ -v # 集成测试 -mypy src/ # 类型检查 -ruff check src/ tests/ # lint -ruff format --check src/ tests/ # format check -``` +> 📦 历史归档(均已实施/规划完成,供追溯):board-overview-design、hotspot-rolling-design、market-insights-roadmap、upgrade-plan-2026H2(见 docs/ 目录)与 docs/superpowers/(计划存档)。 +> +> 完整文档索引(分类目录 + 归档标注)见 [docs/index.md](./docs/index.md)。 ## 致谢 diff --git a/examples/06_finance/README.md b/examples/06_finance/README.md index 00baf9f..81aa112 100644 --- a/examples/06_finance/README.md +++ b/examples/06_finance/README.md @@ -1,6 +1,6 @@ # 06. 财务数据与 F10 公司信息 -通达信原生协议(TdxClient)提供两类财务/公司数据,独立于 [新浪三表 `f10`](../../README.md#财务): +通达信原生协议(TdxClient)提供两类财务/公司数据,独立于 [新浪三表 `f10`](../../docs/cli-finance.md#财务): | 命令 / 接口 | 数据 | 说明 | |-------------|------|------|