跳转至


课程  因子投资  机器学习  Python  Poetry  ppw  tools  programming  Numpy  Pandas  pandas  算法  hdbscan  聚类  选股  Algo  minimum  numpy  algo  FFT  模式识别  配对交易  GBDT  LightGBM  XGBoost  statistics  CDF  KS-Test  monte-carlo  VaR  回测  过拟合  algorithms  machine learning  strategy  python  sklearn  pdf  概率  数学  面试题  量化交易  策略分类  风险管理  Info  interview  career  xgboost  PCA  wavelet  时序事件归因  SHAP  Figures  Behavioral Economics  graduate  arma  garch  人物  职场  Quantopian  figure  Banz  金融行业  买方  卖方  story  量化传奇  rsi  zigzag  穹顶压力  因子  ESG  因子策略  投资  策略  pe  ORB  Xgboost  Alligator  Indicator  factor  alpha101  alpha  技术指标  wave  quant  algorithm  pearson  spearman  tushare  因子分析  Alphalens  涨停板  herd-behaviour  momentum  因子评估  review  SMC  聪明钱  trade  history  indicators  zscore  波动率  强化学习  顶背离  freshman  resources  others  AI  DeepSeek  network  量子计算  金融交易  IBM  weekly  LLT  backtest  backtrader  研报  papers  UBL  quantlib  jupyter-notebook  scikit-learn  pypinyin  qmt  xtquant  blog  static-site  duckdb  工具  colors  free resources  barra  world quant  Alpha  openbb  数据  risk-management  llm  prompt  CANSLIM  Augment  arsenal  copilot  vscode  code  量化数据存储  hdf5  h5py  cursor  augment  trae  Jupyter  jupysql  pyarrow  parquet  数据源  quantstats  实盘  clickhouse  notebook  redis  remote-agent  AI-tools  Moonshot  回测,研报,tushare 

arsenal »

xtquant 中的板块数据


R50

Tip

  1. xtquant 中有哪些板块和板块分类?
    1. 如何获取板块的成份股?
    2. 如何获取指数的行情数据?

xtquant 是一个 Python 库,提供了行情数据和实盘接口。只要您的券商支持 QMT,并且您也申请到了量化接口权限,就可以免费使用这些数据和实盘接口,这也是目前性价比较高、门槛较低的接入方式。因此,我们会通过多篇笔记来介绍这个库。

今天要探索的是,xtquant 中的板块是如何组织的。这部分内容,虽然在官方文档有一些介绍,但并没有把 API 的使用串联起来。有一些知识点也是经询问官方才知道的,可能一段时间内,这仍然是独家资料,值得收藏。


Xtquant 中有哪些板块

xtquant 中的板块列表通过 get_sector_list 来获取。返回结果是一个字符串列表:

1
2
3
4
from xtquant import xtdata
sectors = xtdata.get_sector_list()
for i in range(0, len(sectors), 6):
    print(" ".join(sectors[i:i+6]))

我们将得到 5000 多个板块名称,摘录其中的部分显示如下:

1
2
3
4
5
6
7
8
上期所上证 A 股,上证 B 股,上证期权,上证转债,中金所
创业板,大商所,板块加权指数,板块指数,概念指数,沪市 ETF
沪市债券,沪市基金,沪市指数,沪深 A 股,沪深 B 股,沪深 ETF
迅投一级行业板块指数,迅投三级行业板块加权指数,迅投三级行业板块指数
郑商所,香港联交所指数,香港联交所股票,ETF 主题指数,ETF 债券型,ETF 商品型
ETF 股票型,ETF 行业指数,ETF 货币型,ETF 跨境型,TGN3D 打印,TGN5G
TGNMicroLED 概念,TGNMiniLED,TGNMLOps 概念,TGNMR
...

板块比较多。下面我们介绍它的几个重要归类:

指数类

在名称中出现指数一词的,大约有 80 个。也就是说,这个板块是由指数的代码组成的:


我们看看沪深指数这个板块都由哪些指数组成:

1
2
3
4
for sector in xtdata.get_stock_list_in_sector('沪深指数'):
    detail = xtdata.get_instrument_detail(sector)
    name = detail["InstrumentName"]
    print(sector, name)

