Files
easy-tdx/src/xmtdx/models/quote.py
T
minionszywandClaude Sonnet 4.6 283682f6b4 feat: 初始实现 xmtdx —— 从零实现通达信 TCP A 股行情客户端
替代年久失修的 pytdx,修复已知 bug,保留未解字段供逆向分析。

主要内容:
- codec 层:get_price 变长编码、get_volume 自定义浮点、datetime/frame 解析
- transport 层:同步(socket)+ 异步(asyncio)双实现,共用命令层
- 命令层(11 条):security_count/list/quotes/bars、minute_time(今日+历史)、
  transaction(当日+历史)、xdxr_info、finance_info、company_info
- 高层 API:TdxClient + AsyncTdxClient
- 单元测试 26 条,全部通过;真实服务器集成测试覆盖全部命令

修复 pytdx Bug #1–5:xdxr 循环读取错误位置、GBK 截断崩溃、
pre_close 误用 get_volume、逐笔/分时未解字段被丢弃

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 19:55:19 +08:00

69 lines
2.1 KiB
Python
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.
"""实时行情五档报价模型"""
from dataclasses import dataclass, field
from .enums import Market
@dataclass
class SecurityQuote:
"""单只股票实时五档行情。
带 unknown_ 前缀的字段为协议中尚未明确含义的字段,保留以供逆向分析。
_raw 为该股票记录的原始字节切片。
"""
market: Market
code: str
# 价格
price: float # 现价
pre_close: float # 昨收
open: float # 今开
high: float # 最高
low: float # 最低
# 量额
vol: float # 总成交量(手)
cur_vol: float # 当前成交量
amount: float # 成交额(元)
s_vol: float # 内盘(主动卖)
b_vol: float # 外盘(主动买)
# 活跃度指标(含义来自社区逆向,仅供参考)
active1: int
active2: int
# 买盘五档
bid1: float; bid_vol1: float
bid2: float; bid_vol2: float
bid3: float; bid_vol3: float
bid4: float; bid_vol4: float
bid5: float; bid_vol5: float
# 卖盘五档
ask1: float; ask_vol1: float
ask2: float; ask_vol2: float
ask3: float; ask_vol3: float
ask4: float; ask_vol4: float
ask5: float; ask_vol5: float
# 已确认含义
rise_speed: float # 涨速(原 reversed_bytes9 / 100
# 未知字段:买卖量之后的两个变长整数
unknown_2: int = field(default=0, repr=False) # 原 reversed_bytes2
unknown_3: int = field(default=0, repr=False) # 原 reversed_bytes3
# 未知字段:尾部四个变长整数
unknown_5: int = field(default=0, repr=False) # 原 reversed_bytes5
unknown_6: int = field(default=0, repr=False) # 原 reversed_bytes6
unknown_7: int = field(default=0, repr=False) # 原 reversed_bytes7
unknown_8: int = field(default=0, repr=False) # 原 reversed_bytes8
# 服务器时间字符串(从 unknown_0 原始整数解析,格式 HH:MM:SS.mmm
server_time: str = field(default="", repr=True)
# 原始字节(该股票记录切片)
_raw: bytes = field(default=b"", repr=False, compare=False)