[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-82303":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":15,"forks30d":15,"starsTrendScore":19,"compositeScore":20,"rankGlobal":10,"rankLanguage":10,"license":21,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":24,"hasPages":22,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":33,"readmeContent":34,"aiSummary":35,"trendingCount":15,"starSnapshotCount":15,"syncStatus":36,"lastSyncTime":37,"discoverSource":38},82303,"easy_tdx","handsomejustin\u002Feasy_tdx","handsomejustin","通达信python SDK，支持在线获取数据及离线本地数据读取。全面优化接口。","",null,"Python",154,42,3,0,9,98,119,102,92.87,"Other",false,"main",true,[26,27,28,29,30,31,32],"a-share-tdx","chinese-stock-market","financial-data","mootdx","pytdx","tdx","technical-analysis","2026-06-12 04:01:37","# easy-tdx\n\n[![License: MIT](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-yellow.svg)](LICENSE)\n[![PyPI](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fv\u002Feasy-tdx.svg)](https:\u002F\u002Fpypi.org\u002Fproject\u002Feasy-tdx\u002F)\n\n通达信 TCP 行情协议客户端。支持 A 股、港股、美股、期货全市场；内置 `easy-tdx` CLI 工具，默认 JSON 输出，天然适配 Claude Code、OpenClaw、Hermes 等 AI Agent 工具链。提供同步 + asyncio 双接口；strict mypy 通过；每一层编解码都有离线 fixture 测试覆盖。\n\n## 安装\n\n```bash\npip install easy-tdx\n```\n\n安装后自动注册 `easy-tdx` CLI 命令：\n\n```bash\neasy-tdx --help\n```\n\n开发模式：\n\n```bash\npip install -e \".[dev]\"\n```\n\n## CLI 参考\n\n`easy-tdx` 默认输出 JSON（一行一条记录），`--table` 切换表格，`--output csv` 输出 CSV。\n\n### 基础\n\n```bash\neasy-tdx ping                    # 服务器测速\neasy-tdx version                 # 版本号\n```\n\n### 行情\n\n```bash\n# K 线\neasy-tdx kline SZ 000001 --count 30 --table\neasy-tdx kline SH 600519 --period 5MIN --adjust QFQ\n\n# 实时报价\neasy-tdx quote \"SZ 000001,SH 600519\" --table\n\n# 市场分类报价（按涨幅排序）\neasy-tdx quote-list A --count 20 --table\neasy-tdx quote-list KCB --sort TOTAL_AMOUNT --order ASC\neasy-tdx quote-list CYB --count 50\n```\n\n### 分时 \u002F 成交\n\n```bash\neasy-tdx tick SZ 000001 --table\neasy-tdx tick SH 600519 --days 5\neasy-tdx tick SZ 000001 --date 20250115\n\neasy-tdx transaction SZ 000001 --count 100 --table\neasy-tdx transaction SH 600519 --date 20250115\n```\n\n### 板块\n\n```bash\neasy-tdx board-list --type GN --table\neasy-tdx board-list --type HY --count 200\neasy-tdx board-members 881001 --table\neasy-tdx belong-board SZ 000001 --table\neasy-tdx board-summary 881001 --table          # 板块汇总（成交额\u002F主力净流入\u002F涨跌家数）\neasy-tdx board-summary 881001 --members --table # 含成分股明细\neasy-tdx board-ranking --type HY --top 10 --table   # 行业板块排行\neasy-tdx board-ranking --type GN --sort-by amount    # 概念板块按成交额排行\n```\n\n### 资金 \u002F 监控\n\n```bash\neasy-tdx capital-flow SH 600519 --table\neasy-tdx auction SZ 000001 --table\neasy-tdx unusual SH --count 100 --table\neasy-tdx market-stat --table\neasy-tdx server-info --table\neasy-tdx symbol-info SZ 000001 --table\n```\n\n### 技术指标\n\n```bash\neasy-tdx indicator-list --table                       # 列出所有可用指标\neasy-tdx indicator MACD -m SH -c 600519 --table       # MACD\neasy-tdx indicator KDJ -m SZ -c 000001 --table        # KDJ\neasy-tdx indicator RSI -m SH -c 600519 --table        # RSI\neasy-tdx indicator BOLL -m SH -c 600519 --table       # BOLL 布林带\neasy-tdx indicator DMI -m SH -c 600519 --table        # DMI 动向指标\neasy-tdx indicator ATR -m SH -c 600519 --table        # ATR 真实波幅\neasy-tdx indicator WR -m SH -c 600519 --table         # WR 威廉指标\neasy-tdx indicator CCI -m SH -c 600519 --table        # CCI 顺势指标\neasy-tdx indicator BIAS -m SZ -c 000001 --table       # BIAS 乖离率\neasy-tdx indicator BIAS_SIGNAL -m SH -c 600519 --table # 30日乖离率信号\neasy-tdx indicator OBV -m SZ -c 000001 --table        # OBV 能量潮\n\n# 多指标同时计算\neasy-tdx indicator MACD,KDJ,RSI,BOLL -m SH -c 600519 --count 10 --table\n\n# 自定义参数\neasy-tdx indicator MACD -m SH -c 600519 --params SHORT=10,LONG=22\n\n# 分钟线指标\neasy-tdx indicator MACD -m SH -c 600519 --period 5MIN --count 50\n\n# 仅输出指标值（不含 OHLCV）\neasy-tdx indicator RSI -m SZ -c 000001 --no-ohlcv\n```\n\n### 捉妖大师（重点）\n\n捉妖大师是多周期涨幅共振指标，通过 20\u002F60\u002F120 日涨幅及指数平滑判断短中长线趋势是否同向，用于筛选趋势刚启动的强势股。\n\n```bash\neasy-tdx indicator ZHUOYAO -m SH -c 600519 --count 30 --table\n\n# 自定义周期参数\neasy-tdx indicator ZHUOYAO -m SZ -c 000001 --params N1=90,N2=45,N3=15\n\n# 结合其他指标一起看\neasy-tdx indicator ZHUOYAO,MACD,KDJ -m SH -c 600519 --count 20 --table\n```\n\n输出列说明：\n\n| 列名 | 含义 |\n|------|------|\n| `ZY_LONG` | 长线 — 120 日涨幅的 10 日指数平滑 |\n| `ZY_MID` | 中线 — 60 日涨幅(%) |\n| `ZY_SHORT` | 短线 — 20 日涨幅(%) |\n| `ZY_TREND` | 趋势 — 中线的 10 日指数平滑 |\n\n**核心信号：** 四线全部 > 0 且短线 > 中线 > 长线 = 短中长趋势完全一致向上，是强势股特征。详见 [捉妖大师指标详解](docs\u002Findicator-zhuoyao.md)。\n\n### 30日乖离率信号（重点）\n\n30日乖离率信号指标，在标准乖离率（BIAS）基础上叠加短\u002F长信号线，通过三者位置关系判断趋势方向和转折点。源自通达信经典指标。\n\n```bash\neasy-tdx indicator BIAS_SIGNAL -m SH -c 600519 --count 60 --table\n\n# 自定义周期参数\neasy-tdx indicator BIAS_SIGNAL -m SZ -c 000001 --params P=5,M=20\n\n# 结合其他指标一起看\neasy-tdx indicator BIAS_SIGNAL,MACD,KDJ -m SH -c 600519 --count 30 --table\n```\n\n输出列说明：\n\n| 列名 | 含义 |\n|------|------|\n| `BS_X` | M日乖离率 — 当前价格偏离30日均线的百分比 |\n| `BS_SMA` | 短周期信号线 — 乖离率的 P 日均线，过滤短期噪音 |\n| `BS_LMA` | 长周期信号线 — 乖离率的 M 日均线，捕捉中期趋势方向 |\n\n**核心信号：** X > S_SMA 且 X_LMA 上升 = 多头确认（通达信红色）；S_SMA > X 或 X_LMA 下降 = 空头预警（通达信绿色）。多空判断非对称设计——多头需两个条件同时满足，空头只需其一，偏向保守预警。详见 [30日乖离率信号指标详解](docs\u002Findicator-bias-signal.md)。\n\n```python\n# Python API 用法\nfrom easy_tdx import MacClient, Market\n\nwith MacClient.from_best_host() as c:\n    df = c.get_stock_kline_with_indicators(\n        Market.SH, \"600519\",\n        indicators=[\"BIAS_SIGNAL\"],\n        count=60,\n    )\n    # df 包含: datetime, open, close, high, low, vol, amount\n    #         + BS_X, BS_SMA, BS_LMA\n```\n\n支持 32 个指标：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。\n\n```python\n# Python API 用法\nfrom easy_tdx import MacClient, Market\n\nwith MacClient.from_best_host() as c:\n    df = c.get_stock_kline_with_indicators(\n        Market.SH, \"600519\",\n        indicators=[\"ZHUOYAO\"],\n        count=30,\n    )\n    # df 包含: datetime, open, close, high, low, vol, amount\n    #         + ZY_LONG, ZY_MID, ZY_SHORT, ZY_TREND\n```\n\n支持 32 个指标：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。\n\n### 财务\n\n```bash\neasy-tdx f10 SH 600519              # F10 公司信息\neasy-tdx fund-flow SH 600519        # 历史资金流向\n```\n\n### 扩展市场（港股\u002F美股\u002F期货）\n\n```bash\neasy-tdx ex markets                                       # 列出可用市场\neasy-tdx ex kline HK_MAIN_BOARD 00700 --count 30 --table  # 港股 K 线\neasy-tdx ex kline US_STOCK AAPL --table                    # 美股 K 线\neasy-tdx ex quote US_STOCK TSLA --table                    # 美股报价\neasy-tdx ex quote-list HK_MAIN_BOARD --table               # 港股商品列表\neasy-tdx ex tick HK_MAIN_BOARD 00700 --table               # 港股分时\n```\n\n## CLI 命令汇总\n\n| 命令 | 说明 |\n|------|------|\n| `ping` | 服务器延迟测速 |\n| `version` | 版本号 |\n| `kline` | K 线（日\u002F周\u002F月\u002F分钟，支持复权） |\n| `quote` | 实时报价（单只\u002F批量） |\n| `quote-list` | 市场分类排序报价（A\u002FSH\u002FSZ\u002FKCB\u002FCYB） |\n| `tick` | 分时图（单日\u002F多日\u002F历史） |\n| `transaction` | 逐笔成交 |\n| `board-list` | 板块列表（行业\u002F概念\u002F风格） |\n| `board-members` | 板块成分股报价 |\n| `board-summary` | 板块汇总（成交额、主力净流入、涨跌家数） |\n| `board-ranking` | 板块涨跌幅排行榜（行业\u002F概念排行） |\n| `belong-board` | 个股所属板块 |\n| `capital-flow` | 资金流向 |\n| `auction` | 集合竞价 |\n| `unusual` | 市场异动 |\n| `market-stat` | 全市场涨跌统计 |\n| `server-info` | 服务器交易时段 |\n| `symbol-info` | 个股特征快照 |\n| `indicator` | 技术指标计算（32 个：MACD\u002FKDJ\u002FRSI\u002FBOLL\u002FDMI\u002FATR...） |\n| `indicator-list` | 列出可用技术指标 |\n| `f10` | F10 公司信息 |\n| `fund-flow` | 历史资金流向 |\n| `ex kline` | 扩展市场 K 线 |\n| `ex quote` | 扩展市场报价 |\n| `ex quote-list` | 扩展市场商品列表 |\n| `ex tick` | 扩展市场分时 |\n| `ex markets` | 列出可用扩展市场 |\n\n## Python API\n\n### 连接管理\n\n所有客户端支持 `from_best_host()` 自动选最低延迟服务器：\n\n```python\nfrom easy_tdx import MacClient\n\nwith MacClient.from_best_host() as c:\n    df = c.get_stock_kline(...)\n```\n\n| 客户端 | 端口 | 覆盖范围 |\n|--------|------|----------|\n| `MacClient` \u002F `AsyncMacClient` | 7709 | A 股行情（MAC 协议，推荐） |\n| `MacExClient` \u002F `AsyncMacExClient` | 7727 | 港股\u002F美股\u002F期货（MAC 协议） |\n| `UnifiedTdxClient` \u002F `AsyncUnifiedTdxClient` | 自动 | A 股 + 扩展市场统一入口 |\n| `TdxClient` \u002F `AsyncTdxClient` | 7709 | A 股行情（标准协议） |\n\n### MAC 协议（推荐）\n\n#### 报价\n\n```python\nfrom easy_tdx import MacClient, Market, Category, SortType, SortOrder\n\nwith MacClient.from_best_host() as c:\n    # 批量报价（最多 80 只\u002F次）\n    df = c.get_stock_quotes([(Market.SH, \"600519\"), (Market.SZ, \"000858\")])\n\n    # 市场分类排序报价\n    df = c.get_stock_quotes_list(\n        Category.A, count=20,\n        sort_type=SortType.CHANGE_PCT,\n        sort_order=SortOrder.DESC,\n    )\n```\n\n返回列：`market, code, name` + 动态字段（`pre_close, open, high, low, close, vol, amount, turnover, vol_ratio` 等）。\n\n#### K 线（支持复权）\n\n```python\nfrom easy_tdx import MacClient, Market, Period, Adjust\n\nwith MacClient.from_best_host() as c:\n    # 日K前复权\n    df = c.get_stock_kline(Market.SH, \"600519\", Period.DAILY, count=10, adjust=Adjust.QFQ)\n    # 5分钟线\n    df = c.get_stock_kline(Market.SZ, \"000001\", Period.MIN_5, count=100)\n```\n\n返回列：`datetime, open, close, high, low, vol, amount`。\n\n#### 技术指标\n\n自动获取 200+ 条历史数据预热 EMA，返回最后 `count` 条带指标的结果：\n\n```python\nfrom easy_tdx import MacClient, Market, Period, Adjust\nfrom easy_tdx.indicator import compute_indicators, list_indicators\n\nwith MacClient.from_best_host() as c:\n    # 便捷方法：获取 K 线 + 计算指标一步完成（默认前复权）\n    df = c.get_stock_kline_with_indicators(\n        Market.SH, \"600519\",\n        indicators=[\"MACD\", \"KDJ\", \"RSI\", \"BOLL\"],\n        count=30,\n    )\n    # df 包含: datetime, open, close, high, low, vol, amount\n    #         + MACD_DIF, MACD_DEA, MACD_HIST, KDJ_K, KDJ_D, KDJ_J, RSI,\n    #           BOLL_UPPER, BOLL_MID, BOLL_LOWER\n\n    # 自定义指标参数\n    df = c.get_stock_kline_with_indicators(\n        Market.SH, \"600519\",\n        indicators=[\"MACD\"],\n        params={\"MACD\": {\"SHORT\": 10, \"LONG\": 22}},\n    )\n\n    # 独立使用：对已有 DataFrame 计算指标\n    raw = c.get_stock_kline(Market.SH, \"600519\", Period.DAILY, count=200, adjust=Adjust.QFQ)\n    result = compute_indicators(raw, [\"ATR\", \"CCI\", \"WR\"], tail=30)\n\n    # 查看所有可用指标\n    for info in list_indicators():\n        print(info[\"name\"], info[\"description\"], info[\"outputs\"])\n```\n\n支持 31 个技术指标：\n\n| 指标 | 输入 | 输出列 |\n|------|------|--------|\n| MACD | close | MACD_DIF, MACD_DEA, MACD_HIST |\n| KDJ | close, high, low | KDJ_K, KDJ_D, KDJ_J |\n| RSI | close | RSI |\n| BOLL | close | BOLL_UPPER, BOLL_MID, BOLL_LOWER |\n| DMI | close, high, low | DMI_PDI, DMI_MDI, DMI_ADX, DMI_ADXR |\n| ATR | close, high, low | ATR |\n| WR | close, high, low | WR1, WR2 |\n| CCI | close, high, low | CCI |\n| BIAS | close | BIAS1, BIAS2, BIAS3 |\n| OBV | close, vol | OBV |\n| VR | close, vol | VR |\n| EMV | high, low, vol | EMV, EMV_MA |\n| MFI | close, high, low, vol | MFI |\n| BRAR | open, close, high, low | AR, BR |\n| ASI | open, close, high, low | ASI, ASI_MA |\n| TRIX | close | TRIX, TRIX_MA |\n| DPO | close | DPO, DPO_MA |\n| MTM | close | MTM, MTM_MA |\n| ROC | close | ROC, ROC_MA |\n| EXPMA | close | EXPMA_12, EXPMA_50 |\n| BBI | close | BBI |\n| PSY | close | PSY, PSY_MA |\n| DFMA | close | DFMA_DIF, DFMA_DMA |\n| CR | close, high, low | CR |\n| KTN | close, high, low | KTN_UPPER, KTN_MID, KTN_LOWER |\n| XSII | close, high, low | XSII_TD1, XSII_TD2, XSII_TD3, XSII_TD4 |\n| MASS | high, low | MASS, MASS_MA |\n| TAQ | high, low | TAQ_UP, TAQ_MID, TAQ_DOWN |\n| ZHUOYAO | close | ZY_LONG, ZY_MID, ZY_SHORT, ZY_TREND |\n| BIAS_SIGNAL | close | BS_X, BS_SMA, BS_LMA |\n\n#### 分时\n\n```python\nwith MacClient.from_best_host() as c:\n    df = c.get_tick_chart(Market.SH, \"600519\")          # 单日分时\n    df = c.get_tick_charts(Market.SH, \"600519\", days=3)  # 多日分时（最多5天）\n    df = c.get_chart_sampling(Market.SH, \"600519\")       # 240点缩略采样\n```\n\n#### 逐笔成交\n\n```python\nwith MacClient.from_best_host() as c:\n    df = c.get_transactions(Market.SH, \"600519\", count=100)\n    df = c.get_transactions(Market.SH, \"600519\", count=100, date=20250115)\n```\n\n#### 板块\n\n```python\nfrom easy_tdx import BoardType\n\nwith MacClient.from_best_host() as c:\n    df = c.get_board_list(BoardType.GN)                       # 概念板块\n    df = c.get_board_members(\"881001\", sort_type=SortType.CHANGE_PCT)\n    df = c.get_belong_board(Market.SZ, \"000001\")              # 个股所属板块\n\n    # 板块汇总：成交额、主力净流入、涨跌家数\n    summary = c.get_board_summary(\"881001\")\n    # summary = {\n    #     \"member_count\": 82,\n    #     \"amount\": 5823456000.0,        # 板块总成交额（元）\n    #     \"vol\": 412356789,              # 板块总成交量（股）\n    #     \"main_net_amount\": -123456.0,  # 当日主力净流入\n    #     \"main_net_3d\": -567890.0,      # 近3日主力净流入\n    #     \"main_net_5d\": -234567.0,      # 近5日主力净流入\n    #     \"up_count\": 45,\n    #     \"down_count\": 37,\n    #     \"members\": DataFrame(...),     # 成分股明细\n    # }\n\n    # 板块涨跌幅排行榜\n    df = c.get_board_ranking(BoardType.HY, top_n=10, sort_by=\"change_pct\")\n    df = c.get_board_ranking(BoardType.GN, top_n=20, sort_by=\"main_net_amount\")\n    # 返回列：code, name, change_pct, amount, vol, main_net_amount, up_count, down_count, member_count\n```\n\n#### 资金流向\n\n```python\nwith MacClient.from_best_host() as c:\n    df = c.get_capital_flow(Market.SH, \"600519\")\n```\n\n返回列：`date, main_in, main_out, main_net, small_in\u002Fout\u002Fnet, mid_in\u002Fout\u002Fnet, large_in\u002Fout\u002Fnet`。\n\n#### 监控\n\n```python\nwith MacClient.from_best_host() as c:\n    df = c.get_auction(Market.SH, \"600519\")     # 集合竞价\n    df = c.get_unusual(Market.SH)               # 市场异动\n    df = c.get_symbol_info(Market.SZ, \"000001\") # 个股特征快照\n    df = c.get_server_info()                     # 服务器交易时段\n```\n\n### 扩展市场\n\n```python\nfrom easy_tdx import MacExClient, ExMarket, Period\n\nwith MacExClient.from_best_host() as c:\n    count = c.goods_count(ExMarket.HK_MAIN_BOARD)\n    df = c.goods_list(ExMarket.HK_MAIN_BOARD, start=0, count=50)\n    df = c.goods_kline(ExMarket.US_STOCK, \"AAPL\", Period.DAILY, count=10)\n    df = c.goods_quotes([(ExMarket.HK_MAIN_BOARD, \"00700\")])\n    df = c.goods_tick_chart(ExMarket.HK_MAIN_BOARD, \"00700\")\n    df = c.goods_transaction(ExMarket.HK_MAIN_BOARD, \"00700\", count=100)\n```\n\n### 统一客户端\n\n```python\nfrom easy_tdx import UnifiedTdxClient, ExMarket, Market, Period\n\nwith UnifiedTdxClient() as client:\n    # A 股 -- 自动路由到 MacClient\n    df = client.get_stock_kline(Market.SH, \"600519\", Period.DAILY, count=5)\n    df = client.get_stock_quotes([(Market.SH, \"600519\")])\n    df = client.get_board_list()\n\n    # 扩展市场 -- 自动路由到 MacExClient\n    df = client.goods_kline(ExMarket.HK_MAIN_BOARD, \"00700\", Period.DAILY, count=5)\n```\n\n### 标准协议\n\n```python\nfrom easy_tdx import TdxClient, Market, KlineCategory\n\nwith TdxClient.from_best_host() as c:\n    count = c.get_security_count(Market.SH)\n    stocks = c.get_security_list(Market.SH, start=0)\n    quotes = c.get_security_quotes([(Market.SH, \"600000\"), (Market.SZ, \"000001\")])\n    bars = c.get_security_bars(Market.SZ, \"002176\", KlineCategory.DAY, 0, 100)\n    minute = c.get_minute_time_data(Market.SH, \"600000\")\n    trades = c.get_transaction_data(Market.SH, \"600000\", 0, 20)\n    flow = c.get_fund_flow(Market.SH, \"600519\")\n    blocks = c.get_block_info(\"block_gn.dat\")\n    xdxr = c.get_xdxr_info(Market.SH, \"600519\")\n    stat = c.get_market_stat()\n```\n\n`AsyncTdxClient` 提供对应的 `async def` 方法，接口一一对应。\n\n### SecurityQuote 字段说明\n\n`get_security_quotes()` 返回的 DataFrame 包含以下特殊字段：\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `trading_status` | int | 交易状态标志。`0x8020`(32800) = 停牌，其余值表示正常交易或集合竞价 |\n| `open_amount` | float | 集合竞价成交金额（元）。仅个股有效，指数该字段无意义 |\n| `server_time` | str | 服务器时间，格式 `HH:MM:SS.mmm` |\n| `unknown_2` | int | 指数: 集合竞价成交金额\u002F100；个股: 舍入残差≈0 |\n| `unknown_3` | int | 个股: 集合竞价成交金额\u002F100；指数: 负值\u002F无意义 |\n| `unknown_5-8` | int | 保留字段，恒为 0 |\n\n检测停牌：\n\n```python\ndf = c.get_security_quotes([(Market.SH, \"600000\")])\nis_suspended = df.iloc[0][\"trading_status\"] == 0x8020\n```\n\n### 离线数据读取\n\n无需网络，从本地通达信安装目录直接读取：\n\n```python\nfrom easy_tdx.offline import detect_tdx_home, read_daily_bars, find_daily_bar_file\nfrom easy_tdx import Market\n\nhome = detect_tdx_home()\nfilepath = find_daily_bar_file(Market.SH, \"600000\")\nbars = read_daily_bars(filepath)\n```\n\n支持：日线、分钟线、扩展市场日线、板块、股本变迁、历史财务数据。\n\n## 枚举参考\n\n### Period（K 线周期）\n\n| 值 | 名称 | 说明 |\n|----|------|------|\n| 7 | `MIN_1` | 1 分钟 |\n| 0 | `MIN_5` | 5 分钟 |\n| 1 | `MIN_15` | 15 分钟 |\n| 2 | `MIN_30` | 30 分钟 |\n| 3 | `MIN_60` | 60 分钟 |\n| 4 | `DAILY` | 日线 |\n| 5 | `WEEKLY` | 周线 |\n| 6 | `MONTHLY` | 月线 |\n| 10 | `QUARTERLY` | 季线 |\n| 11 | `YEARLY` | 年线 |\n\n### Adjust（复权类型）\n\n| 值 | 名称 | 说明 |\n|----|------|------|\n| 0 | `NONE` | 不复权 |\n| 1 | `QFQ` | 前复权 |\n| 2 | `HFQ` | 后复权 |\n\n### Category（市场分类）\n\n| 值 | 名称 | 说明 |\n|----|------|------|\n| 0 | `SH` | 上证 A 股 |\n| 2 | `SZ` | 深证 A 股 |\n| 6 | `A` | 全部 A 股 |\n| 7 | `B` | B 股 |\n| 8 | `KCB` | 科创板 |\n| 12 | `BJ` | 北证 A 股 |\n| 14 | `CYB` | 创业板 |\n\n### BoardType（板块类型）\n\n| 值 | 名称 | 说明 |\n|----|------|------|\n| 0 | `HY` | 行业一级 |\n| 1 | `HY2` | 行业二级 |\n| 3 | `GN` | 概念 |\n| 4 | `FG` | 风格 |\n| 5 | `DQ` | 地区 |\n| 255 | `ALL` | 全部 |\n\n### SortType（排序字段）\n\n| 名称 | 说明 |\n|------|------|\n| `CODE` | 代码 |\n| `PRICE` | 现价 |\n| `CHANGE_PCT` | 涨幅% |\n| `VOLUME` | 成交量 |\n| `TOTAL_AMOUNT` | 成交额 |\n| `TURNOVER_RATE` | 换手% |\n| `MAIN_NET_AMOUNT` | 主力净额 |\n\n### ExMarket（扩展市场）\n\n| 值 | 名称 | 说明 |\n|----|------|------|\n| 28 | `ZZ_FUTURES` | 郑州商品 |\n| 29 | `DL_FUTURES` | 大连商品 |\n| 30 | `SH_FUTURES` | 上海期货 |\n| 31 | `HK_MAIN_BOARD` | 香港主板 |\n| 47 | `CFFEX_FUTURES` | 中金所期货 |\n| 48 | `HK_GEM` | 香港创业板 |\n| 74 | `US_STOCK` | 美国股票 |\n\n### Market（市场）\n\n| 值 | 名称 | 说明 |\n|----|------|------|\n| 0 | `SZ` | 深圳 |\n| 1 | `SH` | 上海 |\n| 2 | `BJ` | 北京 |\n\n## 完整 API 列表\n\n### MacClient \u002F AsyncMacClient\n\n| 方法 | 说明 |\n|------|------|\n| `get_stock_quotes(stocks, fields)` | 批量实时报价 |\n| `get_stock_quotes_list(category, ...)` | 市场分类排序报价 |\n| `get_stock_kline(market, code, period, ...)` | K 线（支持复权） |\n| `get_stock_kline_with_indicators(market, code, indicators, ...)` | K 线 + 技术指标 |\n| `get_tick_chart(market, code, date)` | 单日分时图 |\n| `get_tick_charts(market, code, days)` | 多日分时图 |\n| `get_chart_sampling(market, code)` | 分时缩略采样 |\n| `get_transactions(market, code, ...)` | 逐笔成交 |\n| `get_symbol_info(market, code)` | 个股特征快照 |\n| `get_board_list(board_type, ...)` | 板块列表 |\n| `get_board_members(board_symbol, ...)` | 板块成分股报价 |\n| `get_board_summary(board_symbol, ...)` | 板块汇总（成交额、主力净流入、涨跌家数） |\n| `get_board_ranking(board_type, top_n, sort_by, ...)` | 板块涨跌幅排行榜（行业\u002F概念排行） |\n| `get_belong_board(market, code)` | 个股所属板块 |\n| `get_capital_flow(market, code)` | 资金流向 |\n| `get_auction(market, code)` | 集合竞价 |\n| `get_unusual(market, ...)` | 市场异动 |\n| `get_server_info()` | 服务器交易时段 |\n| `get_kline_offset(offset, count)` | K 线偏移信息 |\n| `get_goods_list(market, ...)` | 扩展市场商品列表 |\n\n### MacExClient \u002F AsyncMacExClient\n\n| 方法 | 说明 |\n|------|------|\n| `goods_count(market)` | 商品总数 |\n| `goods_list(market, start, count)` | 商品列表 |\n| `goods_quotes(stocks, fields)` | 批量报价 |\n| `goods_quotes_list(market, ...)` | 市场分类报价列表 |\n| `goods_kline(market, code, period, ...)` | K 线（支持复权） |\n| `goods_tick_chart(market, code, ...)` | 分时图 |\n| `goods_chart_sampling(market, code)` | 分时缩略采样 |\n| `goods_transaction(market, code, ...)` | 逐笔成交 |\n\n### TdxClient \u002F AsyncTdxClient\n\n| 方法 | 说明 |\n|------|------|\n| `get_security_count(market)` | 市场证券总数 |\n| `get_security_list(market, start)` | 证券列表（分页） |\n| `get_security_list_all()` | 沪深 A 股完整列表（含行业） |\n| `get_security_quotes(stocks)` | 批量五档行情 |\n| `get_security_bars(market, code, ...)` | 个股 K 线 |\n| `get_index_bars(market, code, ...)` | 指数 K 线 |\n| `get_minute_time_data(market, code)` | 今日分时 |\n| `get_history_minute_time_data(market, code, date)` | 历史分时 |\n| `get_transaction_data(market, code, ...)` | 当日逐笔成交 |\n| `get_history_transaction_data(...)` | 历史逐笔成交 |\n| `get_fund_flow(market, code)` | 当日资金流向 |\n| `get_history_fund_flow(market, code, ...)` | 历史资金流向 |\n| `get_xdxr_info(market, code)` | 除权除息历史 |\n| `get_finance_info(market, code)` | 最新财务数据 |\n| `get_company_info_category(market, code)` | 公司信息目录 |\n| `get_company_info_content(...)` | 公司信息文本 |\n| `get_block_info(filename)` | 板块信息 |\n| `get_report_file(filename)` | 下载服务器文件 |\n| `get_market_stat()` | 全市场涨跌统计 |\n| `get_price_limits(market, code, name, pre_close)` | 涨跌停价 |\n\n## 架构\n\n```\nsrc\u002Feasy_tdx\u002F\n├── client.py          # TdxClient \u002F AsyncTdxClient（标准协议）\n├── unified.py         # UnifiedTdxClient（统一入口）\n├── config.py          # 服务器地址、端口、超时配置\n├── indicator.py       # 技术指标计算（32 个，基于 MyTT）\n├── MyTT.py            # 麦语言技术指标算法库\n├── mac\u002F\n│   ├── client.py      # MacClient \u002F AsyncMacClient（MAC 协议）\n│   ├── enums.py       # Period, Adjust, Category, ExMarket, SortType, ...\n│   ├── models.py      # MacBar, MacQuoteField, MacTick, BoardInfo, ...\n│   └── commands\u002F      # MAC 命令（build_request + parse_response，无 IO）\n├── ex\u002F\n│   ├── client.py      # ExTdxClient \u002F AsyncExTdxClient（标准协议扩展市场）\n│   ├── mac_client.py  # MacExClient \u002F AsyncMacExClient（MAC 协议扩展市场）\n│   └── transport\u002F     # ExTdxConnection（端口 7727）\n├── transport\u002F\n│   ├── sync.py        # TdxConnection + ping_host \u002F ping_all\n│   └── async_.py      # AsyncTdxConnection（asyncio）\n├── commands\u002F          # 标准协议命令（无 IO）\n├── codec\u002F             # price \u002F volume \u002F datetime \u002F frame \u002F bitmap 编解码\n├── models\u002F            # 纯 dataclass，无业务逻辑\n├── offline\u002F           # 离线数据读取模块\n└── cli\u002F               # easy-tdx CLI（click）\n```\n\ncommands 层不依赖 transport，可独立单测。\n\n## 开发\n\n```bash\npython -m pytest tests\u002Funit\u002F -v                             # 单元测试（无需网络）\nXMTDX_LIVE=1 python -m pytest tests\u002Fintegration\u002F -v        # 集成测试\nmypy src\u002F                                                    # 类型检查\nruff check src\u002F tests\u002F                                       # lint\nruff format --check src\u002F tests\u002F                              # format check\n```\n\n## 致谢\n\n- [pytdx](https:\u002F\u002Fgithub.com\u002Frainx\u002Fpytdx) -- 离线数据读取模块借鉴自 pytdx 项目，感谢 rainx 及所有贡献者\n- [xmtdx](https:\u002F\u002Fgithub.com\u002Fminionszyw\u002Fxmtdx) -- 本项目初始原型\n- [mootdx](https:\u002F\u002Fgithub.com\u002Fmootdx\u002Fmootdx) -- 工程化封装参考\n- [MyTT](https:\u002F\u002Fgithub.com\u002Fmpquant\u002FMyTT) -- 麦语言技术指标算法库，技术指标计算基于此实现\n\n详见 [NOTICE](NOTICE) 和 [LICENSE](LICENSE)。\n\n## Changelog\n\n### 1.4.3 (2026-05-28)\n\n**30日乖离率信号指标** — 新增 BIAS_SIGNAL 指标，在标准乖离率基础上叠加短\u002F长信号线，通过三者位置关系判断趋势方向和转折点。源自通达信经典指标。\n\n- 新增 `BIAS_SIGNAL` 指标：输出 BS_X\u002FBS_SMA\u002FBS_LMA 三条线\n- CLI: `easy-tdx indicator BIAS_SIGNAL -m SH -c 600519 --table`\n- Python API: `indicators=[\"BIAS_SIGNAL\"]`\n- 详见 [30日乖离率信号指标详解](docs\u002Findicator-bias-signal.md)\n\n### 1.4.2 (2026-05-28)\n\n修复 1.4.1 发布遗漏：MyTT.py 中 ZHUOYAO 函数定义未包含在 1.4.1 的 PyPI 包中。\n\n### 1.4.1 (2026-05-28)\n\n**捉妖大师指标** — 新增 ZHUOYAO 多周期涨幅共振指标，通过 20\u002F60\u002F120 日涨幅及指数平滑判断短中长线趋势是否同向，用于筛选趋势刚启动的强势股。\n\n- 新增 `ZHUOYAO` 指标：输出 ZY_LONG\u002FZY_MID\u002FZY_SHORT\u002FZY_TREND 四条线\n- CLI: `easy-tdx indicator ZHUOYAO -m SH -c 600519 --table`\n- Python API: `indicators=[\"ZHUOYAO\"]`\n- 详见 [捉妖大师指标详解](docs\u002Findicator-zhuoyao.md)\n\n### 1.4.0 (2026-05-28)\n\n**技术指标计算** — 集成 [MyTT](https:\u002F\u002Fgithub.com\u002Fmpquant\u002FMyTT) 麦语言指标库，支持 30 个常用技术指标，一步获取 K 线 + 指标值。\n\n- 新增 `indicator.py` 核心模块：注册表驱动的指标调度，`compute_indicators()` 纯计算无 IO\n- 新增 `MacClient.get_stock_kline_with_indicators()` \u002F `AsyncMacClient` 同名方法\n- 新增 `UnifiedTdxClient.get_stock_kline_with_indicators()` \u002F `AsyncUnifiedTdxClient` 同名方法\n- 新增 CLI 命令 `easy-tdx indicator` 和 `easy-tdx indicator-list`\n- 自动获取 200+ 条历史数据预热 EMA，用户只需指定返回条数\n- 支持的指标：MACD, KDJ, RSI, BOLL, DMI, ATR, WR, CCI, BIAS, OBV, VR, EMV, MFI, BRAR, ASI, TRIX, DPO, MTM, ROC, EXPMA, BBI, PSY, DFMA, CR, KTN, XSII, MASS, TAQ\n\n### 1.3.1 (2025-05-15)\n\n- 新增 `board-summary` 和 `board-ranking` CLI 命令\n- 新增 `get_board_summary()` 板块汇总（成交额、主力净流入、涨跌家数）\n- 新增 `get_board_ranking()` 板块涨跌幅排行榜\n\n### 1.3.0 (2025-05-12)\n\n- 新增 MAC 协议客户端 `MacClient` \u002F `AsyncMacClient`（端口 7709）\n- 新增扩展市场客户端 `MacExClient` \u002F `AsyncMacExClient`（端口 7727）\n- 新增统一客户端 `UnifiedTdxClient` 自动路由 A 股 \u002F 扩展市场\n- 新增板块、资金流向、集合竞价、异动、个股特征等数据接口\n- 新增 `easy-tdx` CLI 工具，默认 JSON 输出\n\n### 1.2.1 (2025-04-20)\n\n- 离线数据读取模块（日线、分钟线、板块、财务）\n- 除权除息、股本变迁读取\n\n### 1.0.0 (2025-03-01)\n\n- 首个正式版本\n- TdxClient \u002F AsyncTdxClient 标准协议客户端\n- K 线、实时报价、分时、逐笔成交、财务数据\n","easy-tdx 是一个基于 Python 的通达信 TCP 行情协议客户端，支持在线获取 A 股、港股、美股及期货市场的数据，并可读取离线本地数据。项目提供了同步和异步接口，内置 CLI 工具默认输出 JSON 格式，方便与 AI Agent 工具链集成。其核心功能包括行情查询（如 K 线、实时报价）、分时成交分析、板块研究以及多种技术指标计算（如 MACD、KDJ 等），且每一层编解码都有离线测试覆盖以确保稳定性。适用于金融数据分析、量化交易策略开发等场景，特别是对国内股票市场有深入研究需求的开发者或分析师。",2,"2026-06-11 04:08:18","CREATED_QUERY"]