wmshare 1.7.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- wmshare/__init__.py +46 -0
- wmshare/_catalog/domains/corp.equity.yaml +87 -0
- wmshare/_catalog/domains/disc.bonus.yaml +187 -0
- wmshare/_catalog/domains/disc.events.yaml +91 -0
- wmshare/_catalog/domains/disc.filings.yaml +39 -0
- wmshare/_catalog/domains/disc.notice.yaml +160 -0
- wmshare/_catalog/domains/disc.workout.yaml +18 -0
- wmshare/_catalog/domains/fund.estimates.yaml +24 -0
- wmshare/_catalog/domains/fund.indicators.yaml +162 -0
- wmshare/_catalog/domains/fund.segments.yaml +184 -0
- wmshare/_catalog/domains/fund.statements.yaml +77 -0
- wmshare/_catalog/domains/market.cbond.yaml +32 -0
- wmshare/_catalog/domains/market.index.yaml +24 -0
- wmshare/_catalog/domains/market.intl.yaml +31 -0
- wmshare/_catalog/domains/market.kline.yaml +224 -0
- wmshare/_catalog/domains/market.margin.yaml +21 -0
- wmshare/_catalog/domains/market.moneyflow.yaml +73 -0
- wmshare/_catalog/generated/inventory.json +7299 -0
- wmshare/_catalog/generated/metrics.json +8795 -0
- wmshare/_catalog/schema/domain.schema.json +128 -0
- wmshare/_catalog/symbols/companies.cn.json +1 -0
- wmshare/_catalog/symbols/companies.hk.json +1 -0
- wmshare/_catalog/symbols/companies.us.json +1 -0
- wmshare/_catalog/symbols/manifest.json +10 -0
- wmshare/api/__init__.py +1398 -0
- wmshare/api/_generated.py +1648 -0
- wmshare/catalog.py +355 -0
- wmshare/client.py +548 -0
- wmshare/errors.py +78 -0
- wmshare/notice_stream.py +360 -0
- wmshare/py.typed +0 -0
- wmshare/skills/wmshare/SKILL.md +173 -0
- wmshare/units.py +207 -0
- wmshare-1.7.0.dist-info/METADATA +274 -0
- wmshare-1.7.0.dist-info/RECORD +38 -0
- wmshare-1.7.0.dist-info/WHEEL +5 -0
- wmshare-1.7.0.dist-info/licenses/LICENSE +154 -0
- wmshare-1.7.0.dist-info/top_level.txt +1 -0
wmshare/__init__.py
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"""wmshare — WinMale 个股开放数据 SDK。
|
|
2
|
+
|
|
3
|
+
机器可读数据目录(catalog/)+ OpenAPI 取数客户端。返回值统一基础单位:
|
|
4
|
+
比率/涨跌幅=小数(0.332=33.2%)、金额/价格/市值=元(报表原币)、股数/成交量=股;
|
|
5
|
+
每次返回都经过目录声明的量级守护与关系不变量校验(违例抛 DataError)。
|
|
6
|
+
|
|
7
|
+
import wmshare
|
|
8
|
+
|
|
9
|
+
cat = wmshare.load() # 数据目录(域/函数/参数/返回 schema)
|
|
10
|
+
fn = cat.function("kline.query_bars")
|
|
11
|
+
|
|
12
|
+
cli = wmshare.Client.from_env() # 读 WMSHARE_CLIENT_ID/SECRET(或凭证文件)
|
|
13
|
+
bars = cli.call("kline.query_bars", sym="600519", limit=30)
|
|
14
|
+
# _units="native" 保留脚本输出单位;_raw=True 返回 store 原始行;
|
|
15
|
+
# Client(validate=False) 关闭校验(换算仍执行)
|
|
16
|
+
"""
|
|
17
|
+
from wmshare.catalog import Catalog, load
|
|
18
|
+
from wmshare.client import BatchResult, Client, normalize_symbol
|
|
19
|
+
from wmshare.errors import (
|
|
20
|
+
ApiError, AuthError, CatalogError, DataError, WmshareError, LimitError,
|
|
21
|
+
ServerError, StreamResetError, TransportError, UsageError,
|
|
22
|
+
)
|
|
23
|
+
from wmshare.notice_stream import NoticePoller, NoticeStreamEvent
|
|
24
|
+
|
|
25
|
+
__version__ = "1.7.0"
|
|
26
|
+
|
|
27
|
+
__all__ = [
|
|
28
|
+
"Catalog", "load", "Client", "BatchResult", "normalize_symbol", "__version__",
|
|
29
|
+
"skill_dir",
|
|
30
|
+
"NoticePoller", "NoticeStreamEvent",
|
|
31
|
+
"WmshareError", "AuthError", "UsageError", "LimitError", "TransportError",
|
|
32
|
+
"ServerError", "ApiError", "DataError", "CatalogError", "StreamResetError",
|
|
33
|
+
]
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def skill_dir():
|
|
37
|
+
"""随包分发的 AI agent skill 目录(Agent Skills 格式,含 SKILL.md)。
|
|
38
|
+
|
|
39
|
+
装入 agent(复制到其发现路径之一)::
|
|
40
|
+
|
|
41
|
+
cp -r "$(python3 -c 'import wmshare; print(wmshare.skill_dir())')" \\
|
|
42
|
+
~/.agents/skills/wmshare
|
|
43
|
+
"""
|
|
44
|
+
from pathlib import Path
|
|
45
|
+
|
|
46
|
+
return Path(__file__).resolve().parent / "skills" / "wmshare"
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
id: corp.equity
|
|
2
|
+
version: 2.1.0
|
|
3
|
+
cn: 股东与股本
|
|
4
|
+
kind: raw
|
|
5
|
+
category: reference
|
|
6
|
+
priority: P1
|
|
7
|
+
description: 股东治理与股本全景——十大股东、股东户数、股权质押(明细+比例+市场/行业/
|
|
8
|
+
机构分布)、限售解禁、机构持股(明细/占比/沪港通/国家队)、高管名册与增减持、股本结构、
|
|
9
|
+
回购(方案+执行)、并购重组、关联交易、一致行动人、对外担保、诉讼处罚。披露原值直采,
|
|
10
|
+
比例字段统一换算为小数(0.0522 = 5.22%)。
|
|
11
|
+
data_origin: [交易所披露, 平台数据服务]
|
|
12
|
+
stores: [biz.equity, ref.info]
|
|
13
|
+
units:
|
|
14
|
+
ratio: 小数(比例字段以各函数 units 声明为准:上游 fmt 部分接口已预换算小数、
|
|
15
|
+
部分仍为百分数——2026-10-28 全量审计逐函数核验,勿按字段名臆断)
|
|
16
|
+
money: 元(持股市值/质押市值/回购金额等,披露源口径)
|
|
17
|
+
shares: 股(持股数/解禁数量/质押数量)
|
|
18
|
+
price: 元(交易均价/回购价)
|
|
19
|
+
requires: {path: sys/equity/init.xs, preloaded: true}
|
|
20
|
+
notes:
|
|
21
|
+
- '公司档案(名称/行业/上市日期/简介)经 cli.info.profile() 与 fund.indicators 的
|
|
22
|
+
profile 指标组($NAME/$INDUSTRY_CUR/$ORG_ORGTYPE/$ORG_LISTINGDATE)获取'
|
|
23
|
+
- '比例字段换算以各函数 units 声明为准(同接口内可能混排:institution_summary 的
|
|
24
|
+
all_shares_ratio 为百分数、total_shares_ratio 已是小数);ranges 为 2026-10-28
|
|
25
|
+
live 审计实测界;其余未声明字段保持披露原值'
|
|
26
|
+
- '2026-10-28 审计已核验为元/股/小数并补 ranges:reorg.deal_amount(元)、
|
|
27
|
+
violation.punish_amt(元)、executives.salary(元/年)、capital_change.total_shares
|
|
28
|
+
(股)、holdernum 比例族(小数)、pledge_market.pledge_ratio_total(小数,
|
|
29
|
+
上游 inventory cn「百分数」为遗留标注);guarantee_amt、exec_change 族仍待样本'
|
|
30
|
+
- 'query_exec_change_at / query_capital_change_at 按报告期取数(annual 如 2024、
|
|
31
|
+
sampling 如 Q4)'
|
|
32
|
+
functions:
|
|
33
|
+
# ---- 股东 ----
|
|
34
|
+
- {name: equity.query_holder10, cn: 最新一期十大股东, layer: L0, normalize_with: equity.fmt_holder10, ranges: {hold_num_ratio: [0, 1]}}
|
|
35
|
+
- {name: equity.query_holdernum, cn: 最新股东户数, layer: L0, normalize_with: equity.fmt_holdernum, ranges: {hold_ratio_total: [0, 1], freehold_ratio_total: [0, 1], total_num_ratio: [0, 1], avg_freeshares_ratio: [-1, 1], avg_hold_amt: [0, 1.0e+09], avg_free_shares: [0, 1.0e+10]}}
|
|
36
|
+
# ---- 质押 ----
|
|
37
|
+
- {name: equity.query_pledge_detail, cn: 主要股东质押明细, layer: L0, normalize_with: equity.fmt_pledge_detail, units: {accum_pledge_tsr: percent, pf_hold_ratio: percent, pf_tsr: percent}, ranges: {accum_pledge_tsr: [0, 1], pf_hold_ratio: [0, 1], pf_tsr: [0, 1]}}
|
|
38
|
+
- {name: equity.query_pledge_summary, cn: 公司质押比例, layer: L0, normalize_with: equity.fmt_pledge_summary, ranges: {pledge_ratio: [0, 1]}}
|
|
39
|
+
- {name: equity.query_pledge_market, cn: 市场整体质押, layer: L0, normalize_with: equity.fmt_pledge_market, ranges: {pledge_ratio_total: [0, 1], csi300_chg: [-1, 1], pledge_market_value: [0, 1.0e+14], total_pledged_shares: [0, 1.0e+13]}}
|
|
40
|
+
- {name: equity.query_pledge_industry, cn: 行业质押比例, layer: L0, normalize_with: equity.fmt_pledge_industry, ranges: {avg_pledge_ratio: [0, 1]}}
|
|
41
|
+
- {name: equity.query_pledge_org, cn: 质押机构分布, layer: L0, normalize_with: equity.fmt_pledge_org}
|
|
42
|
+
# ---- 机构 ----
|
|
43
|
+
- {name: equity.query_institution_detail, cn: 机构持股明细, layer: L0, normalize_with: equity.fmt_institution_detail, units: {total_shares_ratio: percent, free_shares_ratio: percent}, ranges: {total_shares_ratio: [0, 1], free_shares_ratio: [0, 1]}}
|
|
44
|
+
- {name: equity.query_institution_summary, cn: 机构持仓占比, layer: L0, normalize_with: equity.fmt_institution_summary, units: {all_shares_ratio: percent}, ranges: {all_shares_ratio: [0, 1], total_shares_ratio: [0, 1], change_ratio: [-1, 1]}}
|
|
45
|
+
- {name: equity.query_hgt, cn: 沪港通持股, layer: L0, normalize_with: equity.fmt_hgt, units: {add_shares_pct: percent}, ranges: {add_shares_pct: [0, 1], free_shares_ratio: [0, 1], total_shares_ratio: [0, 1]}}
|
|
46
|
+
- {name: equity.query_national_team, cn: 国家队持股, layer: L0, normalize_with: equity.fmt_national_team, units: {shares_ratio: percent, shares_ratio_change: percent}, ranges: {shares_ratio: [0, 1], shares_ratio_change: [-1, 1]}}
|
|
47
|
+
# ---- 治理事件 ----
|
|
48
|
+
- {name: equity.query_release, cn: 限售解禁日程, layer: L0, normalize_with: equity.fmt_release, units: {total_shares_ratio: percent, unlimited_ratio: percent}, ranges: {total_shares_ratio: [0, 1], unlimited_ratio: [0, 1]}}
|
|
49
|
+
- {name: equity.query_buyback_plan, cn: 回购方案全览, layer: L0, normalize_with: equity.fmt_buyback_plan}
|
|
50
|
+
- {name: equity.query_buyback_detail, cn: 回购执行明细, layer: L0, normalize_with: equity.fmt_buyback_detail}
|
|
51
|
+
- {name: equity.query_reorg, cn: 并购重组, layer: L0, normalize_with: equity.fmt_reorg, units: {transfer_ratio: percent}, ranges: {transfer_ratio: [0, 1]}}
|
|
52
|
+
- {name: equity.query_related_trade, cn: 关联交易, layer: L0, normalize_with: equity.fmt_related_trade}
|
|
53
|
+
- {name: equity.query_concert, cn: 一致行动人, layer: L0, normalize_with: equity.fmt_concert, units: {hold_ratio: percent}, ranges: {hold_ratio: [0, 1]}}
|
|
54
|
+
- {name: equity.query_guarantee, cn: 对外担保, layer: L0, normalize_with: equity.fmt_guarantee}
|
|
55
|
+
- {name: equity.query_litigation, cn: 诉讼记录, layer: L0, normalize_with: equity.fmt_litigation}
|
|
56
|
+
- {name: equity.query_violation, cn: 违规处罚, layer: L0, normalize_with: equity.fmt_violation, ranges: {punish_amt: [0, 1.0e+11]}}
|
|
57
|
+
# ---- 高管与股本 ----
|
|
58
|
+
- {name: equity.query_executives, cn: 高管名册, layer: L0, normalize_with: equity.fmt_executives, ranges: {salary: [0, 1.0e+8], hold_num: [0, 1.0e+10]}}
|
|
59
|
+
- {name: equity.query_exec_change, cn: 高管增减持最新, layer: L0, normalize_with: equity.fmt_exec_change}
|
|
60
|
+
- {name: equity.query_exec_change_at, cn: 指定报告期增减持, layer: L1, normalize_with: equity.fmt_exec_change}
|
|
61
|
+
- {name: equity.query_capital_change, cn: 股本结构最新, layer: L0, normalize_with: equity.fmt_capital_change, ranges: {total_shares: [0, 1.0e+13], free_shares: [0, 1.0e+13]}}
|
|
62
|
+
- {name: equity.query_capital_change_at, cn: 指定报告期股本, layer: L1, normalize_with: equity.fmt_capital_change}
|
|
63
|
+
# ---- L1:规范化工具 ----
|
|
64
|
+
- {name: equity.fmt_holder10, cn: 十大股东行规范化, layer: L1}
|
|
65
|
+
- {name: equity.fmt_holdernum, cn: 股东户数规范化, layer: L1}
|
|
66
|
+
- {name: equity.fmt_pledge_detail, cn: 质押明细规范化, layer: L1}
|
|
67
|
+
- {name: equity.fmt_pledge_summary, cn: 质押比例规范化, layer: L1}
|
|
68
|
+
- {name: equity.fmt_pledge_market, cn: 市场质押规范化, layer: L1}
|
|
69
|
+
- {name: equity.fmt_pledge_industry, cn: 行业质押规范化, layer: L1}
|
|
70
|
+
- {name: equity.fmt_pledge_org, cn: 质押机构分布规范化, layer: L1}
|
|
71
|
+
- {name: equity.fmt_institution_detail, cn: 机构明细规范化, layer: L1}
|
|
72
|
+
- {name: equity.fmt_institution_summary, cn: 机构占比规范化, layer: L1}
|
|
73
|
+
- {name: equity.fmt_hgt, cn: 沪港通行规范化, layer: L1}
|
|
74
|
+
- {name: equity.fmt_national_team, cn: 国家队行规范化, layer: L1}
|
|
75
|
+
- {name: equity.fmt_release, cn: 解禁行规范化, layer: L1}
|
|
76
|
+
- {name: equity.fmt_buyback_plan, cn: 回购方案行规范化, layer: L1}
|
|
77
|
+
- {name: equity.fmt_buyback_detail, cn: 回购明细规范化, layer: L1}
|
|
78
|
+
- {name: equity.fmt_reorg, cn: 重组行规范化, layer: L1}
|
|
79
|
+
- {name: equity.fmt_related_trade, cn: 关联交易行规范化, layer: L1}
|
|
80
|
+
- {name: equity.fmt_concert, cn: 一致行动人行规范化, layer: L1}
|
|
81
|
+
- {name: equity.fmt_guarantee, cn: 担保行规范化, layer: L1}
|
|
82
|
+
- {name: equity.fmt_litigation, cn: 诉讼行规范化, layer: L1}
|
|
83
|
+
- {name: equity.fmt_violation, cn: 处罚行规范化, layer: L1}
|
|
84
|
+
- {name: equity.fmt_executives, cn: 高管行规范化, layer: L1}
|
|
85
|
+
- {name: equity.fmt_exec_change, cn: 增减持行规范化, layer: L1}
|
|
86
|
+
- {name: equity.fmt_capital_change, cn: 股本行规范化, layer: L1}
|
|
87
|
+
- {name: equity.fmt_lines, cn: 规范化行转文本, layer: L1}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
id: disc.bonus
|
|
2
|
+
version: 1.3.0
|
|
3
|
+
cn: 分红
|
|
4
|
+
kind: raw
|
|
5
|
+
category: disclosure
|
|
6
|
+
priority: P0
|
|
7
|
+
description: 分红历史明细(预案/实施)、每股股利、窗口合计。列表与 DPS 为披露原值;
|
|
8
|
+
股息率/派息率 TTM 快照及全市场筛选为计算派生(函数级标注性质)。
|
|
9
|
+
data_origin: [公司公告披露]
|
|
10
|
+
units:
|
|
11
|
+
dps: 元/股
|
|
12
|
+
total: 元(窗口合计金额)
|
|
13
|
+
window: '如 "3y" / "5y" 窗口字符串'
|
|
14
|
+
rate: 小数(0.03 = 3%)
|
|
15
|
+
requires: {path: sys/bonus/init.xs, preloaded: true}
|
|
16
|
+
notes:
|
|
17
|
+
- '已知问题:最新年度/中期分红记录的 net_profit/payout_ratio 列可能回填滞后(暂为 0),
|
|
18
|
+
仅影响 history 明细展示;筛选/快照走 TTM 派息指标($BONUS_TTM_RATE_LAST)不受影响。
|
|
19
|
+
screen_quality 默认「精品」窗口=股息率>3% 且派息率 30%–70%,出界判 False 属设计'
|
|
20
|
+
functions:
|
|
21
|
+
- name: bonus.query_list
|
|
22
|
+
cn: 分红历史明细
|
|
23
|
+
kind: raw
|
|
24
|
+
layer: L0
|
|
25
|
+
params:
|
|
26
|
+
- {name: sym, type: string, required: true, desc: 6 位裸码}
|
|
27
|
+
- {name: limit, type: int, required: false, desc: 条数}
|
|
28
|
+
returns: {desc: 'ARR · 分红行(announce/ex_date/pay/dps/total/content/sas/payout_ratio)'}
|
|
29
|
+
example: 'bonus.query_list("600519", 20)'
|
|
30
|
+
normalize_with: bonus.fmt_maps
|
|
31
|
+
notes: [输出为规范化的扁平行(announce/ex_date/pay/dps/total/content/sas/payout_ratio),不再嵌套 props]
|
|
32
|
+
- name: bonus.query_last
|
|
33
|
+
cn: 最近一次分红
|
|
34
|
+
kind: raw
|
|
35
|
+
layer: L0
|
|
36
|
+
params:
|
|
37
|
+
- {name: sym, type: string, required: true}
|
|
38
|
+
returns: {desc: 分红行 MAP 或 nil}
|
|
39
|
+
example: 'bonus.query_last("600519")'
|
|
40
|
+
- name: bonus.query_at_sas
|
|
41
|
+
cn: 指定报告期分红
|
|
42
|
+
kind: raw
|
|
43
|
+
layer: L0
|
|
44
|
+
params:
|
|
45
|
+
- {name: sym, type: string, required: true}
|
|
46
|
+
- {name: sas, type: string, required: true, desc: '报告期,如 "2024-Q4"'}
|
|
47
|
+
returns: {desc: 分红行 MAP 或 nil}
|
|
48
|
+
example: 'bonus.query_at_sas("600519", "2024-Q4")'
|
|
49
|
+
- name: bonus.dps_rpt
|
|
50
|
+
cn: 财报期每股分红
|
|
51
|
+
kind: raw
|
|
52
|
+
layer: L0
|
|
53
|
+
params:
|
|
54
|
+
- {name: sym, type: string, required: true}
|
|
55
|
+
returns: {desc: float · 财报期每股分红(元/股)}
|
|
56
|
+
example: 'bonus.dps_rpt("600519")'
|
|
57
|
+
- name: bonus.dps_rpt_asof
|
|
58
|
+
cn: 财报期每股分红(截至日)
|
|
59
|
+
kind: raw
|
|
60
|
+
layer: L0
|
|
61
|
+
params:
|
|
62
|
+
- {name: rows, type: array, required: true, desc: dps_rpt 结果}
|
|
63
|
+
- {name: asof, type: string, required: true, desc: 截至日期}
|
|
64
|
+
returns: {desc: 截至日的 DPS}
|
|
65
|
+
example: 'bonus.dps_rpt_asof(rows, "2025-06-30")'
|
|
66
|
+
- name: bonus.query_dps_window
|
|
67
|
+
cn: 窗口内每股股利合计
|
|
68
|
+
kind: computed
|
|
69
|
+
layer: L0
|
|
70
|
+
params:
|
|
71
|
+
- {name: sym, type: string, required: true}
|
|
72
|
+
- {name: window, type: string, required: true, desc: 窗口(如 3y)}
|
|
73
|
+
returns: {desc: float · 元/股}
|
|
74
|
+
example: 'bonus.query_dps_window("600519", "3y")'
|
|
75
|
+
- name: bonus.query_total_window
|
|
76
|
+
cn: 窗口内总分红
|
|
77
|
+
kind: computed
|
|
78
|
+
layer: L0
|
|
79
|
+
params:
|
|
80
|
+
- {name: sym, type: string, required: true}
|
|
81
|
+
- {name: window, type: string, required: true}
|
|
82
|
+
returns: {desc: float · 元}
|
|
83
|
+
example: 'bonus.query_total_window("600519", "3y")'
|
|
84
|
+
- name: bonus.query_count_window
|
|
85
|
+
cn: 窗口内分红次数
|
|
86
|
+
kind: computed
|
|
87
|
+
layer: L0
|
|
88
|
+
params:
|
|
89
|
+
- {name: sym, type: string, required: true}
|
|
90
|
+
- {name: window, type: string, required: true}
|
|
91
|
+
returns: {desc: int}
|
|
92
|
+
example: 'bonus.query_count_window("600519", "5y")'
|
|
93
|
+
notes: ['已知问题:上游 count 聚合当前恒为 0(同窗口 sum 正常),待上游修复;SDK 的 window_stats 暂不返回该值']
|
|
94
|
+
- name: bonus.query_valid
|
|
95
|
+
cn: 有效分红序列(过滤无效行)
|
|
96
|
+
kind: raw
|
|
97
|
+
layer: L0
|
|
98
|
+
params:
|
|
99
|
+
- {name: sym, type: string, required: true}
|
|
100
|
+
- {name: limit, type: int, required: false}
|
|
101
|
+
returns: {desc: ARR · 分红行}
|
|
102
|
+
example: 'bonus.query_valid("600519", 20)'
|
|
103
|
+
- name: bonus.snapshot
|
|
104
|
+
cn: 股息快照
|
|
105
|
+
kind: computed
|
|
106
|
+
layer: L0
|
|
107
|
+
params:
|
|
108
|
+
- {name: sym, type: string, required: true}
|
|
109
|
+
returns: {desc: MAP · 股息/率快照}
|
|
110
|
+
example: 'bonus.snapshot("600519")'
|
|
111
|
+
- name: bonus.snapshot_yield_ttm
|
|
112
|
+
cn: LTM 股息率
|
|
113
|
+
kind: computed
|
|
114
|
+
layer: L0
|
|
115
|
+
params:
|
|
116
|
+
- {name: sym, type: string, required: true}
|
|
117
|
+
returns: {desc: 'float · 小数(0.0396 = 3.96%)'}
|
|
118
|
+
example: 'bonus.snapshot_yield_ttm("600519")'
|
|
119
|
+
notes: [股息率 = TTM 分红总额 / 最新市值;数值为小数口径]
|
|
120
|
+
- name: bonus.snapshot_payout_ttm
|
|
121
|
+
cn: TTM 派息率
|
|
122
|
+
kind: computed
|
|
123
|
+
layer: L0
|
|
124
|
+
params:
|
|
125
|
+
- {name: sym, type: string, required: true}
|
|
126
|
+
returns: {desc: 'float · 小数(0.799 = 79.9%)'}
|
|
127
|
+
example: 'bonus.snapshot_payout_ttm("600519")'
|
|
128
|
+
notes: [派息率 = TTM 分红 / 归母净利 TTM;数值为小数口径]
|
|
129
|
+
# ---- L1:单票质量筛选(computed)----
|
|
130
|
+
- {name: bonus.screen_active, cn: 近年有分红, kind: computed, layer: L1}
|
|
131
|
+
- {name: bonus.screen_has_dividend, cn: 有分红记录, kind: computed, layer: L1}
|
|
132
|
+
- {name: bonus.screen_high_yield, cn: 高股息, kind: computed, layer: L1}
|
|
133
|
+
- {name: bonus.screen_ample_payout, cn: 慷慨派息, kind: computed, layer: L1}
|
|
134
|
+
- {name: bonus.screen_danger_payout, cn: 派息不可持续, kind: computed, layer: L1}
|
|
135
|
+
- {name: bonus.screen_quality, cn: 分红质量优, kind: computed, layer: L1}
|
|
136
|
+
- {name: bonus.screen_stable_yield, cn: 股息稳定, kind: computed, layer: L1}
|
|
137
|
+
- {name: bonus.screen_improving_yield, cn: 股息改善, kind: computed, layer: L1}
|
|
138
|
+
- {name: bonus.screen_trend_ok, cn: 分红趋势健康, kind: computed, layer: L1}
|
|
139
|
+
- {name: bonus.screen_declining_yield, cn: 股息下滑, kind: computed, layer: L1}
|
|
140
|
+
- {name: bonus.screen_undervalued_yield, cn: 低估+高股息, kind: computed, layer: L1}
|
|
141
|
+
# ---- L1:全市场筛选积木(computed,内部用途)----
|
|
142
|
+
- {name: bonus.index_where_active, cn: where·有分红, kind: computed, layer: L1}
|
|
143
|
+
- {name: bonus.index_where_no_dividend, cn: where·无分红, kind: computed, layer: L1}
|
|
144
|
+
- {name: bonus.index_where_has_dividend, cn: where·有记录, kind: computed, layer: L1}
|
|
145
|
+
- {name: bonus.index_where_high_yield, cn: where·高股息, kind: computed, layer: L1}
|
|
146
|
+
- {name: bonus.index_where_high_yield_5, cn: where·连续5年高股息, kind: computed, layer: L1}
|
|
147
|
+
- {name: bonus.index_where_ample_payout, cn: where·慷慨派息, kind: computed, layer: L1}
|
|
148
|
+
- {name: bonus.index_where_danger_payout, cn: where·派息危险, kind: computed, layer: L1}
|
|
149
|
+
- {name: bonus.index_where_quality, cn: where·质量, kind: computed, layer: L1}
|
|
150
|
+
- {name: bonus.index_where_stable, cn: where·稳定, kind: computed, layer: L1}
|
|
151
|
+
- {name: bonus.index_where_improving, cn: where·改善, kind: computed, layer: L1}
|
|
152
|
+
- {name: bonus.index_where_declining, cn: where·下滑, kind: computed, layer: L1}
|
|
153
|
+
- {name: bonus.index_where_trend_up, cn: where·趋势向上, kind: computed, layer: L1}
|
|
154
|
+
- {name: bonus.index_where_undervalued, cn: where·低估, kind: computed, layer: L1}
|
|
155
|
+
- {name: bonus.index_yield_bin_expr, cn: 股息率分桶 where 表达式, kind: computed, layer: L1}
|
|
156
|
+
- {name: bonus.index_field_load, cn: 分红索引字段预加载, kind: computed, layer: L1}
|
|
157
|
+
- {name: bonus.index_field_load_analysis, cn: 分红分析字段预加载, kind: computed, layer: L1}
|
|
158
|
+
- {name: bonus.index_fields_basic, cn: 分红基础字段列表, kind: computed, layer: L1}
|
|
159
|
+
- {name: bonus.index_fields_analysis, cn: 分红分析字段列表, kind: computed, layer: L1}
|
|
160
|
+
# ---- L1:格式化(raw 传递)----
|
|
161
|
+
- name: bonus.fmt_maps
|
|
162
|
+
cn: 分红行规范化
|
|
163
|
+
kind: raw
|
|
164
|
+
layer: L1
|
|
165
|
+
returns:
|
|
166
|
+
desc: ARR · 规范化分红行
|
|
167
|
+
shape:
|
|
168
|
+
kind: array
|
|
169
|
+
cn: 规范化分红行列表
|
|
170
|
+
items:
|
|
171
|
+
kind: object
|
|
172
|
+
cn: 分红行
|
|
173
|
+
fields:
|
|
174
|
+
- {name: sas, type: string, cn: SAS, optional: true}
|
|
175
|
+
- {name: ex_date, type: string, cn: 除权日, optional: true}
|
|
176
|
+
- {name: ex_div, type: string, cn: 除权除息日, optional: true}
|
|
177
|
+
- {name: dps, type: float64, cn: 每股股利, optional: true}
|
|
178
|
+
- {name: total, type: float64, cn: 分红总额, optional: true}
|
|
179
|
+
- {name: ccy, type: string, cn: 货币, optional: true}
|
|
180
|
+
- {name: announce, type: string, cn: 公告日, optional: true}
|
|
181
|
+
- {name: pay, type: string, cn: 派息日, optional: true}
|
|
182
|
+
- {name: content, type: string, cn: 方案摘要, optional: true}
|
|
183
|
+
- {name: net_profit, type: float64, cn: 归母净利润, optional: true}
|
|
184
|
+
- {name: payout_ratio, type: float64, cn: 派息率, optional: true}
|
|
185
|
+
- {name: bonus.fmt_lines, cn: 分红文本行, kind: raw, layer: L1}
|
|
186
|
+
- {name: bonus.fmt_line, cn: 单条分红文本, kind: raw, layer: L1}
|
|
187
|
+
- {name: bonus.fmt_snapshot_line, cn: 股息快照一行文本, kind: raw, layer: L1}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
id: disc.events
|
|
2
|
+
version: 1.1.0
|
|
3
|
+
cn: 业绩披露事件
|
|
4
|
+
kind: raw
|
|
5
|
+
category: disclosure
|
|
6
|
+
priority: P0
|
|
7
|
+
description: 业绩预告(yjyg:净利/扣非/营收区间+同比+修正轨迹)、业绩快报(yjkb)、
|
|
8
|
+
财报预约披露日历(disclosure)。均为交易所披露文件的结构化直采。
|
|
9
|
+
data_origin: [交易所披露]
|
|
10
|
+
units:
|
|
11
|
+
money: 元(预告/快报区间与单期金额)
|
|
12
|
+
yoy: 小数(0.1467 = 14.67%;SDK 自动由脚本的百分数口径换算)
|
|
13
|
+
date: YYYY-MM-DD
|
|
14
|
+
requires: {path: sys/forecast/init.xs, preloaded: false}
|
|
15
|
+
notes:
|
|
16
|
+
- 预告为区间(下限/上限);快报为披露的近似单值——两者在报告期正式报表发布前使用
|
|
17
|
+
- 脚本原生 np_amp_* / rev_amp_* / np_yoy / rev_yoy / roe 为百分数;SDK 已换算为
|
|
18
|
+
小数并守护范围;_units="native"/_raw=True 取脚本原值
|
|
19
|
+
functions:
|
|
20
|
+
- name: forecast.yjyg_rows
|
|
21
|
+
cn: 业绩预告历史
|
|
22
|
+
kind: raw
|
|
23
|
+
layer: L0
|
|
24
|
+
params:
|
|
25
|
+
- {name: sym, type: string, required: true, desc: 6 位裸码}
|
|
26
|
+
- {name: limit, type: int, required: false, desc: 条数}
|
|
27
|
+
returns: {desc: ARR · 预告行(报告期/类型/净利与扣非区间/同比/修正轨迹)}
|
|
28
|
+
example: 'forecast.yjyg_rows("688008", 8)'
|
|
29
|
+
units: {np_amp_lower: percent, np_amp_upper: percent, rev_amp_lower: percent, rev_amp_upper: percent}
|
|
30
|
+
ranges: {np_amp_lower: [-1, 1000], np_amp_upper: [-1, 1000], rev_amp_lower: [-1, 1000], rev_amp_upper: [-1, 1000]}
|
|
31
|
+
- name: forecast.yjyg_latest
|
|
32
|
+
cn: 最新业绩预告
|
|
33
|
+
kind: raw
|
|
34
|
+
layer: L0
|
|
35
|
+
params:
|
|
36
|
+
- {name: sym, type: string, required: true}
|
|
37
|
+
returns: {desc: 预告行 MAP 或 nil}
|
|
38
|
+
example: 'forecast.yjyg_latest("688008")'
|
|
39
|
+
units: {np_amp_lower: percent, np_amp_upper: percent, rev_amp_lower: percent, rev_amp_upper: percent}
|
|
40
|
+
ranges: {np_amp_lower: [-1, 1000], np_amp_upper: [-1, 1000], rev_amp_lower: [-1, 1000], rev_amp_upper: [-1, 1000]}
|
|
41
|
+
- name: forecast.yjkb_rows
|
|
42
|
+
cn: 业绩快报历史
|
|
43
|
+
kind: raw
|
|
44
|
+
layer: L0
|
|
45
|
+
params:
|
|
46
|
+
- {name: sym, type: string, required: true}
|
|
47
|
+
- {name: limit, type: int, required: false}
|
|
48
|
+
returns: {desc: ARR · 快报行}
|
|
49
|
+
example: 'forecast.yjkb_rows("603092", 8)'
|
|
50
|
+
units: {np_yoy: percent, rev_yoy: percent, roe: percent}
|
|
51
|
+
ranges: {np_yoy: [-1, 1000], rev_yoy: [-1, 1000], roe: [-2, 5]}
|
|
52
|
+
- name: forecast.yjkb_latest
|
|
53
|
+
cn: 最新业绩快报
|
|
54
|
+
kind: raw
|
|
55
|
+
layer: L0
|
|
56
|
+
params:
|
|
57
|
+
- {name: sym, type: string, required: true}
|
|
58
|
+
returns: {desc: 快报行 MAP 或 nil}
|
|
59
|
+
example: 'forecast.yjkb_latest("603092")'
|
|
60
|
+
units: {np_yoy: percent, rev_yoy: percent, roe: percent}
|
|
61
|
+
ranges: {np_yoy: [-1, 1000], rev_yoy: [-1, 1000], roe: [-2, 5]}
|
|
62
|
+
- name: forecast.disclosure_rows
|
|
63
|
+
cn: 财报预约披露历史
|
|
64
|
+
kind: raw
|
|
65
|
+
layer: L0
|
|
66
|
+
params:
|
|
67
|
+
- {name: sym, type: string, required: true}
|
|
68
|
+
- {name: limit, type: int, required: false}
|
|
69
|
+
returns: {desc: ARR · 预约披露行(报告期/计划披露日)}
|
|
70
|
+
example: 'forecast.disclosure_rows("600519", 8)'
|
|
71
|
+
- name: forecast.disclosure_next
|
|
72
|
+
cn: 下次财报披露
|
|
73
|
+
kind: raw
|
|
74
|
+
layer: L0
|
|
75
|
+
params:
|
|
76
|
+
- {name: sym, type: string, required: true}
|
|
77
|
+
returns: {desc: 预约披露行 MAP 或 nil}
|
|
78
|
+
example: 'forecast.disclosure_next("600519")'
|
|
79
|
+
- name: forecast.snapshot
|
|
80
|
+
cn: 业绩披露快照(预告+快报+日历合并视图)
|
|
81
|
+
kind: raw
|
|
82
|
+
layer: L0
|
|
83
|
+
params:
|
|
84
|
+
- {name: sym, type: string, required: true}
|
|
85
|
+
returns: {desc: MAP · 快照}
|
|
86
|
+
example: 'forecast.snapshot("688008")'
|
|
87
|
+
units: {np_amp_lower: percent, np_amp_upper: percent, rev_amp_lower: percent, rev_amp_upper: percent, np_yoy: percent, rev_yoy: percent, roe: percent}
|
|
88
|
+
ranges: {np_amp_lower: [-1, 1000], np_amp_upper: [-1, 1000], rev_amp_lower: [-1, 1000], rev_amp_upper: [-1, 1000], np_yoy: [-1, 1000], rev_yoy: [-1, 1000], roe: [-2, 5]}
|
|
89
|
+
# ---- L1:格式化 ----
|
|
90
|
+
- {name: forecast.fmt_line, cn: 预告文本行, kind: raw, layer: L1}
|
|
91
|
+
- {name: forecast.fmt_lines, cn: 预告文本行列表, kind: raw, layer: L1}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
id: disc.filings
|
|
2
|
+
version: 1.0.0
|
|
3
|
+
cn: 定期报告清单
|
|
4
|
+
kind: raw
|
|
5
|
+
category: disclosure
|
|
6
|
+
priority: P0
|
|
7
|
+
description: 年报/半年报/季报清单(报告期、标题、PDF 链接)。与 fund.statements
|
|
8
|
+
(结构化数字)分工:清单与原文链接走本域,结构化科目数字走三表。
|
|
9
|
+
data_origin: [交易所披露]
|
|
10
|
+
units:
|
|
11
|
+
date: YYYY-MM-DD
|
|
12
|
+
requires: {path: sys/filings/init.xs, preloaded: true}
|
|
13
|
+
notes:
|
|
14
|
+
- 'type_key 取值:all | annual(年报) | semi(半年报) | quarter(季报)'
|
|
15
|
+
functions:
|
|
16
|
+
- name: filings.query
|
|
17
|
+
cn: 定期报告列表
|
|
18
|
+
kind: raw
|
|
19
|
+
layer: L0
|
|
20
|
+
params:
|
|
21
|
+
- {name: sym, type: string, required: true, desc: 6 位裸码}
|
|
22
|
+
- {name: type_key, type: string, required: false, default: all, enum: [all, annual, semi, quarter]}
|
|
23
|
+
- {name: limit, type: int, required: false}
|
|
24
|
+
returns: {desc: ARR · 报告行(报告期/类型/标题/PDF 链接)}
|
|
25
|
+
example: 'filings.query("600519", "annual", 5)'
|
|
26
|
+
- name: filings.latest
|
|
27
|
+
cn: 最新一条定期报告
|
|
28
|
+
kind: raw
|
|
29
|
+
layer: L0
|
|
30
|
+
params:
|
|
31
|
+
- {name: sym, type: string, required: true}
|
|
32
|
+
- {name: type_key, type: string, required: false, default: all}
|
|
33
|
+
returns: {desc: 报告行 MAP 或 nil}
|
|
34
|
+
example: 'filings.latest("600519", "annual")'
|
|
35
|
+
# ---- L1:辅助 ----
|
|
36
|
+
- {name: filings.type_zh, cn: type_key 转中文, kind: raw, layer: L1}
|
|
37
|
+
- {name: filings.fmt_maps, cn: 报告行规范化列表, kind: raw, layer: L1}
|
|
38
|
+
- {name: filings.fmt_map, cn: 单条报告规范化, kind: raw, layer: L1}
|
|
39
|
+
- {name: filings.fmt_date_short, cn: 日期缩短 YYYY-MM-DD, kind: raw, layer: L1}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
id: disc.notice
|
|
2
|
+
version: 1.1.0
|
|
3
|
+
cn: 公告
|
|
4
|
+
kind: raw
|
|
5
|
+
category: disclosure
|
|
6
|
+
priority: P0
|
|
7
|
+
description: 公告检索(单票/日期/类别/区间)与公告信号(回购/减持/增持/股权激励证据行)。
|
|
8
|
+
公告标题与元数据为资讯源直采;signal_* 为窗口判定的薄计算(证据行仍为公告原值)。
|
|
9
|
+
data_origin: [披露公告库(含港股)]
|
|
10
|
+
units:
|
|
11
|
+
window: '枚举 "7d"|"1m"|"3m"|"6m"|"1y"|"3y"|"5y" 或天数整数'
|
|
12
|
+
date: YYYY-MM-DD
|
|
13
|
+
requires: {path: sys/notice/init.xs, preloaded: true}
|
|
14
|
+
notes:
|
|
15
|
+
- type_regex 按公告标题/类型正则过滤;market 缺省 cn,港股自动路由
|
|
16
|
+
functions:
|
|
17
|
+
- name: notice.query_by_symbol
|
|
18
|
+
cn: 单票公告列表
|
|
19
|
+
kind: raw
|
|
20
|
+
layer: L0
|
|
21
|
+
params:
|
|
22
|
+
- {name: sym, type: string, required: true, desc: 6 位裸码(港股 5 位)}
|
|
23
|
+
- {name: window, type: string, required: false, desc: 时间窗}
|
|
24
|
+
- {name: type_regex, type: string, required: false, desc: 类型正则}
|
|
25
|
+
- {name: limit, type: int, required: false}
|
|
26
|
+
returns: {desc: ARR · 公告行(date/title/type/url/pdf_url)}
|
|
27
|
+
example: 'notice.query_by_symbol("600519", "3m", "", 20)'
|
|
28
|
+
normalize_with: notice.fmt_maps
|
|
29
|
+
- name: notice.query_recent
|
|
30
|
+
cn: 近期公告(全市场)
|
|
31
|
+
kind: raw
|
|
32
|
+
layer: L0
|
|
33
|
+
params:
|
|
34
|
+
- {name: window, type: string, required: false}
|
|
35
|
+
- {name: type_regex, type: string, required: false}
|
|
36
|
+
- {name: limit, type: int, required: false}
|
|
37
|
+
- {name: market, type: string, required: false, desc: 缺省 cn}
|
|
38
|
+
returns: {desc: ARR · 公告行(date/title/type/url/pdf_url)}
|
|
39
|
+
example: 'notice.query_recent("7d", "", 50)'
|
|
40
|
+
normalize_with: notice.fmt_maps
|
|
41
|
+
- name: notice.query_by_category
|
|
42
|
+
cn: 按类别查公告
|
|
43
|
+
kind: raw
|
|
44
|
+
layer: L0
|
|
45
|
+
params:
|
|
46
|
+
- {name: category, type: string, required: true}
|
|
47
|
+
- {name: window, type: string, required: false}
|
|
48
|
+
- {name: limit, type: int, required: false}
|
|
49
|
+
- {name: market, type: string, required: false}
|
|
50
|
+
returns: {desc: ARR · 公告行(date/title/type/url/pdf_url)}
|
|
51
|
+
example: 'notice.query_by_category("回购", "1m", 20)'
|
|
52
|
+
normalize_with: notice.fmt_maps
|
|
53
|
+
- name: notice.query_on_date
|
|
54
|
+
cn: 指定日期公告
|
|
55
|
+
kind: raw
|
|
56
|
+
layer: L0
|
|
57
|
+
params:
|
|
58
|
+
- {name: date, type: string, required: true}
|
|
59
|
+
- {name: type_regex, type: string, required: false}
|
|
60
|
+
- {name: limit, type: int, required: false}
|
|
61
|
+
- {name: market, type: string, required: false}
|
|
62
|
+
returns: {desc: ARR · 公告行(date/title/type/url/pdf_url)}
|
|
63
|
+
example: 'notice.query_on_date("2026-09-30")'
|
|
64
|
+
normalize_with: notice.fmt_maps
|
|
65
|
+
- name: notice.query_find
|
|
66
|
+
cn: 按日期区间查公告
|
|
67
|
+
kind: raw
|
|
68
|
+
layer: L0
|
|
69
|
+
params:
|
|
70
|
+
- {name: from_date, type: string, required: true}
|
|
71
|
+
- {name: to_date, type: string, required: true}
|
|
72
|
+
- {name: type_regex, type: string, required: false}
|
|
73
|
+
- {name: stock_code, type: string, required: false}
|
|
74
|
+
- {name: limit, type: int, required: false}
|
|
75
|
+
- {name: market, type: string, required: false}
|
|
76
|
+
returns: {desc: ARR · 公告行(date/title/type/url/pdf_url)}
|
|
77
|
+
example: 'notice.query_find("2026-01-01", "2026-03-31", "业绩", "", 50)'
|
|
78
|
+
normalize_with: notice.fmt_maps
|
|
79
|
+
# ---- L0:信号(窗口判定薄计算,证据行=公告原值)----
|
|
80
|
+
- name: notice.signal_has_buyback
|
|
81
|
+
cn: 窗口内是否有回购公告
|
|
82
|
+
kind: computed
|
|
83
|
+
layer: L0
|
|
84
|
+
params:
|
|
85
|
+
- {name: sym, type: string, required: true}
|
|
86
|
+
- {name: window, type: string, required: false}
|
|
87
|
+
returns: {desc: bool}
|
|
88
|
+
example: 'notice.signal_has_buyback("600519", "6m")'
|
|
89
|
+
- name: notice.signal_has_reduction
|
|
90
|
+
cn: 窗口内是否有减持公告
|
|
91
|
+
kind: computed
|
|
92
|
+
layer: L0
|
|
93
|
+
params:
|
|
94
|
+
- {name: sym, type: string, required: true}
|
|
95
|
+
- {name: window, type: string, required: false}
|
|
96
|
+
returns: {desc: bool}
|
|
97
|
+
example: 'notice.signal_has_reduction("600519", "6m")'
|
|
98
|
+
- name: notice.signal_has_insider_buy
|
|
99
|
+
cn: 窗口内是否有增持公告
|
|
100
|
+
kind: computed
|
|
101
|
+
layer: L0
|
|
102
|
+
params:
|
|
103
|
+
- {name: sym, type: string, required: true}
|
|
104
|
+
- {name: window, type: string, required: false}
|
|
105
|
+
returns: {desc: bool}
|
|
106
|
+
example: 'notice.signal_has_insider_buy("600519", "6m")'
|
|
107
|
+
- name: notice.signal_has_equity_incentive
|
|
108
|
+
cn: 窗口内是否有股权激励公告
|
|
109
|
+
kind: computed
|
|
110
|
+
layer: L0
|
|
111
|
+
params:
|
|
112
|
+
- {name: sym, type: string, required: true}
|
|
113
|
+
- {name: window, type: string, required: false}
|
|
114
|
+
returns: {desc: bool}
|
|
115
|
+
example: 'notice.signal_has_equity_incentive("600519", "1y")'
|
|
116
|
+
- name: notice.signal_evidence_rows
|
|
117
|
+
cn: 信号证据(原始公告行)
|
|
118
|
+
kind: raw
|
|
119
|
+
layer: L0
|
|
120
|
+
params:
|
|
121
|
+
- {name: sym, type: string, required: true}
|
|
122
|
+
- {name: type_regex, type: string, required: true}
|
|
123
|
+
- {name: window, type: string, required: false}
|
|
124
|
+
- {name: lim, type: int, required: false}
|
|
125
|
+
returns: {desc: ARR · 公告行}
|
|
126
|
+
example: 'notice.signal_evidence_rows("600519", "回购", "1y", 10)'
|
|
127
|
+
- name: notice.signal_evidence_buyback
|
|
128
|
+
cn: 回购证据(规范化行)
|
|
129
|
+
kind: computed
|
|
130
|
+
layer: L0
|
|
131
|
+
params:
|
|
132
|
+
- {name: sym, type: string, required: true}
|
|
133
|
+
- {name: window, type: string, required: false}
|
|
134
|
+
returns: {desc: ARR · 规范化证据行}
|
|
135
|
+
example: 'notice.signal_evidence_buyback("600519", "1y")'
|
|
136
|
+
- name: notice.signal_evidence_reduction
|
|
137
|
+
cn: 减持证据(规范化行)
|
|
138
|
+
kind: computed
|
|
139
|
+
layer: L0
|
|
140
|
+
params:
|
|
141
|
+
- {name: sym, type: string, required: true}
|
|
142
|
+
- {name: window, type: string, required: false}
|
|
143
|
+
returns: {desc: ARR · 规范化证据行}
|
|
144
|
+
example: 'notice.signal_evidence_reduction("600519", "1y")'
|
|
145
|
+
# ---- L1:通用信号与检索辅助 ----
|
|
146
|
+
- {name: notice.signal_has, cn: 窗口内是否匹配类型正则, kind: computed, layer: L1}
|
|
147
|
+
- {name: notice.signal_has_category, cn: 窗口内是否有指定类别, kind: computed, layer: L1}
|
|
148
|
+
- {name: notice.signal_no_reduction, cn: 窗口内是否无减持, kind: computed, layer: L1}
|
|
149
|
+
- {name: notice.signal_evidence, cn: 信号证据(规范化), kind: computed, layer: L1}
|
|
150
|
+
- {name: notice.query_symbols_on_date, cn: 指定日期出现公告的代码列表, kind: raw, layer: L1}
|
|
151
|
+
- {name: notice.query_stats_recent, cn: 近期公告类别计数, kind: raw, layer: L1}
|
|
152
|
+
- {name: notice.query_build, cn: 构建公告 Mongo filter, kind: raw, layer: L1, status: internal}
|
|
153
|
+
- {name: notice.query_build_visible, cn: 构建可见日公告 filter, kind: raw, layer: L1, status: internal}
|
|
154
|
+
- {name: notice.query_date_range, cn: 日期区间条件, kind: raw, layer: L1, status: internal}
|
|
155
|
+
- {name: notice.query_ts_range, cn: 入库时间区间条件, kind: raw, layer: L1, status: internal}
|
|
156
|
+
# ---- L1:格式化 ----
|
|
157
|
+
- {name: notice.fmt_maps, cn: 公告行规范化, kind: raw, layer: L1}
|
|
158
|
+
- {name: notice.fmt_lines, cn: 公告文本行, kind: raw, layer: L1}
|
|
159
|
+
- {name: notice.fmt_line, cn: 单条公告文本, kind: raw, layer: L1}
|
|
160
|
+
- {name: notice.fmt_count_by_type, cn: 按类型计数, kind: raw, layer: L1}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
id: disc.workout
|
|
2
|
+
version: 1.0.0
|
|
3
|
+
cn: 契约套利
|
|
4
|
+
kind: raw
|
|
5
|
+
category: disclosure
|
|
6
|
+
priority: P2
|
|
7
|
+
description: 契约套利条款事件——要约收购/换股吸收合并/现金选择权等(披露原文提取),
|
|
8
|
+
提供进行中看板与单票条款查询。同业数据商暂无对应接口,属平台独有面。
|
|
9
|
+
data_origin: [披露原文提取, 平台数据服务]
|
|
10
|
+
units:
|
|
11
|
+
price: 元(公告对价/现价)
|
|
12
|
+
requires: {path: sys/workout/init.xs, preloaded: false}
|
|
13
|
+
notes:
|
|
14
|
+
- 'board() 返回 {as_of, deals, quotes} 进行中看板;query(sym) 返回单票规范化条款行'
|
|
15
|
+
- '现价 < 公告对价 的折价窗口由调用方自行判定,SDK 不内置收益测算(算法放工具仓)'
|
|
16
|
+
functions:
|
|
17
|
+
- {name: workout.board, cn: 进行中契约套利看板, layer: L0}
|
|
18
|
+
- {name: workout.query, cn: 单票契约套利条款, layer: L0}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
id: fund.estimates
|
|
2
|
+
version: 1.1.0
|
|
3
|
+
cn: 盈利预测与研报
|
|
4
|
+
kind: raw
|
|
5
|
+
category: fundamentals
|
|
6
|
+
priority: P1
|
|
7
|
+
description: 卖方研究数据——机构盈利预测(逐年 EPS/PE,A=实际 E=预测)、预测明细
|
|
8
|
+
(机构/研究员/归母净利/评级)、评级统计(综合评级与买卖家数按窗口)、个股研报列表。
|
|
9
|
+
金额=元、EPS=元/股、PE=倍。
|
|
10
|
+
data_origin: [券商研究披露, 平台数据服务]
|
|
11
|
+
units:
|
|
12
|
+
eps: 元/股
|
|
13
|
+
money: 元(归母净利润)
|
|
14
|
+
pe: 倍(预测市盈率)
|
|
15
|
+
requires: {path: sys/estimates/init.xs, preloaded: true}
|
|
16
|
+
notes:
|
|
17
|
+
- 'year_mark A=实际值 E=预测值;YEAR1..YEAR4 为预测年份序列'
|
|
18
|
+
- '研报行含标题/机构/作者/行业/报告链接;研报正文不在接口范围'
|
|
19
|
+
functions:
|
|
20
|
+
- {name: estimates.query_forecast, cn: 机构盈利预测, layer: L0, normalize_with: estimates.fmt_maps, ranges: {eps1: [0, 1.0e+4], eps2: [0, 1.0e+4], eps3: [0, 1.0e+4], eps4: [0, 1.0e+4], pe1: [0, 1.0e+4], pe2: [0, 1.0e+4], pe3: [0, 1.0e+4], pe4: [0, 1.0e+4]}}
|
|
21
|
+
- {name: estimates.query_forecast_detail, cn: 盈利预测明细, layer: L0, normalize_with: estimates.fmt_maps, ranges: {eps1: [0, 1.0e+4], eps2: [0, 1.0e+4], eps3: [0, 1.0e+4], eps4: [0, 1.0e+4], pe1: [0, 1.0e+4], pe2: [0, 1.0e+4], pe3: [0, 1.0e+4], pe4: [0, 1.0e+4]}}
|
|
22
|
+
- {name: estimates.query_rating, cn: 评级统计, layer: L0, normalize_with: estimates.fmt_maps}
|
|
23
|
+
- {name: estimates.query_reports, cn: 个股研报, layer: L0, normalize_with: estimates.fmt_maps}
|
|
24
|
+
- {name: estimates.fmt_maps, cn: 预测行规范化, layer: L1}
|