"""获取证券列表命令(每页最多1000条,按 start 分页)。 修复 pytdx Bug #2:GBK 解码使用 errors='replace',截断多字节序列不再崩溃。 修复 pytdx Bug #3:pre_close 保持使用通达信自定义浮点解码。 """ import struct from .._binary import slice_bytes, unpack_from from ..codec.volume import _decode_volume from ..models.enums import Market from ..models.security import SecurityInfo from .base import BaseCommand _RECORD_SIZE = 29 class GetSecurityListCmd(BaseCommand[list[SecurityInfo]]): """获取指定市场从 start 开始的证券列表。""" def __init__(self, market: Market, start: int) -> None: self.market = market self.start = start def build_request(self) -> bytes: # Header (12 bytes) + Payload (6 bytes) = 18 bytes # Payload: Market(H), Start(H), Unknown(H)=0 header = bytes.fromhex("0c0118640101060006005004".replace(" ", "")) return header + struct.pack(" list[SecurityInfo]: (num,) = unpack_from("