Files
easy-tdx/src/easy_tdx/models/finance.py
T
GitHubandClaude Opus 4.8 4dfd18050e fix: resolve all CI mypy (265→0) and ruff (26→0) errors
- pyproject.toml: add mypy overrides for pandas/tabulate/matplotlib stubs,
  disable strict checking for vendored MyTT library
- config.py: use cast() for dict[str, Any] .get() returns
- beichi.py: widen _calc_bi_force param to BI | XD, import XD
- backtest/cli.py: split combo/single strategy into separate typed variables
- backtest/combo.py: add bool_array() helper for numpy return types
- chanlun/analyser.py: type ignore for pandas row access, fix dict type arg
- unified.py: change fields param from object to Any
- ex/mac_client.py: add type args to list literals
- cli/cmd_offline.py: wrap int market as Market enum before API call
- cli/cmd_chanlun.py: fix dict type arg
- offline/write_*.py: explicit int() cast for struct.unpack returns
- MyTT.py: fix line-too-long comments, UP038 isinstance syntax
- tests: fix E712 (==False → ~mask), E741 (noqa), F841, import sorting
- ruff format applied across codebase

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 15:03:41 +08:00

158 lines
4.7 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 XdxrRecord:
"""除权除息记录(一只股票可有多条)
pytdx Bug #1 已修复:循环内不再从 body[:7] 读 market/code
而是从当前 pos 正确读取。
"""
market: Market
code: str
year: int
month: int
day: int
category: int # 事件类型(见下方 CATEGORY_NAMES
name: str # 事件类型名称
# category == 1(除权除息)
fenhong: float | None = None # 每股分红(元;协议原值按每10股)
peigujia: float | None = None # 配股价(元/股)
songzhuangu: float | None = None # 每股送转股比例(协议原值按每10股)
peigu: float | None = None # 每股配股比例(协议原值按每10股)
# category in [11, 12](扩缩股)
suogu: float | None = None # 缩股比例
# category in [13, 14](权证)
xingquanjia: float | None = None # 行权价
fenshu: float | None = None # 分数
# category in [2..10](股本变动类,单位:万股)
panqian_liutong: float | None = None # 盘前流通股本(万股)
panhou_liutong: float | None = None # 盘后流通股本(万股)
qian_zongguben: float | None = None # 前总股本(万股)
hou_zongguben: float | None = None # 后总股本(万股)
_raw: bytes = field(default=b"", repr=False, compare=False)
XDXR_CATEGORY_NAMES: dict[int, str] = {
1: "除权除息",
2: "送配股上市",
3: "非流通股上市",
4: "未知股本变动",
5: "股本变化",
6: "增发新股",
7: "股份回购",
8: "增发新股上市",
9: "转配股上市",
10: "可转债上市",
11: "扩缩股",
12: "非流通股缩股",
13: "送认购权证",
14: "送认沽权证",
}
@dataclass
class FinanceInfo:
"""最新财务数据(单只股票)"""
market: Market
code: str
# 股本(万股)
liutong_guben: float # 流通股本
zong_guben: float # 总股本
guojia_gu: float # 国家股
faqiren_faren_gu: float # 发起人法人股
faren_gu: float # 法人股
b_gu: float # B股
h_gu: float # H股
zhigong_gu: float # 职工股
# 基本信息
province: int # 所属省份代码
industry: int # 所属行业代码
updated_date: int # 财务更新日期 YYYYMMDD
ipo_date: int # 上市日期 YYYYMMDD
gudong_renshu: float # 股东人数
# 资产负债(元)
zong_zichan: float # 总资产
liudong_zichan: float # 流动资产
guding_zichan: float # 固定资产
wuxing_zichan: float # 无形资产
liudong_fuzhai: float # 流动负债
changqi_fuzhai: float # 长期负债
ziben_gongjijin: float # 资本公积金
jing_zichan: float # 净资产
# 利润(元)
zhuying_shouru: float # 主营收入
zhuying_lirun: float # 主营利润
yingshou_zhangkuan: float # 应收账款
yingye_lirun: float # 营业利润
touzi_shouyu: float # 投资收益
jingying_xianjinliu: float # 经营现金流
zong_xianjinliu: float # 总现金流
cunhuo: float # 存货
lirun_zonghe: float # 利润总额
shuihou_lirun: float # 税后利润
jing_lirun: float # 净利润
weifen_lirun: float # 未分配利润
# 每股指标
meigujing_zichan: float # 每股净资产(原 baoliu1
# 协议保留字段(含义未完全确认)
reserve2: float = field(default=0.0, repr=False) # 原 baoliu2
_raw: bytes = field(default=b"", repr=False, compare=False)
@dataclass
class CompanyInfoCategory:
"""公司信息文件目录条目"""
name: str = "" # 目录名(如“最新提示”)
filename: str = "" # 文件名(如 '600000.txt'
start: int = 0 # 内容起始偏移
length: int = 0 # 内容长度(字节)
@dataclass
class FinancialFileInfo:
"""财报 zip 文件索引条目(来自 tdxfin/gpcw.txt)。"""
filename: str # "gpcw20260331.zip"
hash: str # MD5 hex digest
filesize: int # 字节
@dataclass
class FinancialRecord:
"""单只股票的一期历史专业财报记录。"""
code: str # 6 位股票代码
market: Market # 市场
report_date: int # 报告期 YYYYMMDD
fields: list[float] # N 个浮点字段(N = report_size / 4
@dataclass
class TdxBlock:
"""通达信板块信息(行业、概念、风格等)"""
name: str # 板块名称(如“房地产”)
category: int # 板块分类(0=行业, 1=地域, 2=概念, 3=风格, 等)
count: int # 板块包含股票数量
codes: list[str] # 股票代码列表(6位数字代码)