这里大约有 600 种指数,比如我们常用的上证指数 (000001.SH), 上证 50,上证 300 等都在这里面。如果你要获取中证 1000 的行情数据,但不知道它的代码是多少,就需要在这里查询:

1
2
3
4
5
for sector in xtdata.get_stock_list_in_sector('沪深指数'):
    detail = xtdata.get_instrument_detail(sector)
    name = detail["InstrumentName"]
    if name == "中证 1000":
        print(sector)

代码是"000852.SH"和"399852.SZ",它们分别是中证 1000 在沪指和深指中的代码。接下来我们就可以通过上一篇笔记介绍的方法,来获取这个指数的行情:

1
2
xtdata.download_history_data("399852.SZ", period="1d")
xtdata.get_market_data(stock_list=["399852.SZ"], period='1d', count=10)

概念和同花顺概念

注意“概念指数”这个板块,我们通过下面的代码来列出它包含的指数:

1
2
3
4
5
for code in xtdata.get_stock_list_in_sector("概念指数"):
    detail = xtdata.get_instrument_detail(code)
    name = detail["InstrumentName"]

    print(sector, name)

部分输出如下:

1
2
3
4
5
6
102566.BKZS GNoled 材料
101285.BKZS GN 龙虎榜热门
102109.BKZS GN 太阳能
102512.BKZS GN 安邦系
101602.BKZS GN 饲料
101219.BKZS GN 室外经济
但是似乎拿不到这些板块的指数。我们将继续咨询官方,得到反馈后再向大家报告。如果您现在就需要这些板块的指数,那么可以手工计算一个等权指数出来。


以 GNoled 材料为例,我们可以拿到它的成份股构成,进而得到所有成份股的行情:

1
2
3
4
5
secs = xtdata.get_stock_list_in_sector('GNoled 材料')
xtdata.download_history_data2(secs, period='1d', start_time="20231220")

barss = xtdata.get_market_data(stock_list=secs, count=10)
barss

此时我们得到输出如下:

我们通过下面的方法求等权指数,注意这里的转置,以及求均值时,我们传入的 axis=1 的参数。

1
barss["close"].T.mean(axis=1)

此时我们得到的输出如下:

1
2
3
4
20231220    19.030909
20231221    19.072121
20231222    18.880909
20231225    18.978485

我们看到板块名字中,好多以 T 开头的,比如 TGN,THY 等。官方文档中似乎没有关于它们的说明,猜测可能是同花顺概念、同花顺行业

申万行业分类板块

如果你希望得到按申万行业分类的板块,应该用以下代码进行查询:

1
2
3
4
5
for code in xtdata.get_stock_list_in_sector("迅投一级行业板块指数"):
    detail = xtdata.get_instrument_detail(code)
    name = detail["InstrumentName"]
    if name.startswith("SW"):
        print(code, name)

这样得到的是申万一级行业板块。如果要查询二级、三级,应该分别使用迅投二级行业板块指数和迅投三级行业板块指数。但似乎也无法获取它们的指数。

可转债

我们通过以下代码查找所有的可转债,并得到它们的代码和名字:

1
2
3
4
5
6
for sector in xtdata.get_sector_list():
    if sector.find("可转债") != -1:
        print(sector)
xtdata.get_stock_list_in_sector("沪深 A 股")
xtdata.get_stock_list_in_sector("可转债等权")
xtdata.get_instrument_detail("110047.SH")

这将输出 110043SH 无锡转债。我们可以由它的代码,进一步得到它的行情数据。

小结

Tip

  1. xtquant 中,get_sector_list 会得到一个板块名称列表。通过板块名,可以进一步得到各个板块的成分股构成。

  2. 上述返回值中,有一类特殊的板块,它们的名字中带有“指数”这个词。

  3. 指数板块中,比如沪深指数,包含了我们最常见、最常用的一些指数,如上证,沪深 300 等,这些指数我们可以获取行情数据

  4. 其它板块,即使是名字中包含指数的,比如概念指数,似乎也无法获取到其指数。

  5. 对获取不到指数的,我们可以手工计算其等权指数。