diff --git a/docs/API_REFERENCE.md b/docs/API_REFERENCE.md
index 8cbe2d7..9e85320 100644
--- a/docs/API_REFERENCE.md
+++ b/docs/API_REFERENCE.md
@@ -6,7 +6,7 @@
| 指标 | 数量 |
|---|---:|
-| SDK 方法总数 | 200 |
+| SDK 方法总数 | 206 |
## 专题分布
@@ -14,7 +14,7 @@
| ftshare-doc 专题 | SDK 方法数 | API mixin 模块 | Endpoint 模块 |
|---|---:|---|---|
-| 股票数据 | 95 | `ftshare.apis.stock` | `ftshare.endpoints.stock` |
+| 股票数据 | 101 | `ftshare.apis.stock` | `ftshare.endpoints.stock` |
| 港股数据 | 14 | `ftshare.apis.hk` | `ftshare.endpoints.hk` |
| 美股数据 | 9 | `ftshare.apis.us` | `ftshare.endpoints.us` |
| 指数专题 | 10 | `ftshare.apis.index` | `ftshare.endpoints.index` |
@@ -83,6 +83,7 @@ df = market.baidu_financial_calendar(
| [`limit_up_pool_yesterday`](#api-limit-up-pool-yesterday) | 昨日涨停池 | `GET` | `api/v1/market/data/limit-up-pool-yesterday` | - | `昨日涨停池.md` |
| [`margin_trading_details`](#api-margin-trading-details) | 融资融券明细 | `GET` | `api/v1/market/data/margin-trading-details` | `date`, `page`, `page_size` | `融资融券明细.md` |
| [`margin_trading_details_paginated`](#api-margin-trading-details-paginated) | 融资融券明细分页 | `GET` | `api/v1/market/data/margin-trading-details` | `date`, `page`, `page_size` | `融资融券明细分页.md` |
+| [`namechange`](#api-namechange) | 股票曾用名 | `GET` | `api/v1/market/data/namechange` | `trade_code`, `start_date`, `end_date` | `股票曾用名.md` |
| [`northbound`](#api-northbound) | 北向资金交易 | `GET` | `api/v1/market/data/northbound` | `date` | `北向资金交易.md` |
| [`nth_trade_date`](#api-nth-trade-date) | 第N个交易日 | `GET` | `api/v1/market/data/time/get-nth-trade-date` | `n` | `第N个交易日.md` |
| [`performance_forecasts_paginated`](#api-performance-forecasts-paginated) | 业绩预告 | `GET` | `api/v1/market/data/finance/stock-performance-forecast` | `stock_code`, `year`, `report_type`, `page`, `page_size` | `业绩预告.md` |
@@ -93,8 +94,13 @@ df = market.baidu_financial_calendar(
| [`sh_hk_stock_connect_members`](#api-sh-hk-stock-connect-members) | 沪股通成份 | `GET` | `api/v1/market/data/sh-hk-stock-connect-members` | - | `沪股通成份.md` |
| [`southbound`](#api-southbound) | 南向资金交易 | `GET` | `api/v1/market/data/southbound` | `date` | `南向资金交易.md` |
| [`stk_ah_comparison`](#api-stk-ah-comparison) | AH股对比 | `GET` | `api/v1/market/data/hk/stk-ah-comparison` | `hk_code`, `ts_code`, `trade_date`, `start_date`, `end_date`, `page`, `page_size` | `AH股对比.md` |
+| [`stk_code_change`](#api-stk-code-change) | A股代码变更 | `GET` | `api/v1/market/data/stk-code-change` | `trade_code`, `start_date`, `end_date` | `A股代码变更.md` |
| [`stk_limit`](#api-stk-limit) | 涨跌停价 | `GET` | `api/v1/market/data/stk-limit` | `instrument_type`, `symbol`, `symbol_id`, `market_id`, `trade_date`, `start_date`, `end_date`, `page`, `page_size` | `涨跌停价.md` |
+| [`stk_manager_hold`](#api-stk-manager-hold) | 上市公司管理层持股 | `GET` | `api/v1/market/data/stk-manager-hold` | `trade_code`, `end_date` | `上市公司管理层持股.md` |
+| [`stk_manager_pay`](#api-stk-manager-pay) | 上市公司管理层薪酬 | `GET` | `api/v1/market/data/stk-manager-pay` | `trade_code`, `end_date` | `上市公司管理层薪酬.md` |
+| [`stk_managers`](#api-stk-managers) | 上市公司管理层 | `GET` | `api/v1/market/data/stk-managers` | `trade_code`, `candi_date`, `begin_date`, `end_date` | `上市公司管理层.md` |
| [`stk_premarket`](#api-stk-premarket) | 盘前数据 | `GET` | `api/v1/market/data/stk-premarket` | `ts_code`, `trade_date`, `start_date`, `end_date`, `page`, `page_size` | `盘前数据.md` |
+| [`stk_status_change`](#api-stk-status-change) | A股状态变更 | `GET` | `api/v1/market/data/stk-status-change` | `trade_code`, `change_date`, `change_type` | `A股状态变更.md` |
| [`stock_adjust_factor`](#api-stock-adjust-factor) | 股票复权因子 | `GET` | `api/v1/market/data/stock-adjust-factor` | `symbol`, `trade_date`, `start_date`, `end_date`, `offset`, `limit` | `股票复权因子.md` |
| [`stock_candlesticks`](#api-stock-candlesticks) | 股票K线 | `POST` | `api/v1/market/data/stock-candlesticks` | `symbol`, `interval_unit`, `interval_value`, `adjust_kind`, `since_ts_millis`, `until_ts_millis`, `limit` | `股票K线.md` |
| [`stock_candlesticks_batch`](#api-stock-candlesticks-batch) | 批量股票K线 | `POST` | `api/v1/market/data/stock-candlesticks/batch` | `symbols`, `interval_unit`, `interval_value`, `adjust_kind`, `since_ts_millis`, `until_ts_millis`, `limit` | `批量股票K线.md` |
@@ -1479,6 +1485,37 @@ Returns:
payloads when multi-page fetching is used with ``raw=True``.
```
+
namechange
+
+- 接口名称:股票曾用名
+- HTTP:`GET`
+- Path:`api/v1/market/data/namechange`
+- 参数:`trade_code`, `start_date`, `end_date`
+- 来源文档:`股票曾用名.md`
+- 原始接口:`get_namechange`
+
+```text
+股票曾用名.
+
+Endpoint: ``api/v1/market/data/namechange``.
+Method: ``GET``.
+Documented endpoint: ``get_namechange``.
+
+Args:
+ trade_code: 股票代码(带 .SZ/.SH 后缀),支持逗号分隔多个 (type: string; required: Y).
+ start_date: 过滤区间起始日期,``YYYYMMDD`` 格式 (type: string; required: N).
+ end_date: 过滤区间结束日期,``YYYYMMDD`` 格式;与 ``start_date`` 同时提供时须 ``start_date`` ≤ ``end_date`` (type: string; required: N).
+ raw: Return the decoded JSON payload without tabular extraction.
+ fields: Optional field list or comma-separated field string applied after extraction.
+ as_dataframe: Return a pandas ``DataFrame`` by default; set to ``False`` for Python rows.
+ **kwargs: Extra request parameters forwarded unchanged. Useful when the service adds parameters before the SDK is regenerated.
+
+Returns:
+ A pandas ``DataFrame`` by default, Python rows when
+ ``as_dataframe=False``, raw JSON when ``raw=True``, or raw page
+ payloads when multi-page fetching is used with ``raw=True``.
+```
+
nth_trade_date
- 接口名称:第N个交易日
@@ -1759,6 +1796,37 @@ Returns:
payloads when multi-page fetching is used with ``raw=True``.
```
+stk_code_change
+
+- 接口名称:A股代码变更
+- HTTP:`GET`
+- Path:`api/v1/market/data/stk-code-change`
+- 参数:`trade_code`, `start_date`, `end_date`
+- 来源文档:`A股代码变更.md`
+- 原始接口:`get_stk_code_change`
+
+```text
+A股代码变更.
+
+Endpoint: ``api/v1/market/data/stk-code-change``.
+Method: ``GET``.
+Documented endpoint: ``get_stk_code_change``.
+
+Args:
+ trade_code: 股票代码(带 .SZ/.SH 后缀),支持逗号分隔多个 (type: string; required: Y).
+ start_date: 过滤区间起始日期,``YYYYMMDD`` 格式 (type: string; required: N).
+ end_date: 过滤区间结束日期,``YYYYMMDD`` 格式;与 ``start_date`` 同时提供时须 ``start_date`` ≤ ``end_date`` (type: string; required: N).
+ raw: Return the decoded JSON payload without tabular extraction.
+ fields: Optional field list or comma-separated field string applied after extraction.
+ as_dataframe: Return a pandas ``DataFrame`` by default; set to ``False`` for Python rows.
+ **kwargs: Extra request parameters forwarded unchanged. Useful when the service adds parameters before the SDK is regenerated.
+
+Returns:
+ A pandas ``DataFrame`` by default, Python rows when
+ ``as_dataframe=False``, raw JSON when ``raw=True``, or raw page
+ payloads when multi-page fetching is used with ``raw=True``.
+```
+
stk_limit
- 接口名称:涨跌停价
@@ -1799,6 +1867,98 @@ Returns:
payloads when multi-page fetching is used with ``raw=True``.
```
+stk_manager_hold
+
+- 接口名称:上市公司管理层持股
+- HTTP:`GET`
+- Path:`api/v1/market/data/stk-manager-hold`
+- 参数:`trade_code`, `end_date`
+- 来源文档:`上市公司管理层持股.md`
+- 原始接口:`get_stk_manager_hold`
+
+```text
+上市公司管理层持股.
+
+Endpoint: ``api/v1/market/data/stk-manager-hold``.
+Method: ``GET``.
+Documented endpoint: ``get_stk_manager_hold``.
+
+Args:
+ trade_code: 股票代码(带 .SZ/.SH 后缀),支持逗号分隔多个 (type: string; required: Y).
+ end_date: 截止日期,精确匹配,``YYYYMMDD`` 格式 (type: string; required: N).
+ raw: Return the decoded JSON payload without tabular extraction.
+ fields: Optional field list or comma-separated field string applied after extraction.
+ as_dataframe: Return a pandas ``DataFrame`` by default; set to ``False`` for Python rows.
+ **kwargs: Extra request parameters forwarded unchanged. Useful when the service adds parameters before the SDK is regenerated.
+
+Returns:
+ A pandas ``DataFrame`` by default, Python rows when
+ ``as_dataframe=False``, raw JSON when ``raw=True``, or raw page
+ payloads when multi-page fetching is used with ``raw=True``.
+```
+
+stk_manager_pay
+
+- 接口名称:上市公司管理层薪酬
+- HTTP:`GET`
+- Path:`api/v1/market/data/stk-manager-pay`
+- 参数:`trade_code`, `end_date`
+- 来源文档:`上市公司管理层薪酬.md`
+- 原始接口:`get_stk_manager_pay`
+
+```text
+上市公司管理层薪酬.
+
+Endpoint: ``api/v1/market/data/stk-manager-pay``.
+Method: ``GET``.
+Documented endpoint: ``get_stk_manager_pay``.
+
+Args:
+ trade_code: 股票代码(带 .SZ/.SH 后缀),支持逗号分隔多个 (type: string; required: Y).
+ end_date: 截止日期,精确匹配,``YYYYMMDD`` 格式 (type: string; required: N).
+ raw: Return the decoded JSON payload without tabular extraction.
+ fields: Optional field list or comma-separated field string applied after extraction.
+ as_dataframe: Return a pandas ``DataFrame`` by default; set to ``False`` for Python rows.
+ **kwargs: Extra request parameters forwarded unchanged. Useful when the service adds parameters before the SDK is regenerated.
+
+Returns:
+ A pandas ``DataFrame`` by default, Python rows when
+ ``as_dataframe=False``, raw JSON when ``raw=True``, or raw page
+ payloads when multi-page fetching is used with ``raw=True``.
+```
+
+stk_managers
+
+- 接口名称:上市公司管理层
+- HTTP:`GET`
+- Path:`api/v1/market/data/stk-managers`
+- 参数:`trade_code`, `candi_date`, `begin_date`, `end_date`
+- 来源文档:`上市公司管理层.md`
+- 原始接口:`get_stk_managers`
+
+```text
+上市公司管理层.
+
+Endpoint: ``api/v1/market/data/stk-managers``.
+Method: ``GET``.
+Documented endpoint: ``get_stk_managers``.
+
+Args:
+ trade_code: 股票代码(带 .SZ/.SH 后缀),支持逗号分隔多个 (type: string; required: Y).
+ candi_date: 候选日期,精确匹配,``YYYYMMDD`` 格式 (type: string; required: N).
+ begin_date: 任职起始日过滤,``YYYYMMDD`` 格式 (type: string; required: N).
+ end_date: 任职截止日过滤,``YYYYMMDD`` 格式;与 ``begin_date`` 同时提供时须 ``begin_date`` ≤ ``end_date`` (type: string; required: N).
+ raw: Return the decoded JSON payload without tabular extraction.
+ fields: Optional field list or comma-separated field string applied after extraction.
+ as_dataframe: Return a pandas ``DataFrame`` by default; set to ``False`` for Python rows.
+ **kwargs: Extra request parameters forwarded unchanged. Useful when the service adds parameters before the SDK is regenerated.
+
+Returns:
+ A pandas ``DataFrame`` by default, Python rows when
+ ``as_dataframe=False``, raw JSON when ``raw=True``, or raw page
+ payloads when multi-page fetching is used with ``raw=True``.
+```
+
- 接口名称:盘前数据
@@ -1836,6 +1996,37 @@ Returns:
payloads when multi-page fetching is used with ``raw=True``.
```
+stk_status_change
+
+- 接口名称:A股状态变更
+- HTTP:`GET`
+- Path:`api/v1/market/data/stk-status-change`
+- 参数:`trade_code`, `change_date`, `change_type`
+- 来源文档:`A股状态变更.md`
+- 原始接口:`get_stk_status_change`
+
+```text
+A股状态变更.
+
+Endpoint: ``api/v1/market/data/stk-status-change``.
+Method: ``GET``.
+Documented endpoint: ``get_stk_status_change``.
+
+Args:
+ trade_code: 股票代码(带 .SZ/.SH 后缀),支持逗号分隔多个;不填表示不按代码过滤 (type: string; required: N).
+ change_date: 变更日期,精确过滤,``YYYYMMDD`` 格式 (type: string; required: N).
+ change_type: 变更类型,精确过滤,常见值如 ``上市``、``退市``、``暂停上市`` (type: string; required: N).
+ raw: Return the decoded JSON payload without tabular extraction.
+ fields: Optional field list or comma-separated field string applied after extraction.
+ as_dataframe: Return a pandas ``DataFrame`` by default; set to ``False`` for Python rows.
+ **kwargs: Extra request parameters forwarded unchanged. Useful when the service adds parameters before the SDK is regenerated.
+
+Returns:
+ A pandas ``DataFrame`` by default, Python rows when
+ ``as_dataframe=False``, raw JSON when ``raw=True``, or raw page
+ payloads when multi-page fetching is used with ``raw=True``.
+```
+
stock_adjust_factor
- 接口名称:股票复权因子
diff --git a/src/ftshare/apis/stock.py b/src/ftshare/apis/stock.py
index cb3b0d5..536ecba 100644
--- a/src/ftshare/apis/stock.py
+++ b/src/ftshare/apis/stock.py
@@ -1865,6 +1865,47 @@ def northbound(
**request_params,
)
+ def namechange(
+ self,
+ trade_code: Any | None = None,
+ start_date: Any | None = None,
+ end_date: Any | None = None,
+ *,
+ raw: bool = False,
+ fields: Sequence[str] | str | None = None,
+ as_dataframe: bool = True,
+ **kwargs: Any,
+ ) -> Any:
+ """股票曾用名.
+
+ Endpoint: ``api/v1/market/data/namechange``.
+ Method: ``GET``.
+ Documented endpoint: ``get_namechange``.
+
+ Args:
+ trade_code: 股票代码(带 .SZ/.SH 后缀),支持逗号分隔多个 (type: string; required: Y).
+ start_date: 过滤区间起始日期,``YYYYMMDD`` 格式 (type: string; required: N).
+ end_date: 过滤区间结束日期,``YYYYMMDD`` 格式;与 ``start_date`` 同时提供时须 ``start_date`` ≤ ``end_date`` (type: string; required: N).
+ raw: Return the decoded JSON payload without tabular extraction.
+ fields: Optional field list or comma-separated field string applied after extraction.
+ as_dataframe: Return a pandas ``DataFrame`` by default; set to ``False`` for Python rows.
+ **kwargs: Extra request parameters forwarded unchanged. Useful when the service adds parameters before the SDK is regenerated.
+
+ Returns:
+ A pandas ``DataFrame`` by default, Python rows when
+ ``as_dataframe=False``, raw JSON when ``raw=True``, or raw page
+ payloads when multi-page fetching is used with ``raw=True``.
+ """
+ request_params = {'trade_code': trade_code, 'start_date': start_date, 'end_date': end_date}
+ request_params.update(kwargs)
+ return self._call_endpoint(
+ 'namechange',
+ raw=raw,
+ fields=fields,
+ as_dataframe=as_dataframe,
+ **request_params,
+ )
+
def nth_trade_date(
self,
n: Any | None = None,
@@ -3035,6 +3076,47 @@ def risk_warning_stocks(
**request_params,
)
+ def stk_code_change(
+ self,
+ trade_code: Any | None = None,
+ start_date: Any | None = None,
+ end_date: Any | None = None,
+ *,
+ raw: bool = False,
+ fields: Sequence[str] | str | None = None,
+ as_dataframe: bool = True,
+ **kwargs: Any,
+ ) -> Any:
+ """A股代码变更.
+
+ Endpoint: ``api/v1/market/data/stk-code-change``.
+ Method: ``GET``.
+ Documented endpoint: ``get_stk_code_change``.
+
+ Args:
+ trade_code: 股票代码(带 .SZ/.SH 后缀),支持逗号分隔多个 (type: string; required: Y).
+ start_date: 过滤区间起始日期,``YYYYMMDD`` 格式 (type: string; required: N).
+ end_date: 过滤区间结束日期,``YYYYMMDD`` 格式;与 ``start_date`` 同时提供时须 ``start_date`` ≤ ``end_date`` (type: string; required: N).
+ raw: Return the decoded JSON payload without tabular extraction.
+ fields: Optional field list or comma-separated field string applied after extraction.
+ as_dataframe: Return a pandas ``DataFrame`` by default; set to ``False`` for Python rows.
+ **kwargs: Extra request parameters forwarded unchanged. Useful when the service adds parameters before the SDK is regenerated.
+
+ Returns:
+ A pandas ``DataFrame`` by default, Python rows when
+ ``as_dataframe=False``, raw JSON when ``raw=True``, or raw page
+ payloads when multi-page fetching is used with ``raw=True``.
+ """
+ request_params = {'trade_code': trade_code, 'start_date': start_date, 'end_date': end_date}
+ request_params.update(kwargs)
+ return self._call_endpoint(
+ 'stk_code_change',
+ raw=raw,
+ fields=fields,
+ as_dataframe=as_dataframe,
+ **request_params,
+ )
+
def stk_limit(
self,
instrument_type: Any | None = None,
@@ -3101,6 +3183,127 @@ def stk_limit(
**request_params,
)
+ def stk_manager_hold(
+ self,
+ trade_code: Any | None = None,
+ end_date: Any | None = None,
+ *,
+ raw: bool = False,
+ fields: Sequence[str] | str | None = None,
+ as_dataframe: bool = True,
+ **kwargs: Any,
+ ) -> Any:
+ """上市公司管理层持股.
+
+ Endpoint: ``api/v1/market/data/stk-manager-hold``.
+ Method: ``GET``.
+ Documented endpoint: ``get_stk_manager_hold``.
+
+ Args:
+ trade_code: 股票代码(带 .SZ/.SH 后缀),支持逗号分隔多个 (type: string; required: Y).
+ end_date: 截止日期,精确匹配,``YYYYMMDD`` 格式 (type: string; required: N).
+ raw: Return the decoded JSON payload without tabular extraction.
+ fields: Optional field list or comma-separated field string applied after extraction.
+ as_dataframe: Return a pandas ``DataFrame`` by default; set to ``False`` for Python rows.
+ **kwargs: Extra request parameters forwarded unchanged. Useful when the service adds parameters before the SDK is regenerated.
+
+ Returns:
+ A pandas ``DataFrame`` by default, Python rows when
+ ``as_dataframe=False``, raw JSON when ``raw=True``, or raw page
+ payloads when multi-page fetching is used with ``raw=True``.
+ """
+ request_params = {'trade_code': trade_code, 'end_date': end_date}
+ request_params.update(kwargs)
+ return self._call_endpoint(
+ 'stk_manager_hold',
+ raw=raw,
+ fields=fields,
+ as_dataframe=as_dataframe,
+ **request_params,
+ )
+
+ def stk_manager_pay(
+ self,
+ trade_code: Any | None = None,
+ end_date: Any | None = None,
+ *,
+ raw: bool = False,
+ fields: Sequence[str] | str | None = None,
+ as_dataframe: bool = True,
+ **kwargs: Any,
+ ) -> Any:
+ """上市公司管理层薪酬.
+
+ Endpoint: ``api/v1/market/data/stk-manager-pay``.
+ Method: ``GET``.
+ Documented endpoint: ``get_stk_manager_pay``.
+
+ Args:
+ trade_code: 股票代码(带 .SZ/.SH 后缀),支持逗号分隔多个 (type: string; required: Y).
+ end_date: 截止日期,精确匹配,``YYYYMMDD`` 格式 (type: string; required: N).
+ raw: Return the decoded JSON payload without tabular extraction.
+ fields: Optional field list or comma-separated field string applied after extraction.
+ as_dataframe: Return a pandas ``DataFrame`` by default; set to ``False`` for Python rows.
+ **kwargs: Extra request parameters forwarded unchanged. Useful when the service adds parameters before the SDK is regenerated.
+
+ Returns:
+ A pandas ``DataFrame`` by default, Python rows when
+ ``as_dataframe=False``, raw JSON when ``raw=True``, or raw page
+ payloads when multi-page fetching is used with ``raw=True``.
+ """
+ request_params = {'trade_code': trade_code, 'end_date': end_date}
+ request_params.update(kwargs)
+ return self._call_endpoint(
+ 'stk_manager_pay',
+ raw=raw,
+ fields=fields,
+ as_dataframe=as_dataframe,
+ **request_params,
+ )
+
+ def stk_managers(
+ self,
+ trade_code: Any | None = None,
+ candi_date: Any | None = None,
+ begin_date: Any | None = None,
+ end_date: Any | None = None,
+ *,
+ raw: bool = False,
+ fields: Sequence[str] | str | None = None,
+ as_dataframe: bool = True,
+ **kwargs: Any,
+ ) -> Any:
+ """上市公司管理层.
+
+ Endpoint: ``api/v1/market/data/stk-managers``.
+ Method: ``GET``.
+ Documented endpoint: ``get_stk_managers``.
+
+ Args:
+ trade_code: 股票代码(带 .SZ/.SH 后缀),支持逗号分隔多个 (type: string; required: Y).
+ candi_date: 候选日期,精确匹配,``YYYYMMDD`` 格式 (type: string; required: N).
+ begin_date: 任职起始日过滤,``YYYYMMDD`` 格式 (type: string; required: N).
+ end_date: 任职截止日过滤,``YYYYMMDD`` 格式;与 ``begin_date`` 同时提供时须 ``begin_date`` ≤ ``end_date`` (type: string; required: N).
+ raw: Return the decoded JSON payload without tabular extraction.
+ fields: Optional field list or comma-separated field string applied after extraction.
+ as_dataframe: Return a pandas ``DataFrame`` by default; set to ``False`` for Python rows.
+ **kwargs: Extra request parameters forwarded unchanged. Useful when the service adds parameters before the SDK is regenerated.
+
+ Returns:
+ A pandas ``DataFrame`` by default, Python rows when
+ ``as_dataframe=False``, raw JSON when ``raw=True``, or raw page
+ payloads when multi-page fetching is used with ``raw=True``.
+ """
+ request_params = {'trade_code': trade_code, 'candi_date': candi_date, 'begin_date': begin_date, 'end_date': end_date}
+ request_params.update(kwargs)
+ return self._call_endpoint(
+ 'stk_managers',
+ raw=raw,
+ fields=fields,
+ as_dataframe=as_dataframe,
+ **request_params,
+ )
+
def stk_premarket(
self,
ts_code: Any | None = None,
@@ -3161,6 +3364,47 @@ def stk_premarket(
**request_params,
)
+ def stk_status_change(
+ self,
+ trade_code: Any | None = None,
+ change_date: Any | None = None,
+ change_type: Any | None = None,
+ *,
+ raw: bool = False,
+ fields: Sequence[str] | str | None = None,
+ as_dataframe: bool = True,
+ **kwargs: Any,
+ ) -> Any:
+ """A股状态变更.
+
+ Endpoint: ``api/v1/market/data/stk-status-change``.
+ Method: ``GET``.
+ Documented endpoint: ``get_stk_status_change``.
+
+ Args:
+ trade_code: 股票代码(带 .SZ/.SH 后缀),支持逗号分隔多个;不填表示不按代码过滤 (type: string; required: N).
+ change_date: 变更日期,精确过滤,``YYYYMMDD`` 格式 (type: string; required: N).
+ change_type: 变更类型,精确过滤,常见值如 ``上市``、``退市``、``暂停上市`` (type: string; required: N).
+ raw: Return the decoded JSON payload without tabular extraction.
+ fields: Optional field list or comma-separated field string applied after extraction.
+ as_dataframe: Return a pandas ``DataFrame`` by default; set to ``False`` for Python rows.
+ **kwargs: Extra request parameters forwarded unchanged. Useful when the service adds parameters before the SDK is regenerated.
+
+ Returns:
+ A pandas ``DataFrame`` by default, Python rows when
+ ``as_dataframe=False``, raw JSON when ``raw=True``, or raw page
+ payloads when multi-page fetching is used with ``raw=True``.
+ """
+ request_params = {'trade_code': trade_code, 'change_date': change_date, 'change_type': change_type}
+ request_params.update(kwargs)
+ return self._call_endpoint(
+ 'stk_status_change',
+ raw=raw,
+ fields=fields,
+ as_dataframe=as_dataframe,
+ **request_params,
+ )
+
def stock_adjust_factor(
self,
symbol: Any | None = None,
diff --git a/src/ftshare/endpoints/stock.py b/src/ftshare/endpoints/stock.py
index c744224..3b47e02 100644
--- a/src/ftshare/endpoints/stock.py
+++ b/src/ftshare/endpoints/stock.py
@@ -256,6 +256,13 @@
'original_api': 'northbound',
'params': ('date',),
},
+ 'namechange': {
+ 'path': 'api/v1/market/data/namechange',
+ 'title': '股票曾用名',
+ 'doc_file': '股票曾用名.md',
+ 'original_api': 'get_namechange',
+ 'params': ('trade_code', 'start_date', 'end_date'),
+ },
'nth_trade_date': {
'path': 'api/v1/market/data/time/get-nth-trade-date',
'title': '第N个交易日',
@@ -320,6 +327,13 @@
'params': ('hk_code', 'ts_code', 'trade_date', 'start_date', 'end_date', 'page', 'page_size'),
'max_page_size': 1000,
},
+ 'stk_code_change': {
+ 'path': 'api/v1/market/data/stk-code-change',
+ 'title': 'A股代码变更',
+ 'doc_file': 'A股代码变更.md',
+ 'original_api': 'get_stk_code_change',
+ 'params': ('trade_code', 'start_date', 'end_date'),
+ },
'stk_limit': {
'path': 'api/v1/market/data/stk-limit',
'title': '涨跌停价',
@@ -328,6 +342,27 @@
'params': ('instrument_type', 'symbol', 'symbol_id', 'market_id', 'trade_date', 'start_date', 'end_date', 'page', 'page_size'),
'max_page_size': 500,
},
+ 'stk_manager_hold': {
+ 'path': 'api/v1/market/data/stk-manager-hold',
+ 'title': '上市公司管理层持股',
+ 'doc_file': '上市公司管理层持股.md',
+ 'original_api': 'get_stk_manager_hold',
+ 'params': ('trade_code', 'end_date'),
+ },
+ 'stk_manager_pay': {
+ 'path': 'api/v1/market/data/stk-manager-pay',
+ 'title': '上市公司管理层薪酬',
+ 'doc_file': '上市公司管理层薪酬.md',
+ 'original_api': 'get_stk_manager_pay',
+ 'params': ('trade_code', 'end_date'),
+ },
+ 'stk_managers': {
+ 'path': 'api/v1/market/data/stk-managers',
+ 'title': '上市公司管理层',
+ 'doc_file': '上市公司管理层.md',
+ 'original_api': 'get_stk_managers',
+ 'params': ('trade_code', 'candi_date', 'begin_date', 'end_date'),
+ },
'stk_premarket': {
'path': 'api/v1/market/data/stk-premarket',
'title': '盘前数据',
@@ -336,6 +371,13 @@
'params': ('ts_code', 'trade_date', 'start_date', 'end_date', 'page', 'page_size'),
'max_page_size': 500,
},
+ 'stk_status_change': {
+ 'path': 'api/v1/market/data/stk-status-change',
+ 'title': 'A股状态变更',
+ 'doc_file': 'A股状态变更.md',
+ 'original_api': 'get_stk_status_change',
+ 'params': ('trade_code', 'change_date', 'change_type'),
+ },
'stock_adjust_factor': {
'path': 'api/v1/market/data/stock-adjust-factor',
'title': '股票复权因子',
diff --git a/tests/endpoint_cases.py b/tests/endpoint_cases.py
index b31e2dc..241f032 100644
--- a/tests/endpoint_cases.py
+++ b/tests/endpoint_cases.py
@@ -7,11 +7,15 @@
"adjust": "Forward",
"adjust_kind": "Forward",
"base_date": "2026-07-17",
+ "begin_date": "20260101",
"board": "all",
"board_code": "BK001",
"cal-type": "1Y",
+ "candi_date": "20260101",
"category": "经济",
+ "change_date": "20260101",
"change_direction": "increase",
+ "change_type": "上市",
"charge_type": "日常申购费",
"classify_std": "证监会行业分类",
"client_type": "一般",
diff --git a/tests/test_client.py b/tests/test_client.py
index 83bbda5..ba65803 100644
--- a/tests/test_client.py
+++ b/tests/test_client.py
@@ -1014,3 +1014,76 @@ def test_fund_index_fund_array_response():
assert session.calls[0]["url"] == "https://market.ft.tech/gateway/api/v1/market/data/fund/index-fund"
assert session.calls[0]["params"] == {"index_code": "000300", "scope": "etf"}
+
+
+@pytest.mark.parametrize(
+ ("method_name", "kwargs", "expected_path", "expected_params"),
+ [
+ (
+ "namechange",
+ {"trade_code": "600848.SH", "start_date": "20200101", "end_date": "20241231"},
+ "api/v1/market/data/namechange",
+ {"trade_code": "600848.SH", "start_date": "20200101", "end_date": "20241231"},
+ ),
+ (
+ "stk_code_change",
+ {"trade_code": "001872.SZ,601360.SH", "start_date": "20180101"},
+ "api/v1/market/data/stk-code-change",
+ {"trade_code": "001872.SZ,601360.SH", "start_date": "20180101"},
+ ),
+ (
+ "stk_status_change",
+ {"trade_code": "600848.SH", "change_type": "上市"},
+ "api/v1/market/data/stk-status-change",
+ {"trade_code": "600848.SH", "change_type": "上市"},
+ ),
+ (
+ "stk_managers",
+ {"trade_code": "600848.SH,000001.SZ", "begin_date": "20200101", "end_date": "20241231"},
+ "api/v1/market/data/stk-managers",
+ {"trade_code": "600848.SH,000001.SZ", "begin_date": "20200101", "end_date": "20241231"},
+ ),
+ (
+ "stk_manager_hold",
+ {"trade_code": "600848.SH", "end_date": "20241231"},
+ "api/v1/market/data/stk-manager-hold",
+ {"trade_code": "600848.SH", "end_date": "20241231"},
+ ),
+ (
+ "stk_manager_pay",
+ {"trade_code": "600848.SH", "end_date": "20241231"},
+ "api/v1/market/data/stk-manager-pay",
+ {"trade_code": "600848.SH", "end_date": "20241231"},
+ ),
+ ],
+)
+def test_a_share_reference_endpoints_map_to_expected_paths(
+ method_name, kwargs, expected_path, expected_params
+):
+ session = FakeSession([FakeResponse(payload={"items": []})])
+ client = FtshareClient(session=session)
+
+ getattr(client, method_name)(**kwargs)
+
+ assert session.calls[0]["url"] == "https://market.ft.tech/gateway/" + expected_path
+ assert session.calls[0]["params"] == expected_params
+
+
+def test_a_share_reference_endpoints_raw_returns_full_payload():
+ payload = [
+ {"trade_code": "001872.SZ", "code": "1872", "name": "招商港口", "start_date": "20181226", "end_date": None},
+ ]
+ session = FakeSession([FakeResponse(payload=payload)])
+ client = FtshareClient(session=session)
+
+ assert client.stk_code_change(trade_code="001872.SZ", raw=True) == payload
+
+
+def test_a_share_status_change_omits_none_params():
+ session = FakeSession([FakeResponse(payload={"items": []})])
+ client = FtshareClient(session=session)
+
+ client.stk_status_change()
+
+ assert session.calls[0]["url"] == "https://market.ft.tech/gateway/api/v1/market/data/stk-status-change"
+ assert session.calls[0]["params"] == {}
diff --git a/tests/test_endpoint_contracts.py b/tests/test_endpoint_contracts.py
index 302eaed..5c87b66 100644
--- a/tests/test_endpoint_contracts.py
+++ b/tests/test_endpoint_contracts.py
@@ -52,7 +52,7 @@ def _response_payload(name: str) -> Any:
def test_contract_cases_cover_all_public_sdk_methods():
- assert len(PUBLIC_CONTRACTS) == 196
+ assert len(PUBLIC_CONTRACTS) == 202
assert PUBLIC_CONTRACTS | NON_PUBLISHED_ENDPOINTS == set(ENDPOINTS)
assert not (PUBLIC_CONTRACTS & NON_PUBLISHED_ENDPOINTS)