fa45d8aa5f
- health_checklist.json: 192.168.1.122→node122
- ocr_client.py: docstring IP→node122
- docs/market-data-requirements.md: IP→node122
- 所有API调用通过ProxyHandler({})绕过系统代理
Privoxy对node122:18003返回500,直连正常
297 lines
12 KiB
Python
297 lines
12 KiB
Python
# -*- coding:utf-8 -*-
|
|
# !/usr/bin/env python
|
|
"""
|
|
Date: 2026/4/10 19:00
|
|
Desc: 中国债券信息网-中债指数-中债指数族系-总指数-综合类指数
|
|
"""
|
|
|
|
import pandas as pd
|
|
import requests
|
|
|
|
from akshare.bond.cons import INDEX_MAPPING, PERIOD_MAPPING, INDICATOR_MAPPING
|
|
|
|
|
|
def bond_available_index_cbond():
|
|
"""
|
|
中国债券信息网-中债指数-中债指数族系 当中, 非指定期限部分
|
|
https://yield.chinabond.com.cn/cbweb-mn/indices/singleIndexQueryResult
|
|
:return: 可选项列表
|
|
:rtype: list
|
|
"""
|
|
temp_df = pd.DataFrame(list(INDEX_MAPPING.keys()))
|
|
temp_df.reset_index(inplace=True)
|
|
temp_df['index'] = temp_df['index'] + 1
|
|
temp_df.columns = ['index', 'value']
|
|
return temp_df
|
|
|
|
|
|
def bond_index_general_cbond(
|
|
index_category: str = "新综合指数", indicator: str = "全价", period: str = "总值"
|
|
):
|
|
"""
|
|
中国债券信息网-中债指数-中债指数族系
|
|
https://yield.chinabond.com.cn/cbweb-mn/indices/singleIndexQueryResult
|
|
:param index_category: see result of available_bond_index()
|
|
:type index_category: str
|
|
:param indicator: choice of {"全价", "净价", "财富", "平均市值法久期", "平均现金流法久期", "平均市值法凸性", "平均现金流法凸性", "平均现金流法到期收益率", "平均市值法到期收益率", "平均基点价值", "平均待偿期", "平均派息率", "指数上日总市值", "财富指数涨跌幅", "全价指数涨跌幅", "净价指数涨跌幅", "现券结算量"}
|
|
:type indicator: str
|
|
:param period: choice of {"总值", "1年以下", "1-3年", "3-5年", "5-7年", "7-10年", "10年以上", "0-3个月", "3-6个月", "6-9个月", "9-12个月", "0-6个月", "6-12个月"}
|
|
:type period: str
|
|
:return: 指定指数的指定指标的指定期限分段数据
|
|
:rtype: pandas.DataFrame
|
|
"""
|
|
url = "https://yield.chinabond.com.cn/cbweb-mn/indices/singleIndexQueryResult"
|
|
params = {
|
|
"indexid": INDEX_MAPPING[index_category],
|
|
"qxlxt": PERIOD_MAPPING[period],
|
|
"ltcslx": "",
|
|
"zslxt": INDICATOR_MAPPING[indicator],
|
|
"zslxt1": INDICATOR_MAPPING[indicator],
|
|
"lx": "1",
|
|
"locale": "zh_CN",
|
|
}
|
|
r = requests.post(url, params=params)
|
|
raw_json = r.json()
|
|
key_col_map = {f"{INDICATOR_MAPPING[indicator]}_{p_code}": freq_col for p_code, freq_col in
|
|
raw_json['dqcName'].items()}
|
|
data_json = {key: raw_json[key] for key in key_col_map}
|
|
temp_df = pd.DataFrame.from_dict(data_json, orient="columns")
|
|
temp_df.index = pd.to_datetime(pd.to_numeric(temp_df.index), unit="ms", utc=True).tz_convert("Asia/Shanghai")
|
|
temp_df.index.name = "date"
|
|
temp_df.rename(columns=key_col_map, inplace=True)
|
|
temp_df.reset_index(inplace=True)
|
|
temp_df.columns = ["date", "value"]
|
|
temp_df['date'] = pd.to_datetime(temp_df['date'], errors="coerce").dt.date
|
|
return temp_df
|
|
|
|
|
|
def bond_treasury_index_cbond(
|
|
indicator: str = "财富", period: str = "5Y"
|
|
) -> pd.DataFrame:
|
|
"""
|
|
中国债券信息网-中债指数-中债指数族系-总指数-综合类指数-中债-国债指数
|
|
https://yield.chinabond.com.cn/cbweb-mn/indices/single_index_query
|
|
:param indicator: choice of {"全价", "净价", "财富"}
|
|
:type indicator: str
|
|
:param period: choice of {'0-1Y', '0-3Y', '0-5Y', '0-10Y', '1-3Y', '1-5Y', '1-10Y',
|
|
'3-5Y', '5Y', '7Y', '7-10Y', '10Y', '30Y'}
|
|
:type period: str
|
|
:return: 国债指数
|
|
:rtype: pandas.DataFrame
|
|
"""
|
|
mapping = {
|
|
"0-1Y": "8a8b2cef70bc61380170be069828032b",
|
|
"0-3Y": "61f69682dc3ec18fe9664ff59308314a",
|
|
"0-5Y": "0beafb51867009998c2f4932bf22ede3",
|
|
"0-10Y": "8a8b2cef7832f8920178350801470014",
|
|
"1-3Y": "cc1cfe89b0cbd0800420a0e037026407",
|
|
"1-5Y": "7c3110e5305f9301482517066427a554",
|
|
"1-10Y": "a5d90802e3259978a027267de651106d",
|
|
"3-5Y": "8a8b2ca04bf69582014c10b60f376c77",
|
|
"5Y": "8a8b2ca03a3feea1013a44b98fc533f5",
|
|
"7Y": "2c9081e50e8767dc010e87b6e26c0080",
|
|
"7-10Y": "8a8b2c8f5a492a01015a4ac986480043",
|
|
"10Y": "8a8b2ca04b666362014b723482bc4f49",
|
|
"30Y": "8a8b2cef77b239980177b485d20a6379",
|
|
}
|
|
url = "https://yield.chinabond.com.cn/cbweb-mn/indices/singleIndexQueryResult"
|
|
params = {
|
|
"indexid": mapping[period],
|
|
"qxlxt": "00",
|
|
"ltcslx": "",
|
|
"zslxt": INDICATOR_MAPPING[indicator],
|
|
"zslxt1": INDICATOR_MAPPING[indicator],
|
|
"lx": "1",
|
|
"locale": "zh_CN",
|
|
}
|
|
r = requests.post(url, params=params)
|
|
raw_json = r.json()
|
|
key_col_map = {f"{INDICATOR_MAPPING[indicator]}_{p_code}": freq_col for p_code, freq_col in
|
|
raw_json['dqcName'].items()}
|
|
data_json = {key: raw_json[key] for key in key_col_map}
|
|
temp_df = pd.DataFrame.from_dict(data_json, orient="columns")
|
|
temp_df.index = pd.to_datetime(pd.to_numeric(temp_df.index), unit="ms", utc=True).tz_convert("Asia/Shanghai")
|
|
temp_df.index.name = "date"
|
|
temp_df.rename(columns=key_col_map, inplace=True)
|
|
temp_df.reset_index(inplace=True)
|
|
temp_df.columns = ["date", "value"]
|
|
temp_df['date'] = pd.to_datetime(temp_df['date'], errors="coerce").dt.date
|
|
return temp_df
|
|
|
|
|
|
def bond_new_composite_index_cbond(
|
|
indicator: str = "财富", period: str = "总值"
|
|
) -> pd.DataFrame:
|
|
"""
|
|
中国债券信息网-中债指数-中债指数族系-总指数-综合类指数-中债-新综合指数
|
|
https://yield.chinabond.com.cn/cbweb-mn/indices/single_index_query
|
|
:param indicator: choice of {"全价", "净价", "财富", "平均市值法久期", "平均现金流法久期", "平均市值法凸性",
|
|
"平均现金流法凸性", "平均现金流法到期收益率", "平均市值法到期收益率", "平均基点价值", "平均待偿期", "平均派息率",
|
|
"指数上日总市值", "财富指数涨跌幅", "全价指数涨跌幅", "净价指数涨跌幅", "现券结算量"}
|
|
:type indicator: str
|
|
:param period: choice of {"总值", "1年以下", "1-3年", "3-5年", "5-7年", "7-10年", "10年以上", "0-3个月",
|
|
"3-6个月", "6-9个月", "9-12个月", "0-6个月", "6-12个月"}
|
|
:type period: str
|
|
:return: 新综合指数
|
|
:rtype: pandas.DataFrame
|
|
"""
|
|
indicator_map = {
|
|
"全价": "QJZS",
|
|
"净价": "JJZS",
|
|
"财富": "CFZS",
|
|
"平均市值法久期": "PJSZFJQ",
|
|
"平均现金流法久期": "PJXJLFJQ",
|
|
"平均市值法凸性": "PJSZFTX",
|
|
"平均现金流法凸性": "PJXJLFTX",
|
|
"平均现金流法到期收益率": "PJDQSYL",
|
|
"平均市值法到期收益率": "PJSZFDQSYL",
|
|
"平均基点价值": "PJJDJZ",
|
|
"平均待偿期": "PJDCQ",
|
|
"平均派息率": "PJPXL",
|
|
"指数上日总市值": "ZSZSZ",
|
|
"财富指数涨跌幅": "CFZSZDF",
|
|
"全价指数涨跌幅": "QJZSZDF",
|
|
"净价指数涨跌幅": "JJZSZDF",
|
|
"现券结算量": "XQJSL",
|
|
}
|
|
period_map = {
|
|
"总值": "00",
|
|
"1年以下": "01",
|
|
"1-3年": "02",
|
|
"3-5年": "03",
|
|
"5-7年": "04",
|
|
"7-10年": "05",
|
|
"10年以上": "06",
|
|
"0-3个月": "07",
|
|
"3-6个月": "08",
|
|
"6-9个月": "09",
|
|
"9-12个月": "10",
|
|
"0-6个月": "11",
|
|
"6-12个月": "12",
|
|
}
|
|
url = "https://yield.chinabond.com.cn/cbweb-mn/indices/singleIndexQuery"
|
|
params = {
|
|
"indexid": "8a8b2ca0332abed20134ea76d8885831",
|
|
"": "", # noqa: F601
|
|
"qxlxt": period_map[period],
|
|
"": "", # noqa: F601
|
|
"ltcslx": "",
|
|
"": "", # noqa: F601
|
|
"zslxt": indicator_map[indicator], # noqa: F601
|
|
"": "", # noqa: F601
|
|
"zslxt": indicator_map[indicator], # noqa: F601
|
|
"": "", # noqa: F601
|
|
"lx": "1",
|
|
"": "", # noqa: F601
|
|
"locale": "",
|
|
}
|
|
r = requests.post(url, params=params)
|
|
data_json = r.json()
|
|
temp_df = pd.DataFrame.from_dict(
|
|
data_json[f"{indicator_map[indicator]}_{period_map[period]}"],
|
|
orient="index",
|
|
)
|
|
temp_df.reset_index(inplace=True)
|
|
temp_df.columns = ["date", "value"]
|
|
temp_df["date"] = temp_df["date"].astype(float)
|
|
temp_df["date"] = (
|
|
pd.to_datetime(temp_df["date"], unit="ms", errors="coerce", utc=True)
|
|
.dt.tz_convert("Asia/Shanghai")
|
|
.dt.date
|
|
)
|
|
temp_df["value"] = pd.to_numeric(temp_df["value"], errors="coerce")
|
|
return temp_df
|
|
|
|
|
|
def bond_composite_index_cbond(
|
|
indicator: str = "财富", period: str = "总值"
|
|
) -> pd.DataFrame:
|
|
"""
|
|
中国债券信息网-中债指数-中债指数族系-总指数-综合类指数-中债-综合指数
|
|
https://yield.chinabond.com.cn/cbweb-mn/indices/single_index_query
|
|
:param indicator: choice of {"全价", "净价", "财富", "平均市值法久期", "平均现金流法久期", "平均市值法凸性",
|
|
"平均现金流法凸性", "平均现金流法到期收益率", "平均市值法到期收益率", "平均基点价值", "平均待偿期", "平均派息率",
|
|
"指数上日总市值", "财富指数涨跌幅", "全价指数涨跌幅", "净价指数涨跌幅", "现券结算量"}
|
|
:type indicator: str
|
|
:param period: choice of {"总值", "1年以下", "1-3年", "3-5年", "5-7年", "7-10年", "10年以上", "0-3个月",
|
|
"3-6个月", "6-9个月", "9-12个月", "0-6个月", "6-12个月"}
|
|
:type period: str
|
|
:return: 新综合指数
|
|
:rtype: pandas.DataFrame
|
|
"""
|
|
indicator_map = {
|
|
"全价": "QJZS",
|
|
"净价": "JJZS",
|
|
"财富": "CFZS",
|
|
"平均市值法久期": "PJSZFJQ",
|
|
"平均现金流法久期": "PJXJLFJQ",
|
|
"平均市值法凸性": "PJSZFTX",
|
|
"平均现金流法凸性": "PJXJLFTX",
|
|
"平均现金流法到期收益率": "PJDQSYL",
|
|
"平均市值法到期收益率": "PJSZFDQSYL",
|
|
"平均基点价值": "PJJDJZ",
|
|
"平均待偿期": "PJDCQ",
|
|
"平均派息率": "PJPXL",
|
|
"指数上日总市值": "ZSZSZ",
|
|
"财富指数涨跌幅": "CFZSZDF",
|
|
"全价指数涨跌幅": "QJZSZDF",
|
|
"净价指数涨跌幅": "JJZSZDF",
|
|
"现券结算量": "XQJSL",
|
|
}
|
|
period_map = {
|
|
"总值": "00",
|
|
"1年以下": "01",
|
|
"1-3年": "02",
|
|
"3-5年": "03",
|
|
"5-7年": "04",
|
|
"7-10年": "05",
|
|
"10年以上": "06",
|
|
"0-3个月": "07",
|
|
"3-6个月": "08",
|
|
"6-9个月": "09",
|
|
"9-12个月": "10",
|
|
"0-6个月": "11",
|
|
"6-12个月": "12",
|
|
}
|
|
url = "https://yield.chinabond.com.cn/cbweb-mn/indices/singleIndexQuery"
|
|
params = {
|
|
"indexid": "2c90818811afed8d0111c0c672b31578",
|
|
"": "", # noqa: F601
|
|
"qxlxt": period_map[period],
|
|
"": "", # noqa: F601
|
|
"zslxt": indicator_map[indicator],
|
|
"": "", # noqa: F601
|
|
"lx": "1",
|
|
"": "", # noqa: F601
|
|
"locale": "",
|
|
}
|
|
r = requests.post(url, params=params)
|
|
data_json = r.json()
|
|
temp_df = pd.DataFrame.from_dict(
|
|
data_json[f"{indicator_map[indicator]}_{period_map[period]}"],
|
|
orient="index",
|
|
)
|
|
temp_df.reset_index(inplace=True)
|
|
temp_df.columns = ["date", "value"]
|
|
temp_df["date"] = pd.to_datetime(temp_df["date"].astype(int), errors="coerce", unit="ms").dt.date
|
|
temp_df["value"] = pd.to_numeric(temp_df["value"], errors="coerce")
|
|
return temp_df
|
|
|
|
|
|
if __name__ == "__main__":
|
|
bond_new_composite_index_cbond_df = bond_new_composite_index_cbond(
|
|
indicator="财富", period="总值"
|
|
)
|
|
print(bond_new_composite_index_cbond_df)
|
|
|
|
bond_composite_index_cbond_df = bond_composite_index_cbond(
|
|
indicator="财富", period="总值"
|
|
)
|
|
print(bond_composite_index_cbond_df)
|
|
|
|
bond_index_general_cbond_df = bond_index_general_cbond(index_category="新综合指数", indicator="全价", period="总值")
|
|
print(bond_index_general_cbond_df)
|
|
|
|
bond_treasury_index_cbond_df = bond_treasury_index_cbond(indicator="财富", period="5Y")
|
|
print(bond_treasury_index_cbond_df)
|