Files
easy-tdx/CLAUDE.md
T
Justin Gu 02701952ca feat: merge datetime fields in DataFrame output, hide MinuteBar internal fields
- K-line: daily+ periods output 'date' only, minute periods output 'datetime'
- Transactions (tick-by-tick): combine date param + hour/minute into 'datetime'
- XdxrRecord, HistoricalFundFlow: year/month/day merged to 'date'
- MinuteBar: rename unknown_1 to _unknown_1 (hidden from DataFrame)
- MinuteBar: add datetime column computed from bar index (A-share 240-bar pattern)
- get_minute_time_data: use history endpoint only (current-day endpoint broken in pytdx too)
- Update all examples to reflect new DataFrame column names
2026-05-22 04:19:07 +08:00

56 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Build / Test / Lint
```bash
# 单元测试(无需网络,使用 tests/fixtures/ 中的 hex 数据)
python -m pytest tests/unit/ -v
# 集成测试(需要网络,默认跳过)
XMTDX_LIVE=1 python -m pytest tests/integration/ -v
# 类型检查(strict mypy
mypy src/
# lint + format
ruff check src/ tests/
ruff format --check src/ tests/
```
## 架构
```
src/easy_tdx/
├── client.py # TdxClient / AsyncTdxClient(高层 API
├── transport/
│ ├── sync.py # TdxConnectionsocket+ ping_host / ping_all
│ └── async_.py # AsyncTdxConnectionasyncio
├── commands/ # 每条命令:build_request() + parse_response(),无 IO
├── codec/ # price / volume / datetime / frame 编解码
└── models/ # 纯 dataclass,无业务逻辑
```
commands 层不依赖 transport,可独立单测。修改 codec 或 commands 时不需要网络。
## 协议编解码注意事项
- **价格编码**:变长有符号整数(类 LEB128),bit8=继续,bit7=符号。差分编码(相邻 tick 存 delta)。
- **成交量编码**:4 字节自定义浮点(`_decode_volume`),字节 3=指数,字节 0-2=精度。**不可用于价格字段**。
- **握手**:连接后必须顺序发送 3 条 setup 命令,响应丢弃。
- **帧格式**:16 字节响应头,body 按需 zlib 解压。
- 新增编解码逻辑时务必在 `tests/fixtures/` 中补充 hex fixture 并编写对应的离线解析测试。
## 已知限制
- `Market.BJ``get_security_list()` 不能稳定获取(服务器端问题),不要尝试依赖它。
- `limit_up` / `limit_down``SecurityQuote` 中默认为 `None`,涨跌停价应通过 `get_price_limits()``compute_price_limits()` 计算。
## 代码风格
- ruff: line-length 100, target py310, rules: E/F/I/UP
- mypy strict mode
- 所有 `get_*` 公开方法返回 `pd.DataFrame`(通过 `_df._to_df()` 转换)。内部方法仍使用 dataclass 列表。
- 依赖:pandas>=2.0)、tzdata>=2024.1)。