mirror of
https://ghfast.top/https://github.com/aeroxw/easy_tdx_max.git
synced 2026-09-12 15:44:18 +08:00
fix: xdxr_info 股本字段改用 _decode_volume 解码,单位万股
股本字段(category 2–10 的 panqian_liutong / panhou_liutong / qian_zongguben / hou_zongguben)与成交量字段使用相同的通达信自定义 4 字节浮点格式;原 float(uint32) 直解差约 374 倍。 改用 _decode_volume 后,最近一条 hou_zongguben(3,330,583.75 万股) 与 FinanceInfo.zong_guben / 10000(3,330,583.75 万股)完全吻合。 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -166,8 +166,8 @@ market code name volunit decimal_point pre_close
|
|||||||
market code year month day category name
|
market code year month day category name
|
||||||
fenhong peigujia songzhuangu peigu suogu
|
fenhong peigujia songzhuangu peigu suogu
|
||||||
xingquanjia fenshu
|
xingquanjia fenshu
|
||||||
panqian_liutong panhou_liutong
|
panqian_liutong panhou_liutong # 单位:万股
|
||||||
qian_zongguben hou_zongguben
|
qian_zongguben hou_zongguben # 单位:万股
|
||||||
_raw
|
_raw
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -190,6 +190,7 @@ name filename start length
|
|||||||
| 3 | `security_list` | `pre_close` 错用成交量解码函数 | 改用价格解码 |
|
| 3 | `security_list` | `pre_close` 错用成交量解码函数 | 改用价格解码 |
|
||||||
| 4 | `transaction` | 最后一个字段被 `_` 丢弃 | 保留为 `unknown_last` |
|
| 4 | `transaction` | 最后一个字段被 `_` 丢弃 | 保留为 `unknown_last` |
|
||||||
| 5 | `minute_time` | `reversed1` 字段被丢弃 | 保留为 `unknown_1` |
|
| 5 | `minute_time` | `reversed1` 字段被丢弃 | 保留为 `unknown_1` |
|
||||||
|
| 6 | `xdxr_info` | 股本字段用 `float(uint32)` 直解,差约 374 倍 | 改用 `_decode_volume`(通达信自定义浮点),单位万股,与 `FinanceInfo` 完全吻合 |
|
||||||
|
|
||||||
## 架构
|
## 架构
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import struct
|
|||||||
|
|
||||||
from .._binary import slice_bytes, unpack_from
|
from .._binary import slice_bytes, unpack_from
|
||||||
from ..codec.datetime_ import get_datetime
|
from ..codec.datetime_ import get_datetime
|
||||||
|
from ..codec.volume import _decode_volume
|
||||||
from ..exceptions import TdxDecodeError
|
from ..exceptions import TdxDecodeError
|
||||||
from ..models.enums import Market
|
from ..models.enums import Market
|
||||||
from ..models.finance import XDXR_CATEGORY_NAMES, XdxrRecord
|
from ..models.finance import XDXR_CATEGORY_NAMES, XdxrRecord
|
||||||
@@ -93,9 +94,9 @@ class GetXdxrInfoCmd(BaseCommand[list[XdxrRecord]]):
|
|||||||
|
|
||||||
|
|
||||||
def _decode_share_count(raw: int) -> float:
|
def _decode_share_count(raw: int) -> float:
|
||||||
"""股本数量解码(uint32 → 股数)。
|
"""股本数量解码(通达信自定义4字节浮点 → 万股)。
|
||||||
|
|
||||||
pytdx 使用 get_volume 但会产生错误结果(xdxr Bug #1 注释)。
|
xdxr_info 的股本字段与成交量字段使用相同的自定义浮点编码,
|
||||||
目前保持与服务器原始整数一致,待进一步逆向确认正确解码方式。
|
解码结果单位为万股,与 FinanceInfo.zong_guben / 10000 一致。
|
||||||
"""
|
"""
|
||||||
return float(raw)
|
return _decode_volume(raw)
|
||||||
|
|||||||
@@ -34,11 +34,11 @@ class XdxrRecord:
|
|||||||
xingquanjia: float | None = None # 行权价
|
xingquanjia: float | None = None # 行权价
|
||||||
fenshu: float | None = None # 分数
|
fenshu: float | None = None # 分数
|
||||||
|
|
||||||
# category in [2..10](股本变动类)
|
# category in [2..10](股本变动类,单位:万股)
|
||||||
panqian_liutong: float | None = None # 盘前流通股本
|
panqian_liutong: float | None = None # 盘前流通股本(万股)
|
||||||
panhou_liutong: float | None = None # 盘后流通股本
|
panhou_liutong: float | None = None # 盘后流通股本(万股)
|
||||||
qian_zongguben: float | None = None # 前总股本
|
qian_zongguben: float | None = None # 前总股本(万股)
|
||||||
hou_zongguben: float | None = None # 后总股本
|
hou_zongguben: float | None = None # 后总股本(万股)
|
||||||
|
|
||||||
_raw: bytes = field(default=b"", repr=False, compare=False)
|
_raw: bytes = field(default=b"", repr=False, compare=False)
|
||||||
|
|
||||||
|
|||||||
@@ -263,6 +263,13 @@ def test_xdxr_info_parse():
|
|||||||
|
|
||||||
assert all(len(r._raw) > 0 for r in recs)
|
assert all(len(r._raw) > 0 for r in recs)
|
||||||
|
|
||||||
|
# share count decode: 通达信自定义浮点,单位万股,与 FinanceInfo.zong_guben/10000 一致
|
||||||
|
stock_recs = [r for r in recs if 2 <= r.category <= 10]
|
||||||
|
last = stock_recs[-1]
|
||||||
|
# 最近一条 hou_zongguben ≈ 3_330_583.75 万股(与 FinanceInfo.zong_guben 33_305_837_500 ÷ 10000 完全吻合)
|
||||||
|
assert last.hou_zongguben is not None
|
||||||
|
assert abs(last.hou_zongguben - 3_330_583.75) < 1.0
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# finance_info
|
# finance_info
|
||||||
|
|||||||
Reference in New Issue
Block a user