xtquant并未直接提供市值数据,这里我们通过财务数据进行计算,计算规则是:

  • 总市值 = 总股本 * 收盘价
  • 流通市值 = 流通股本 * 收盘价

首先我们需要下载并获取数据

    stock_list = ['000001.SZ', "600009.SH"]
    start_time = "20251001"
    end_time = ""
    # 需要先下载行情
    [xtdata.download_history_data(stock_code=_stock_code, period="1d", start_time=start_time, end_time=end_time, incrementally=False) for _stock_code in stock_list]
    xtdata.download_financial_data(stock_list, table_list=["Capital"])  # 本地下载股本表

然后通过股本表获取以下两个字段:

  • total_capital:总股本
  • circulating_capital:流通股本

股本表/更多财务数据请参考官网知识库:https://dict.thinktrader.net/dictionary/stock.html?id=S7b19l#%E8%82%A1%E6%9C%AC%E8%A1%A8

完整程序

from xtquant import xtdata
import pandas as pd

def calculate_market_value(stock_list: list, start_time, end_time="") -> dict:
    """计算市值数据"""
    stock_data: dict = xtdata.get_market_data_ex(["close"], stock_list, '1d', start_time=start_time, end_time=end_time, fill_data=False)
    finance_data: dict = xtdata.get_financial_data(stock_list, table_list=["Capital"], start_time=start_time, end_time=end_time)  # 获取股本表
    market_value_record = {}
    for _stock in stock_list:
        if ((stock_data[_stock] is None) or stock_data[_stock].empty or (finance_data[_stock]['Capital'] is None)
                or finance_data[_stock]['Capital'].empty):
            market_value_record[_stock] = {}
        merge_df = pd.merge(stock_data[_stock], finance_data[_stock]["Capital"][["m_anntime", "total_capital", "circulating_capital"]],
                            how="left", left_index=True, right_on=['m_anntime'])
        merge_df.index = stock_data[_stock].index
        merge_df.ffill(inplace=True)
        market_value_record[_stock] = {
            "总市值": (merge_df['close'] * merge_df['total_capital']).dropna().to_dict(),
            "流通市值": (merge_df['close'] * merge_df['circulating_capital']).dropna().to_dict(),
        }
    return market_value_record


def main():
    stock_list = ['000001.SZ', "600009.SH"]
    start_time = "20251001"
    end_time = ""
    # 需要先下载行情
    # [xtdata.download_history_data(stock_code=_stock_code, period="1d", start_time=start_time, end_time=end_time, incrementally=False) for _stock_code in stock_list]
    # xtdata.download_financial_data(stock_list, table_list=["Capital"])  # 本地下载股本表
    market_value_data: dict = calculate_market_value(stock_list, start_time, end_time)
    print(market_value_data)


if __name__ == '__main__':
    main()
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