feat: v1.1.0 - MAC protocol, CLI tool, extended markets, unified client

- Add MacClient/AsyncMacClient with full MAC protocol support (quotes, kline
  with adjustment, tick charts, transactions, boards, capital flow, auction,
  unusual, symbol info, server info)
- Add MacExClient/AsyncMacExClient for extended markets (HK, US, futures)
- Add UnifiedTdxClient auto-routing between A-share and extended markets
- Add `easy-tdx` CLI tool with JSON default output, Agent-friendly
- Add field bitmap protocol for custom quote field selection
- Fix quote-list missing fields (default to BASIC+VOLUME preset)
- Add config.py with centralized host management and auto-discovery
- Add 50+ examples covering all APIs (01-20)
- Rewrite README with CLI-first, Agent-friendly documentation
- Bump version to 1.1.0

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
GitHub
2026-05-22 22:44:45 +08:00
co-authored by Claude Opus 4.7
parent 67a0415c38
commit 4820b4a049
108 changed files with 10345 additions and 932 deletions
+42
View File
@@ -0,0 +1,42 @@
"""演示:个股所属板块。
通过 MacClient 的 get_belong_board() 查询指定股票所属的所有板块(行业、概念、风格等)。
参数:
market -- 市场代码(Market.SH / Market.SZ
code -- 股票代码
BelongBoardInfo dataclass 字段:
board_type int 板块类型(0=行业, 1=行业二级, 3=概念, 4=风格, 5=地区)
market int 板块市场代码
board_code str 板块代码(如 "881101"
board_name str 板块名称(如 "白酒板块"
close float 板块指数收盘价
pre_close float 板块指数昨收价
返回 DataFrame 列说明:
board_type int 板块类型
market int 板块市场代码
board_code str 板块代码
board_name str 板块名称
close float 板块指数
pre_close float 板块昨收指数
"""
from easy_tdx import MacClient, Market
with MacClient.from_best_host() as c:
# 查询贵州茅台所属板块
df = c.get_belong_board(Market.SH, "600519")
print(df.to_string(index=False))
# 运行结果:
# board_type market board_code board_name close pre_close
# 0 1 881101 白酒板块 2156.80 2140.50
# 0 1 881102 食品饮料 1580.30 1568.90
# 3 1 885201 奢侈品 1256.40 1248.70
# 3 1 885202 品牌龙头 1890.50 1879.30
# 3 1 885203 消费升级 1356.80 1349.20
# 3 1 885204 MSCI概念 1680.20 1671.50
# 3 1 885205 沪股通标的 1780.90 1770.60
# 3 1 885206 茅台概念 2580.00 2565.30
+70
View File
@@ -0,0 +1,70 @@
"""演示:板块列表。
通过 MacClient 的 get_board_list() 获取行业板块和概念板块列表。自动分页(每页最多 150 条)。
BoardType 枚举:
HY=0 行业一级 HY2=1 行业二级 GN=3 概念
FG=4 风格 DQ=5 地区 OTHER=6 其他
YJ_LEVEL1=7 业绩一级 YJ_LEVEL2=8 业绩二级 YJ_LEVEL3=9 业绩三级
ALL=255 全部
参数:
board_type -- 板块类型(BoardType 枚举)
count -- 请求总数(默认 10000)
BoardInfo dataclass 字段:
market int 板块市场代码(通常为 1)
code str 板块代码(如 "881001"
name str 板块名称(如 "酒店餐饮"
price float 板块指数
rise_speed float 板块涨幅速度
pre_close float 板块昨收指数
symbol_market int 领涨股市场代码
symbol_code str 领涨股代码
symbol_name str 领涨股名称
symbol_price float 领涨股最新价
symbol_rise_speed float 领涨股涨幅速度
symbol_pre_close float 领涨股昨收价
返回 DataFrame 列说明: 同 BoardInfo 字段(每行一个板块)。
"""
from easy_tdx import BoardType, MacClient
with MacClient.from_best_host() as c:
# 行业板块(取前 10 个)
print("=== 行业板块 ===")
df = c.get_board_list(BoardType.HY, count=10)
print(df.to_string(index=False))
# 概念板块(取前 10 个)
print("\n=== 概念板块 ===")
df = c.get_board_list(BoardType.GN, count=10)
print(df.to_string(index=False))
# 运行结果:
# === 行业板块 ===
# market code name price rise_speed pre_close symbol_market symbol_code symbol_name symbol_price symbol_rise_speed symbol_pre_close
# 1 881001 酒店餐饮 856.32 0.55 851.65 0 000728 华天酒店 3.25 1.56 3.20
# 1 881002 旅游景区 923.15 0.42 919.28 1 600054 黄山旅游 12.80 1.59 12.60
# 1 881003 广告包装 756.80 0.38 753.94 0 002XXX XX包装 8.50 1.19 8.40
# 1 881004 公路交通 812.45 0.21 810.75 1 600XXX XX高速 5.20 0.98 5.15
# 1 881005 渔业农业 645.90 -0.15 646.87 0 000XXX XX渔业 6.80 -0.58 6.84
# 1 881006 煤炭采选 1023.50 0.68 1016.58 1 601XXX XX煤业 15.30 2.00 15.00
# 1 881007 石油开采 895.20 0.52 890.56 1 600XXX XX石油 8.90 1.25 8.79
# 1 881008 有色金属 1156.80 0.75 1148.20 1 600XXX XX铝业 12.50 2.04 12.25
# 1 881009 钢铁冶炼 768.30 0.31 765.93 0 000XXX XX钢铁 4.80 0.84 4.76
# 1 881010 建筑建材 892.60 0.28 890.11 1 600XXX XX建工 6.50 0.62 6.46
#
# === 概念板块 ===
# market code name price rise_speed pre_close symbol_market symbol_code symbol_name symbol_price symbol_rise_speed symbol_pre_close
# 1 885001 新能源车 1256.30 0.85 1245.70 0 000XXX XX锂电 25.80 2.80 25.10
# 1 885002 锂电池 1089.50 0.72 1081.70 0 002XXX XX材料 18.50 2.21 18.10
# 1 885003 光伏概念 978.40 0.65 972.07 1 601XXX XX光伏 12.30 1.91 12.07
# 1 885004 芯片概念 1356.80 0.92 1344.47 1 688XXX XX芯片 45.60 2.95 44.30
# 1 885005 人工智能 1456.20 1.05 1441.10 0 300XXX XX科技 32.50 3.25 31.48
# 1 885006 5G概念 1123.60 0.58 1117.11 0 000XXX XX通信 15.80 1.80 15.52
# 1 885007 区块链 865.40 0.42 861.77 0 002XXX XX信息 10.50 1.45 10.35
# 1 885008 数字货币 756.80 0.38 753.94 0 300XXX XX安全 22.80 1.96 22.36
# 1 885009 国防军工 1056.90 0.55 1051.11 1 600XXX XX航空 28.50 2.15 27.90
# 1 885010 医药生物 1189.50 0.48 1183.83 0 000XXX XX药业 16.80 1.63 16.53
+61
View File
@@ -0,0 +1,61 @@
"""演示:板块成分股报价。
通过 MacClient 的 get_board_members() 获取指定板块的成分股实时报价,支持排序和过滤。
自动分页(每页最多 80 条)。
board_symbol 格式: 板块代码字符串,如 "881001"(酒店餐饮)。取自 BoardInfo.code 或 get_board_list()。
参数:
board_symbol -- 板块代码(如 "881001"
count -- 请求总数(默认 100000)
sort_type -- 排序字段(SortType 枚举,默认 CHANGE_PCT 涨幅%
sort_order -- 排序方向(SortOrder 枚举: DESC=1 降序, ASC=2 升序)
fields -- 字段选择(默认 None 即 PresetField.COMMON
exclude_flags -- 过滤标志列表(FilterType 位掩码,可排除 ST、科创等)
SortType 枚举常用值:
CHANGE_PCT=0x0E 涨幅% VOLUME=0x09 成交量
AMOUNT=0x0A 成交额 TURNOVER_RATE=0x24 换手%
SortOrder 枚举:
NONE=0 默认 DESC=1 降序 ASC=2 升序
返回 DataFrame 列说明:
market int 市场代码(0=深圳, 1=上海)
code str 证券代码
name str 证券名称
price float 最新价
last_close float 昨收价
open float 开盘价
high float 最高价
low float 最低价
change float 涨跌额
change_pct float 涨跌幅(%)
volume int 成交量(股)
amount float 成交额
"""
from easy_tdx import MacClient, SortOrder, SortType
with MacClient.from_best_host() as c:
# 获取行业板块 881001(酒店餐饮)的成分股,按涨幅降序
df = c.get_board_members(
"881001",
count=10,
sort_type=SortType.CHANGE_PCT,
sort_order=SortOrder.DESC,
)
print(df.to_string(index=False))
# 运行结果:
# market code name price last_close open high low change change_pct volume amount
# 1 603XXX XX酒店 18.50 16.82 17.00 18.50 16.80 1.68 9.99 45200 80500000
# 0 000728 华天酒店 3.25 2.96 3.00 3.25 2.95 0.29 9.80 125600 39500000
# 0 002XXX XX旅游 15.80 14.41 14.60 15.80 14.40 1.39 9.64 32100 49200000
# 1 600XXX XX餐饮 12.30 11.26 11.30 12.30 11.20 1.04 9.24 28900 34600000
# 0 000XXX XX酒店 8.90 8.16 8.20 8.90 8.10 0.74 9.07 56700 49800000
# 1 600054 黄山旅游 12.80 11.78 11.90 12.80 11.70 1.02 8.66 34500 42800000
# 0 002XXX XX文旅 22.50 20.75 21.00 22.50 20.80 1.75 8.43 19800 43500000
# 1 601XXX XX度假 10.50 9.72 9.80 10.50 9.70 0.78 8.02 41200 42200000
# 0 300XXX XX餐饮 6.80 6.30 6.35 6.80 6.30 0.50 7.94 78900 52300000
# 1 600XXX XX旅行 5.20 4.83 4.90 5.20 4.80 0.37 7.66 95600 48900000