rustdx-complete 0.5.0

功能完整的 A 股数据获取库,完全对标 pytdx
#!/usr/bin/env python3
"""
测试pytdx发送的请求字节
"""
import struct

# 手动构建包,模拟pytdx的行为
stocks = [(0, '000001')]
stock_len = len(stocks)
pkgdatalen = stock_len * 7 + 12

values = (
    0x10c,
    0x02006320,
    pkgdatalen,
    pkgdatalen,
    0x5053e,
    0,
    0,
    stock_len,
)

pkg_header = struct.pack("<HIHHIIHH", *values)
pkg = bytearray(pkg_header)

for stock in stocks:
    market, code = stock
    if isinstance(code, str):
        code = code.encode("utf-8")
    one_stock_pkg = struct.pack("<B6s", market, code)
    pkg.extend(one_stock_pkg)

# 打印发送的包
print("📤 pytdx发送的请求包(模拟):")
print(f"  长度: {len(pkg)} 字节")
print(f"  前30字节(hex):")
for i in range(0, min(30, len(pkg)), 8):
    end = min(i + 8, len(pkg))
    hex_str = ' '.join(f'{b:02x}' for b in pkg[i:end])
    print(f"    字节 {i:2d}-{end-1:2d}: {hex_str}")

# 打印struct.pack的详细信息
print(f"\n  struct.pack详情:")
print(f"    格式: <HIHHIIHH")
print(f"    值: {values}")
print(f"    包头长度: {len(pkg_header)} 字节")
print(f"    pkgdatalen = {stock_len} * 7 + 12 = {pkgdatalen}")

# 打印股票数据部分
print(f"\n  股票数据部分(从字节22开始):")
stock_start = 22
for i, (market, code) in enumerate(stocks):
    start = stock_start + i * 7
    end = start + 7
    hex_str = ' '.join(f'{b:02x}' for b in pkg[start:end])
    ascii_str = ''.join(chr(b) if 32 <= b < 127 else '.' for b in pkg[start:end])
    print(f"    股票{i+1}: {hex_str} | {ascii_str}")
    print(f"      market={market}, code={code}")