Commit cc5d32ca authored by Dr.李's avatar Dr.李

update

parent 98ba1063
.ipynb_checkpoints
__pycache__
*.pyc
.virtual_documents
\ No newline at end of file
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "938912de-30f4-443b-8c1d-d9168c4a1d06",
"metadata": {},
"outputs": [],
"source": [
"import datetime as dt\n",
"from utility import (\n",
" read_sql,\n",
" fd_basicinfo,\n",
" fd_typeclass,\n",
" nearest_report_date\n",
")\n",
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "ce3b53e6-60f3-48e5-9cdd-8a92cc70c6d7",
"metadata": {},
"outputs": [],
"source": [
"# 获取回溯的报告日\n",
"\n",
"today = dt.datetime.today()\n",
"date_3yrs_ago = today.replace(year=today.year - 3)\n",
"report_dates_begin = nearest_report_date(date_3yrs_ago.strftime(\"%Y%m%d\"))\n",
"current_date = today.strftime(\"%Y%m%d\")"
]
},
{
"cell_type": "code",
"execution_count": 58,
"id": "07275364-e308-433e-9c3a-fe78ad8e9daa",
"metadata": {},
"outputs": [],
"source": [
"# 获取所有目标债券型基金(清算结束日期晚于当前日)\n",
"\n",
"security_ids = read_sql(f\"\"\"\n",
"select SECURITYID from TQ_FD_TYPECLASS \n",
"WHERE\n",
" ISVALID = 1 AND\n",
" L1CODE = 3 AND\n",
" (ENDDATE>='{report_dates_begin}' or ENDDATE = '19000101') \n",
"ORDER BY SECURITYID;\n",
"\"\"\")[\"SECURITYID\"].unique().tolist()\n",
"sec_id_strs = \",\".join([\"'\" + s + \"'\" for s in security_ids])\n",
"\n",
"not_liq_sec_ids = fd_basicinfo(security_ids, current_date)[\"SECURITYID\"].unique().tolist()\n",
"sec_id_strs = \",\".join([\"'\" + s + \"'\" for s in not_liq_sec_ids])"
]
},
{
"cell_type": "code",
"execution_count": 59,
"id": "5049fc82-e1ee-476a-9fb6-79adedb6028e",
"metadata": {},
"outputs": [],
"source": [
"# 获取相关组合情况\n",
"\n",
"query = f\"\"\"\n",
"SELECT SECURITYID, REPORTDATE, BDRTO, CONVBDRTO, EQUITYINVERTO from TQ_FD_ASSETPORTFOLIO\n",
"WHERE\n",
" REPORTDATE >= '{report_dates_begin}' AND\n",
" ISVALID = 1 AND\n",
" SECURITYID in ({sec_id_strs}) ORDER BY SECURITYID, REPORTDATE\n",
"\"\"\"\n",
"portfolios = read_sql(query).fillna(0.0)\n",
"portfolios[\"CONVBDRTO_TO_BDRTO\"] = portfolios[\"CONVBDRTO\"] / portfolios[\"BDRTO\"] * 100"
]
},
{
"cell_type": "code",
"execution_count": 60,
"id": "0c2416b1-4edb-45d9-a31a-11fb70344539",
"metadata": {},
"outputs": [],
"source": [
"last_portfolio = portfolios.groupby(\"SECURITYID\").last()[[\"BDRTO\"]]\n",
"last_4_cov_portfolio = portfolios.groupby(\"SECURITYID\").rolling(window=4).mean().groupby(level=0).last()[[\"CONVBDRTO_TO_BDRTO\"]]\n",
"last_4_stk_portfolio = portfolios.groupby(\"SECURITYID\").rolling(window=4).mean().groupby(level=0).last()[[\"EQUITYINVERTO\"]]"
]
},
{
"cell_type": "code",
"execution_count": 61,
"id": "7810ff27-b4b0-4b30-a77a-c3e6d531e1ae",
"metadata": {},
"outputs": [],
"source": [
"agg_port = pd.concat([last_portfolio, last_4_cov_portfolio, last_4_stk_portfolio], axis=1).reset_index()\n",
"agg_port = pd.merge(agg_port, fd_typeclass(agg_port.SECURITYID, current_date))"
]
},
{
"cell_type": "code",
"execution_count": 62,
"id": "858a98ea-e17f-4b4b-be64-becb4ce0a9b9",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>SECURITYID</th>\n",
" <th>BDRTO</th>\n",
" <th>CONVBDRTO_TO_BDRTO</th>\n",
" <th>EQUITYINVERTO</th>\n",
" <th>L1CODE</th>\n",
" <th>L1NAME</th>\n",
" <th>L2CODE</th>\n",
" <th>L2NAME</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1030000011</td>\n",
" <td>85.80</td>\n",
" <td>23.140246</td>\n",
" <td>2.7075</td>\n",
" <td>3</td>\n",
" <td>债券基金</td>\n",
" <td>3.2</td>\n",
" <td>普通债券型基金</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1030000012</td>\n",
" <td>85.80</td>\n",
" <td>23.140246</td>\n",
" <td>2.7075</td>\n",
" <td>3</td>\n",
" <td>债券基金</td>\n",
" <td>3.2</td>\n",
" <td>普通债券型基金</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1030000014</td>\n",
" <td>80.75</td>\n",
" <td>2.309944</td>\n",
" <td>10.3475</td>\n",
" <td>3</td>\n",
" <td>债券基金</td>\n",
" <td>3.2</td>\n",
" <td>普通债券型基金</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1030000015</td>\n",
" <td>80.75</td>\n",
" <td>2.309944</td>\n",
" <td>10.3475</td>\n",
" <td>3</td>\n",
" <td>债券基金</td>\n",
" <td>3.2</td>\n",
" <td>普通债券型基金</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1030000022</td>\n",
" <td>113.76</td>\n",
" <td>16.596532</td>\n",
" <td>0.0000</td>\n",
" <td>3</td>\n",
" <td>债券基金</td>\n",
" <td>3.2</td>\n",
" <td>普通债券型基金</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1284</th>\n",
" <td>1030010008</td>\n",
" <td>0.00</td>\n",
" <td>NaN</td>\n",
" <td>0.0000</td>\n",
" <td>3</td>\n",
" <td>债券基金</td>\n",
" <td>3.6</td>\n",
" <td>短期理财债券型基金</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1285</th>\n",
" <td>1030013271</td>\n",
" <td>114.12</td>\n",
" <td>0.020749</td>\n",
" <td>0.0000</td>\n",
" <td>3</td>\n",
" <td>债券基金</td>\n",
" <td>3.2</td>\n",
" <td>普通债券型基金</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1286</th>\n",
" <td>1030013280</td>\n",
" <td>93.34</td>\n",
" <td>13.607275</td>\n",
" <td>15.0875</td>\n",
" <td>3</td>\n",
" <td>债券基金</td>\n",
" <td>3.2</td>\n",
" <td>普通债券型基金</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1287</th>\n",
" <td>1030013281</td>\n",
" <td>93.34</td>\n",
" <td>13.607275</td>\n",
" <td>15.0875</td>\n",
" <td>3</td>\n",
" <td>债券基金</td>\n",
" <td>3.2</td>\n",
" <td>普通债券型基金</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1288</th>\n",
" <td>1030014382</td>\n",
" <td>88.81</td>\n",
" <td>15.350972</td>\n",
" <td>0.0000</td>\n",
" <td>3</td>\n",
" <td>债券基金</td>\n",
" <td>3.2</td>\n",
" <td>普通债券型基金</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>1289 rows × 8 columns</p>\n",
"</div>"
],
"text/plain": [
" SECURITYID BDRTO CONVBDRTO_TO_BDRTO EQUITYINVERTO L1CODE L1NAME \\\n",
"0 1030000011 85.80 23.140246 2.7075 3 债券基金 \n",
"1 1030000012 85.80 23.140246 2.7075 3 债券基金 \n",
"2 1030000014 80.75 2.309944 10.3475 3 债券基金 \n",
"3 1030000015 80.75 2.309944 10.3475 3 债券基金 \n",
"4 1030000022 113.76 16.596532 0.0000 3 债券基金 \n",
"... ... ... ... ... ... ... \n",
"1284 1030010008 0.00 NaN 0.0000 3 债券基金 \n",
"1285 1030013271 114.12 0.020749 0.0000 3 债券基金 \n",
"1286 1030013280 93.34 13.607275 15.0875 3 债券基金 \n",
"1287 1030013281 93.34 13.607275 15.0875 3 债券基金 \n",
"1288 1030014382 88.81 15.350972 0.0000 3 债券基金 \n",
"\n",
" L2CODE L2NAME \n",
"0 3.2 普通债券型基金 \n",
"1 3.2 普通债券型基金 \n",
"2 3.2 普通债券型基金 \n",
"3 3.2 普通债券型基金 \n",
"4 3.2 普通债券型基金 \n",
"... ... ... \n",
"1284 3.6 短期理财债券型基金 \n",
"1285 3.2 普通债券型基金 \n",
"1286 3.2 普通债券型基金 \n",
"1287 3.2 普通债券型基金 \n",
"1288 3.2 普通债券型基金 \n",
"\n",
"[1289 rows x 8 columns]"
]
},
"execution_count": 62,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"agg_port"
]
},
{
"cell_type": "code",
"execution_count": 44,
"id": "894e01ee-8f44-472f-b37a-1d23fc8c57c1",
"metadata": {},
"outputs": [],
"source": [
"# 分类\n",
"agg_port.loc[(agg_port[\"BDRTO\"] >= 80) & (agg_port[\"CONVBDRTO_TO_BDRTO\"] >= 80), \"债券型(子类)\"] = \"可转债基金\"\n",
"agg_port.loc[(agg_port[\"BDRTO\"] >= 80) & (agg_port[\"CONVBDRTO_TO_BDRTO\"] >= 5) & (agg_port[\"CONVBDRTO_TO_BDRTO\"] < 80) & (agg_port[\"EQUITYINVERTO\"] <= 0.1), \"债券型(子类)\"] = \"可投转债型债券基金\"\n",
"agg_port.loc[(agg_port[\"BDRTO\"] >= 80) & (agg_port[\"EQUITYINVERTO\"] >= 0.1) & (~agg_port[\"债券型(子类)\"].isin([\"可投转债型债券基金\", \"可转债基金\"])), \"债券型(子类)\"] = \"可投股票型债券基金\"\n",
"agg_port.loc[(agg_port[\"BDRTO\"] >= 80) & (agg_port[\"L2NAME\"] == \"指数债券型基金\") & (~agg_port[\"债券型(子类)\"].isin([\"可投转债型债券基金\", \"可转债基金\"])), \"债券型(子类)\"] = \"被动指数型债券基金\""
]
},
{
"cell_type": "code",
"execution_count": 45,
"id": "0fddaf03-8e90-474d-9584-7a5b60c3a15d",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>SECURITYID</th>\n",
" <th>BDRTO</th>\n",
" <th>CONVBDRTO_TO_BDRTO</th>\n",
" <th>EQUITYINVERTO</th>\n",
" <th>L1CODE</th>\n",
" <th>L1NAME</th>\n",
" <th>L2CODE</th>\n",
" <th>L2NAME</th>\n",
" </tr>\n",
" <tr>\n",
" <th>债券型(子类)</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>可投股票型债券基金</th>\n",
" <td>374</td>\n",
" <td>374</td>\n",
" <td>374</td>\n",
" <td>374</td>\n",
" <td>374</td>\n",
" <td>374</td>\n",
" <td>374</td>\n",
" <td>374</td>\n",
" </tr>\n",
" <tr>\n",
" <th>可投转债型债券基金</th>\n",
" <td>118</td>\n",
" <td>118</td>\n",
" <td>118</td>\n",
" <td>118</td>\n",
" <td>118</td>\n",
" <td>118</td>\n",
" <td>118</td>\n",
" <td>118</td>\n",
" </tr>\n",
" <tr>\n",
" <th>可转债基金</th>\n",
" <td>52</td>\n",
" <td>52</td>\n",
" <td>52</td>\n",
" <td>52</td>\n",
" <td>52</td>\n",
" <td>52</td>\n",
" <td>52</td>\n",
" <td>52</td>\n",
" </tr>\n",
" <tr>\n",
" <th>被动指数型债券基金</th>\n",
" <td>17</td>\n",
" <td>17</td>\n",
" <td>17</td>\n",
" <td>17</td>\n",
" <td>17</td>\n",
" <td>17</td>\n",
" <td>17</td>\n",
" <td>17</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" SECURITYID BDRTO CONVBDRTO_TO_BDRTO EQUITYINVERTO L1CODE \\\n",
"债券型(子类) \n",
"可投股票型债券基金 374 374 374 374 374 \n",
"可投转债型债券基金 118 118 118 118 118 \n",
"可转债基金 52 52 52 52 52 \n",
"被动指数型债券基金 17 17 17 17 17 \n",
"\n",
" L1NAME L2CODE L2NAME \n",
"债券型(子类) \n",
"可投股票型债券基金 374 374 374 \n",
"可投转债型债券基金 118 118 118 \n",
"可转债基金 52 52 52 \n",
"被动指数型债券基金 17 17 17 "
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"agg_port.groupby(\"债券型(子类)\").count()"
]
},
{
"cell_type": "code",
"execution_count": 46,
"id": "6f6fe957-79b3-4e19-9cae-b8e9e489fd8d",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>SECURITYID</th>\n",
" <th>BDRTO</th>\n",
" <th>CONVBDRTO_TO_BDRTO</th>\n",
" <th>EQUITYINVERTO</th>\n",
" <th>L1CODE</th>\n",
" <th>L1NAME</th>\n",
" <th>L2CODE</th>\n",
" <th>L2NAME</th>\n",
" </tr>\n",
" <tr>\n",
" <th>债券型(子类)</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>可投股票型债券基金</th>\n",
" <td>374</td>\n",
" <td>374</td>\n",
" <td>374</td>\n",
" <td>374</td>\n",
" <td>374</td>\n",
" <td>374</td>\n",
" <td>374</td>\n",
" <td>374</td>\n",
" </tr>\n",
" <tr>\n",
" <th>可投转债型债券基金</th>\n",
" <td>118</td>\n",
" <td>118</td>\n",
" <td>118</td>\n",
" <td>118</td>\n",
" <td>118</td>\n",
" <td>118</td>\n",
" <td>118</td>\n",
" <td>118</td>\n",
" </tr>\n",
" <tr>\n",
" <th>可转债基金</th>\n",
" <td>52</td>\n",
" <td>52</td>\n",
" <td>52</td>\n",
" <td>52</td>\n",
" <td>52</td>\n",
" <td>52</td>\n",
" <td>52</td>\n",
" <td>52</td>\n",
" </tr>\n",
" <tr>\n",
" <th>被动指数型债券基金</th>\n",
" <td>17</td>\n",
" <td>17</td>\n",
" <td>17</td>\n",
" <td>17</td>\n",
" <td>17</td>\n",
" <td>17</td>\n",
" <td>17</td>\n",
" <td>17</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" SECURITYID BDRTO CONVBDRTO_TO_BDRTO EQUITYINVERTO L1CODE \\\n",
"债券型(子类) \n",
"可投股票型债券基金 374 374 374 374 374 \n",
"可投转债型债券基金 118 118 118 118 118 \n",
"可转债基金 52 52 52 52 52 \n",
"被动指数型债券基金 17 17 17 17 17 \n",
"\n",
" L1NAME L2CODE L2NAME \n",
"债券型(子类) \n",
"可投股票型债券基金 374 374 374 \n",
"可投转债型债券基金 118 118 118 \n",
"可转债基金 52 52 52 \n",
"被动指数型债券基金 17 17 17 "
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"agg_port.groupby(\"债券型(子类)\").count()"
]
},
{
"cell_type": "code",
"execution_count": 47,
"id": "d6f28858-58fd-44f9-8a3c-edd1537d593e",
"metadata": {},
"outputs": [],
"source": [
"agg_port = pd.merge(agg_port, fd_basicinfo(agg_port.SECURITYID, current_date))"
]
},
{
"cell_type": "code",
"execution_count": 50,
"id": "704bf199-05da-4813-a37a-eb88c348df7d",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>SECURITYID</th>\n",
" <th>BDRTO</th>\n",
" <th>CONVBDRTO_TO_BDRTO</th>\n",
" <th>EQUITYINVERTO</th>\n",
" <th>L1CODE</th>\n",
" <th>L1NAME</th>\n",
" <th>L2CODE</th>\n",
" <th>L2NAME</th>\n",
" <th>债券型(子类)</th>\n",
" <th>FDNAME</th>\n",
" <th>SNAMECOMP</th>\n",
" <th>FSYMBOL</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>183</th>\n",
" <td>1030001112</td>\n",
" <td>94.67</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.000</td>\n",
" <td>3</td>\n",
" <td>债券基金</td>\n",
" <td>3.4</td>\n",
" <td>指数债券型基金</td>\n",
" <td>被动指数型债券基金</td>\n",
" <td>亚债中国债券指数基金</td>\n",
" <td>华夏亚债中国债券指数</td>\n",
" <td>001021</td>\n",
" </tr>\n",
" <tr>\n",
" <th>184</th>\n",
" <td>1030001113</td>\n",
" <td>94.67</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.000</td>\n",
" <td>3</td>\n",
" <td>债券基金</td>\n",
" <td>3.4</td>\n",
" <td>指数债券型基金</td>\n",
" <td>被动指数型债券基金</td>\n",
" <td>亚债中国债券指数基金</td>\n",
" <td>华夏亚债中国债券指数</td>\n",
" <td>001023</td>\n",
" </tr>\n",
" <tr>\n",
" <th>654</th>\n",
" <td>1030005384</td>\n",
" <td>103.71</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.000</td>\n",
" <td>3</td>\n",
" <td>债券基金</td>\n",
" <td>3.4</td>\n",
" <td>指数债券型基金</td>\n",
" <td>被动指数型债券基金</td>\n",
" <td>易方达中债3-5年期国债指数证券投资基金</td>\n",
" <td>None</td>\n",
" <td>001512</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1136</th>\n",
" <td>1030008768</td>\n",
" <td>121.80</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.000</td>\n",
" <td>3</td>\n",
" <td>债券基金</td>\n",
" <td>3.4</td>\n",
" <td>指数债券型基金</td>\n",
" <td>被动指数型债券基金</td>\n",
" <td>中融上海清算所银行间1-3年中高等级信用债指数发起式证券投资基金</td>\n",
" <td>中融银行间1-3年中高等级信用债指数</td>\n",
" <td>003081</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1137</th>\n",
" <td>1030008769</td>\n",
" <td>121.80</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.000</td>\n",
" <td>3</td>\n",
" <td>债券基金</td>\n",
" <td>3.4</td>\n",
" <td>指数债券型基金</td>\n",
" <td>被动指数型债券基金</td>\n",
" <td>中融上海清算所银行间1-3年中高等级信用债指数发起式证券投资基金</td>\n",
" <td>中融银行间1-3年中高等级信用债指数</td>\n",
" <td>003082</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1068</th>\n",
" <td>1030008391</td>\n",
" <td>84.71</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.000</td>\n",
" <td>3</td>\n",
" <td>债券基金</td>\n",
" <td>3.4</td>\n",
" <td>指数债券型基金</td>\n",
" <td>被动指数型债券基金</td>\n",
" <td>中融上海清算所银行间1-3年高等级信用债指数发起式证券投资基金</td>\n",
" <td>中融银行间1-3年高等级信用债指数</td>\n",
" <td>003083</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1069</th>\n",
" <td>1030008392</td>\n",
" <td>84.71</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.000</td>\n",
" <td>3</td>\n",
" <td>债券基金</td>\n",
" <td>3.4</td>\n",
" <td>指数债券型基金</td>\n",
" <td>被动指数型债券基金</td>\n",
" <td>中融上海清算所银行间1-3年高等级信用债指数发起式证券投资基金</td>\n",
" <td>中融银行间1-3年高等级信用债指数</td>\n",
" <td>003084</td>\n",
" </tr>\n",
" <tr>\n",
" <th>931</th>\n",
" <td>1030007676</td>\n",
" <td>106.49</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.000</td>\n",
" <td>3</td>\n",
" <td>债券基金</td>\n",
" <td>3.4</td>\n",
" <td>指数债券型基金</td>\n",
" <td>被动指数型债券基金</td>\n",
" <td>易方达中债7-10年期国开行债券指数证券投资基金</td>\n",
" <td>易方达中债7-10年期国开行债券指数</td>\n",
" <td>003358</td>\n",
" </tr>\n",
" <tr>\n",
" <th>929</th>\n",
" <td>1030007664</td>\n",
" <td>98.43</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.000</td>\n",
" <td>3</td>\n",
" <td>债券基金</td>\n",
" <td>3.4</td>\n",
" <td>指数债券型基金</td>\n",
" <td>被动指数型债券基金</td>\n",
" <td>广发中债7-10年期国开行债券指数证券投资基金</td>\n",
" <td>广发中债7-10年国开债指数</td>\n",
" <td>003376</td>\n",
" </tr>\n",
" <tr>\n",
" <th>930</th>\n",
" <td>1030007665</td>\n",
" <td>98.43</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.000</td>\n",
" <td>3</td>\n",
" <td>债券基金</td>\n",
" <td>3.4</td>\n",
" <td>指数债券型基金</td>\n",
" <td>被动指数型债券基金</td>\n",
" <td>广发中债7-10年期国开行债券指数证券投资基金</td>\n",
" <td>广发中债7-10年国开债指数</td>\n",
" <td>003377</td>\n",
" </tr>\n",
" <tr>\n",
" <th>956</th>\n",
" <td>1030007810</td>\n",
" <td>93.07</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.000</td>\n",
" <td>3</td>\n",
" <td>债券基金</td>\n",
" <td>3.4</td>\n",
" <td>指数债券型基金</td>\n",
" <td>被动指数型债券基金</td>\n",
" <td>中证兴业中高等级信用债指数证券投资基金</td>\n",
" <td>None</td>\n",
" <td>003429</td>\n",
" </tr>\n",
" <tr>\n",
" <th>461</th>\n",
" <td>1030002185</td>\n",
" <td>102.77</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.000</td>\n",
" <td>3</td>\n",
" <td>债券基金</td>\n",
" <td>3.4</td>\n",
" <td>指数债券型基金</td>\n",
" <td>被动指数型债券基金</td>\n",
" <td>嘉实中证金边中期国债交易型开放式指数证券投资基金</td>\n",
" <td>None</td>\n",
" <td>159926</td>\n",
" </tr>\n",
" <tr>\n",
" <th>322</th>\n",
" <td>1030001720</td>\n",
" <td>127.03</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.000</td>\n",
" <td>3</td>\n",
" <td>债券基金</td>\n",
" <td>3.4</td>\n",
" <td>指数债券型基金</td>\n",
" <td>被动指数型债券基金</td>\n",
" <td>易方达中债新综合债券指数发起式证券投资基金(LOF)</td>\n",
" <td>易方达中债新综指发起式(LOF)</td>\n",
" <td>161119</td>\n",
" </tr>\n",
" <tr>\n",
" <th>323</th>\n",
" <td>1030001721</td>\n",
" <td>127.03</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.000</td>\n",
" <td>3</td>\n",
" <td>债券基金</td>\n",
" <td>3.4</td>\n",
" <td>指数债券型基金</td>\n",
" <td>被动指数型债券基金</td>\n",
" <td>易方达中债新综合债券指数发起式证券投资基金(LOF)</td>\n",
" <td>易方达中债新综指发起式(LOF)</td>\n",
" <td>161120</td>\n",
" </tr>\n",
" <tr>\n",
" <th>46</th>\n",
" <td>1030000318</td>\n",
" <td>92.69</td>\n",
" <td>2.537940e+01</td>\n",
" <td>11.615</td>\n",
" <td>3</td>\n",
" <td>债券基金</td>\n",
" <td>3.4</td>\n",
" <td>指数债券型基金</td>\n",
" <td>被动指数型债券基金</td>\n",
" <td>长盛全债指数增强型债券投资基金</td>\n",
" <td>None</td>\n",
" <td>510080</td>\n",
" </tr>\n",
" <tr>\n",
" <th>414</th>\n",
" <td>1030002018</td>\n",
" <td>96.00</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.000</td>\n",
" <td>3</td>\n",
" <td>债券基金</td>\n",
" <td>3.4</td>\n",
" <td>指数债券型基金</td>\n",
" <td>被动指数型债券基金</td>\n",
" <td>上证5年期国债交易型开放式指数证券投资基金</td>\n",
" <td>None</td>\n",
" <td>511010</td>\n",
" </tr>\n",
" <tr>\n",
" <th>609</th>\n",
" <td>1030004134</td>\n",
" <td>102.19</td>\n",
" <td>8.881784e-16</td>\n",
" <td>0.000</td>\n",
" <td>3</td>\n",
" <td>债券基金</td>\n",
" <td>3.4</td>\n",
" <td>指数债券型基金</td>\n",
" <td>被动指数型债券基金</td>\n",
" <td>上证城投债交易型开放式指数证券投资基金</td>\n",
" <td>None</td>\n",
" <td>511220</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" SECURITYID BDRTO CONVBDRTO_TO_BDRTO EQUITYINVERTO L1CODE L1NAME \\\n",
"183 1030001112 94.67 0.000000e+00 0.000 3 债券基金 \n",
"184 1030001113 94.67 0.000000e+00 0.000 3 债券基金 \n",
"654 1030005384 103.71 0.000000e+00 0.000 3 债券基金 \n",
"1136 1030008768 121.80 0.000000e+00 0.000 3 债券基金 \n",
"1137 1030008769 121.80 0.000000e+00 0.000 3 债券基金 \n",
"1068 1030008391 84.71 0.000000e+00 0.000 3 债券基金 \n",
"1069 1030008392 84.71 0.000000e+00 0.000 3 债券基金 \n",
"931 1030007676 106.49 0.000000e+00 0.000 3 债券基金 \n",
"929 1030007664 98.43 0.000000e+00 0.000 3 债券基金 \n",
"930 1030007665 98.43 0.000000e+00 0.000 3 债券基金 \n",
"956 1030007810 93.07 0.000000e+00 0.000 3 债券基金 \n",
"461 1030002185 102.77 0.000000e+00 0.000 3 债券基金 \n",
"322 1030001720 127.03 0.000000e+00 0.000 3 债券基金 \n",
"323 1030001721 127.03 0.000000e+00 0.000 3 债券基金 \n",
"46 1030000318 92.69 2.537940e+01 11.615 3 债券基金 \n",
"414 1030002018 96.00 0.000000e+00 0.000 3 债券基金 \n",
"609 1030004134 102.19 8.881784e-16 0.000 3 债券基金 \n",
"\n",
" L2CODE L2NAME 债券型(子类) FDNAME \\\n",
"183 3.4 指数债券型基金 被动指数型债券基金 亚债中国债券指数基金 \n",
"184 3.4 指数债券型基金 被动指数型债券基金 亚债中国债券指数基金 \n",
"654 3.4 指数债券型基金 被动指数型债券基金 易方达中债3-5年期国债指数证券投资基金 \n",
"1136 3.4 指数债券型基金 被动指数型债券基金 中融上海清算所银行间1-3年中高等级信用债指数发起式证券投资基金 \n",
"1137 3.4 指数债券型基金 被动指数型债券基金 中融上海清算所银行间1-3年中高等级信用债指数发起式证券投资基金 \n",
"1068 3.4 指数债券型基金 被动指数型债券基金 中融上海清算所银行间1-3年高等级信用债指数发起式证券投资基金 \n",
"1069 3.4 指数债券型基金 被动指数型债券基金 中融上海清算所银行间1-3年高等级信用债指数发起式证券投资基金 \n",
"931 3.4 指数债券型基金 被动指数型债券基金 易方达中债7-10年期国开行债券指数证券投资基金 \n",
"929 3.4 指数债券型基金 被动指数型债券基金 广发中债7-10年期国开行债券指数证券投资基金 \n",
"930 3.4 指数债券型基金 被动指数型债券基金 广发中债7-10年期国开行债券指数证券投资基金 \n",
"956 3.4 指数债券型基金 被动指数型债券基金 中证兴业中高等级信用债指数证券投资基金 \n",
"461 3.4 指数债券型基金 被动指数型债券基金 嘉实中证金边中期国债交易型开放式指数证券投资基金 \n",
"322 3.4 指数债券型基金 被动指数型债券基金 易方达中债新综合债券指数发起式证券投资基金(LOF) \n",
"323 3.4 指数债券型基金 被动指数型债券基金 易方达中债新综合债券指数发起式证券投资基金(LOF) \n",
"46 3.4 指数债券型基金 被动指数型债券基金 长盛全债指数增强型债券投资基金 \n",
"414 3.4 指数债券型基金 被动指数型债券基金 上证5年期国债交易型开放式指数证券投资基金 \n",
"609 3.4 指数债券型基金 被动指数型债券基金 上证城投债交易型开放式指数证券投资基金 \n",
"\n",
" SNAMECOMP FSYMBOL \n",
"183 华夏亚债中国债券指数 001021 \n",
"184 华夏亚债中国债券指数 001023 \n",
"654 None 001512 \n",
"1136 中融银行间1-3年中高等级信用债指数 003081 \n",
"1137 中融银行间1-3年中高等级信用债指数 003082 \n",
"1068 中融银行间1-3年高等级信用债指数 003083 \n",
"1069 中融银行间1-3年高等级信用债指数 003084 \n",
"931 易方达中债7-10年期国开行债券指数 003358 \n",
"929 广发中债7-10年国开债指数 003376 \n",
"930 广发中债7-10年国开债指数 003377 \n",
"956 None 003429 \n",
"461 None 159926 \n",
"322 易方达中债新综指发起式(LOF) 161119 \n",
"323 易方达中债新综指发起式(LOF) 161120 \n",
"46 None 510080 \n",
"414 None 511010 \n",
"609 None 511220 "
]
},
"execution_count": 50,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"agg_port[agg_port[\"债券型(子类)\"] == \"被动指数型债券基金\"].sort_values(\"FSYMBOL\")"
]
},
{
"cell_type": "code",
"execution_count": 52,
"id": "e2379113-ddb0-45f2-a927-907407b3787b",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>SECURITYID</th>\n",
" <th>BDRTO</th>\n",
" <th>CONVBDRTO_TO_BDRTO</th>\n",
" <th>EQUITYINVERTO</th>\n",
" <th>L1CODE</th>\n",
" <th>L1NAME</th>\n",
" <th>L2CODE</th>\n",
" <th>L2NAME</th>\n",
" <th>债券型(子类)</th>\n",
" <th>FDNAME</th>\n",
" <th>SNAMECOMP</th>\n",
" <th>FSYMBOL</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"Empty DataFrame\n",
"Columns: [SECURITYID, BDRTO, CONVBDRTO_TO_BDRTO, EQUITYINVERTO, L1CODE, L1NAME, L2CODE, L2NAME, 债券型(子类), FDNAME, SNAMECOMP, FSYMBOL]\n",
"Index: []"
]
},
"execution_count": 52,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"agg_port[agg_port[\"FSYMBOL\"] == \"002659\"]"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "bb0108f9-c5be-459e-8ae0-d6bda4ecb5ee",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python [conda env:root] *",
"language": "python",
"name": "conda-root-py"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.12"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
import datetime as dt
import calendar
import sqlalchemy as sa
import pandas as pd
CONN = "mssql+pymssql://readdnds:reader%402021@121.37.138.1:14331/dnds"
def read_sql(query):
engine = sa.create_engine(CONN, connect_args={"charset": "GBK"})
return pd.read_sql(query, con=engine)
def nearest_report_date(date):
if len(date) == 10:
date = date.replace("-", "")
mm = int(date[4:6])
year = int(date[0:4])
last_year = year
q = (mm // 3 + 1) * 3
last = calendar.monthrange(last_year, q)[1]
return dt.date(last_year, q, last).strftime("%Y%m%d")
def fd_basicinfo(security_ids, trade_dt=None):
if not trade_dt:
trade_dt = dt.datetime.today().strftime("%Y%m%d")
else:
trade_dt = trade_dt.replace("-", "")
if isinstance(security_ids, str):
sec_id_strs = security_ids.split(",")
else:
sec_id_strs = ",".join(["'" + s + "'" for s in security_ids])
engine = sa.create_engine(CONN, connect_args={"charset": "GBK"})
query = f"""
select SECURITYID, FDNAME, SNAMECOMP, FSYMBOL from TQ_FD_BASICINFO
WHERE
ISVALID = 1 AND
SECURITYID in ({sec_id_strs}) AND
(LIQUENDDATE >= '{trade_dt}' or LIQUENDDATE = '19000101')
"""
return pd.read_sql(query, con=engine)
def fd_typeclass(security_ids, trade_dt=None):
if not trade_dt:
trade_dt = dt.datetime.today().strftime("%Y%m%d")
else:
trade_dt = trade_dt.replace("-", "")
if isinstance(security_ids, str):
sec_id_strs = security_ids.split(",")
else:
sec_id_strs = ",".join(["'" + s + "'" for s in security_ids])
engine = sa.create_engine(CONN, connect_args={"charset": "GBK"})
query = f"""
select SECURITYID, L1CODE, L1NAME, L2CODE, L2NAME from TQ_FD_TYPECLASS
WHERE
ISVALID = 1 AND
SECURITYID in ({sec_id_strs})
"""
return pd.read_sql(query, con=engine)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment