Shortcuts

Source code for libfinance.api.shares

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""股本:统一字段,CN 与 US 同一套(后端 shares 数据族的 get_shares_panel)。"""
from typing import List, Optional, Union

import pandas as pd

from libfinance.client import get_client
from libfinance.utils.decorators import export_as_api
from libfinance.utils.utils import as_of_text, to_date_str
from libfinance.utils.validators import (
    check_items_in_container,
    ensure_list_of_string,
)


#: 后端的统一股本字段(pyshares field_codes),所有市场同一套,单位均为股。
SHARE_FIELDS = (
    "free_float_shares",
    "issued_shares",
    "preferred_shares",
    "restricted_shares",
    "shares_outstanding",
    "tradable_shares",
)


[docs]@export_as_api def get_shares( order_book_ids: Union[str, List[str]], start_date=None, end_date=None, fields: Optional[Union[str, List[str]]] = None, as_of=None, ) -> pd.DataFrame: r"""获取证券逐交易日的股本(证券层级:股类值优先于公司层级)。 :param order_book_ids: 单个代码或代码列表,可混合市场,如 ``"600000.XSHG"``\ 、\ ``"AAPL.US"`` :param start_date: 开始日期;省略为 ``end_date`` 前 92 天 :param end_date: 结束日期;省略为交易日历的最后一个交易日 :param fields: 统一股本字段,省略为全部:``free_float_shares``\ 、\ ``issued_shares``\ 、 ``preferred_shares``\ 、\ ``restricted_shares``\ 、\ ``shares_outstanding``\ 、\ ``tradable_shares`` :param as_of: 知识截止时点(日期或 ISO 时间戳),只用当时已知的股本;省略取最新 :returns: pandas.DataFrame,以 (order_book_id, date) 为索引、每个字段一列;某市场不发布的字段为 NaN。 """ order_book_ids = ensure_list_of_string(order_book_ids, "order_book_ids") if not order_book_ids: raise ValueError("order_book_ids: at least one order book id expected") if fields is not None: fields = ensure_list_of_string(fields, "fields") check_items_in_container(fields, SHARE_FIELDS, "fields") if start_date is not None: start_date = to_date_str(start_date) if end_date is not None: end_date = to_date_str(end_date) if start_date is not None and end_date is not None and start_date > end_date: raise ValueError( "invalid date range: [{!r}, {!r}]".format(start_date, end_date) ) frame = get_client().get_shares( order_book_ids=order_book_ids, start_date=start_date, end_date=end_date, fields=fields, as_of=as_of_text(as_of), ) return _indexed(frame)
def _indexed(frame): """服务端的扁平表(order_book_id, date, 字段...)-> (order_book_id, date) 索引;已带索引的原样返回。""" if not isinstance(frame, pd.DataFrame) or not {"order_book_id", "date"} <= set(frame.columns): return frame frame = frame.copy() frame["date"] = pd.to_datetime(frame["date"]) return frame.set_index(["order_book_id", "date"]).sort_index()

© Copyright 2026, StateOfTheArt.Quant. Last updated on 2026-10-10 05:37.

Built with Sphinx using a theme provided by Read the Docs.