Commit 686b4f42 authored by Dr.李's avatar Dr.李

addded 选股能力

parent df441253
......@@ -32,26 +32,17 @@
},
{
"cell_type": "code",
"execution_count": 13,
"execution_count": 3,
"id": "11f4ac54-8a1e-4a23-abb0-785416ff45ed",
"metadata": {},
"outputs": [
{
"ename": "SyntaxError",
"evalue": "closing parenthesis ']' does not match opening parenthesis '(' (Temp/ipykernel_52620/96406359.py, line 6)",
"output_type": "error",
"traceback": [
"\u001b[1;36m File \u001b[1;32m\"C:\\Users\\wegam\\AppData\\Local\\Temp/ipykernel_52620/96406359.py\"\u001b[1;36m, line \u001b[1;32m6\u001b[0m\n\u001b[1;33m asset_portfolios = asset_portfolios[asset_portfolios.REPORTDATE.isin([last_report_date.replace(\"-\", \"\"), report_date.replace(\"-\", \"\")]]\u001b[0m\n\u001b[1;37m ^\u001b[0m\n\u001b[1;31mSyntaxError\u001b[0m\u001b[1;31m:\u001b[0m closing parenthesis ']' does not match opening parenthesis '('\n"
]
}
],
"outputs": [],
"source": [
"def create_timing_analysis(security_ids, reprot_date, benchmark=\"2070000191\"):\n",
" last_report_date = nearest_report_date(advanceDate(report_date, \"-1d\").strftime(\"%Y%m%d\"), freq=\"Q\", method=\"backward\")\n",
"\n",
" index_return = index_rtn(benchmark, last_report_date, report_date)[\"rtn\"].at[0]\n",
" asset_portfolios = fd_assetportfolio(security_ids, last_report_date, report_date).sort_values(\"REPORTDATE\").fillna(0)\n",
" asset_portfolios = asset_portfolios[asset_portfolios.REPORTDATE.isin([last_report_date.replace(\"-\", \"\"), report_date.replace(\"-\", \"\")]]\n",
" asset_portfolios = asset_portfolios[asset_portfolios.REPORTDATE.isin([last_report_date.replace(\"-\", \"\"), report_date.replace(\"-\", \"\")])]\n",
"\n",
" periods_count = asset_portfolios.groupby(\"SECURITYID\")[\"REPORTDATE\"].count()\n",
" periods_count = periods_count[periods_count >= 2]\n",
......@@ -76,7 +67,7 @@
},
{
"cell_type": "code",
"execution_count": 10,
"execution_count": 4,
"id": "7995d877-d609-4cca-97aa-e7acd73850d0",
"metadata": {},
"outputs": [],
......@@ -87,7 +78,7 @@
},
{
"cell_type": "code",
"execution_count": 11,
"execution_count": 5,
"id": "4f833e84-1224-47cb-a811-a6d18e7077ff",
"metadata": {},
"outputs": [],
......@@ -109,7 +100,7 @@
},
{
"cell_type": "code",
"execution_count": 12,
"execution_count": 6,
"id": "ed8f853b-0ac7-49eb-9840-422f2ccfd23e",
"metadata": {},
"outputs": [
......@@ -219,68 +210,68 @@
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13465</th>\n",
" <td>2030019986</td>\n",
" <th>13362</th>\n",
" <td>2030019067</td>\n",
" <td>0.028536</td>\n",
" <td>20211203</td>\n",
" <td>20210930</td>\n",
" <td>20211231</td>\n",
" <td>2.20</td>\n",
" <td>0.00</td>\n",
" <td>0.000000</td>\n",
" <td>False</td>\n",
" <td>-0.000628</td>\n",
" <td>98.91</td>\n",
" <td>96.165857</td>\n",
" <td>True</td>\n",
" <td>0.027441</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13466</th>\n",
" <td>2030020009</td>\n",
" <th>13363</th>\n",
" <td>2030019069</td>\n",
" <td>0.028536</td>\n",
" <td>20211222</td>\n",
" <td>20210930</td>\n",
" <td>20211231</td>\n",
" <td>1.02</td>\n",
" <td>0.00</td>\n",
" <td>0.000000</td>\n",
" <td>False</td>\n",
" <td>-0.000291</td>\n",
" <td>97.46</td>\n",
" <td>94.756086</td>\n",
" <td>True</td>\n",
" <td>0.027039</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13467</th>\n",
" <td>2030020055</td>\n",
" <th>13364</th>\n",
" <td>2030019083</td>\n",
" <td>0.028536</td>\n",
" <td>20211230</td>\n",
" <td>20210930</td>\n",
" <td>20211231</td>\n",
" <td>79.39</td>\n",
" <td>0.00</td>\n",
" <td>0.000000</td>\n",
" <td>False</td>\n",
" <td>-0.022654</td>\n",
" <td>97.62</td>\n",
" <td>94.911647</td>\n",
" <td>True</td>\n",
" <td>0.027084</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13468</th>\n",
" <td>2030020163</td>\n",
" <th>13365</th>\n",
" <td>2030019096</td>\n",
" <td>0.028536</td>\n",
" <td>20211216</td>\n",
" <td>20210930</td>\n",
" <td>20211231</td>\n",
" <td>13.01</td>\n",
" <td>0.00</td>\n",
" <td>0.000000</td>\n",
" <td>False</td>\n",
" <td>-0.003712</td>\n",
" <td>98.72</td>\n",
" <td>95.981129</td>\n",
" <td>True</td>\n",
" <td>0.027389</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13469</th>\n",
" <td>2030020298</td>\n",
" <th>13366</th>\n",
" <td>2030019121</td>\n",
" <td>0.028536</td>\n",
" <td>20211230</td>\n",
" <td>20210930</td>\n",
" <td>20211231</td>\n",
" <td>18.13</td>\n",
" <td>0.00</td>\n",
" <td>0.000000</td>\n",
" <td>False</td>\n",
" <td>-0.005173</td>\n",
" <td>96.19</td>\n",
" <td>93.521321</td>\n",
" <td>True</td>\n",
" <td>0.026687</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>13470 rows × 9 columns</p>\n",
"<p>13367 rows × 9 columns</p>\n",
"</div>"
],
"text/plain": [
......@@ -291,11 +282,11 @@
"3 1030000006 0.028536 20210930 20211231 70.60 67.78 \n",
"4 1030000007 0.028536 20210930 20211231 89.93 91.63 \n",
"... ... ... ... ... ... ... \n",
"13465 2030019986 0.028536 20211203 20211231 2.20 0.00 \n",
"13466 2030020009 0.028536 20211222 20211231 1.02 0.00 \n",
"13467 2030020055 0.028536 20211230 20211231 79.39 0.00 \n",
"13468 2030020163 0.028536 20211216 20211231 13.01 0.00 \n",
"13469 2030020298 0.028536 20211230 20211231 18.13 0.00 \n",
"13362 2030019067 0.028536 20210930 20211231 0.00 98.91 \n",
"13363 2030019069 0.028536 20210930 20211231 0.00 97.46 \n",
"13364 2030019083 0.028536 20210930 20211231 0.00 97.62 \n",
"13365 2030019096 0.028536 20210930 20211231 0.00 98.72 \n",
"13366 2030019121 0.028536 20210930 20211231 0.00 96.19 \n",
"\n",
" adjusted_equity_end is_win timing_rtn \n",
"0 89.253116 False -0.000487 \n",
......@@ -304,16 +295,16 @@
"3 65.899523 False -0.001341 \n",
"4 89.087833 False -0.000240 \n",
"... ... ... ... \n",
"13465 0.000000 False -0.000628 \n",
"13466 0.000000 False -0.000291 \n",
"13467 0.000000 False -0.022654 \n",
"13468 0.000000 False -0.003712 \n",
"13469 0.000000 False -0.005173 \n",
"13362 96.165857 True 0.027441 \n",
"13363 94.756086 True 0.027039 \n",
"13364 94.911647 True 0.027084 \n",
"13365 95.981129 True 0.027389 \n",
"13366 93.521321 True 0.026687 \n",
"\n",
"[13470 rows x 9 columns]"
"[13367 rows x 9 columns]"
]
},
"execution_count": 12,
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
......
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "fdf5036e-f471-425c-94d1-24b8a5cd92ed",
"metadata": {},
"outputs": [],
"source": [
"import sys\n",
"sys.path.append(\"../\")\n",
"import numpy as np\n",
"from fof.utility import *\n",
"from PyFin.api import *"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "3c65b8b9-96bc-4e5e-b4d5-cb634a912eb6",
"metadata": {},
"outputs": [],
"source": [
"# 行业指数 mapping\n",
"\n",
"industry_mapping = pd.read_csv(\"industry_mapping.csv\")\n",
"industry_mapping[\"security_code\"] = industry_mapping.security_code.astype(str)\n",
"industry_mapping[\"industry_code\"] = industry_mapping.industry_code.astype(str)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "cea75f77-8c3f-4c6a-8744-80327e9bdbc4",
"metadata": {},
"outputs": [],
"source": [
"# 获取当前报告期,以及上一个报告期\n",
"\n",
"report_date = \"2021-12-31\"\n",
"trade_date = adjustDateByCalendar(\"china.sse\", report_date, convention=BizDayConventions.Preceding).strftime(\"%Y%m%d\")\n",
"last_report_date = nearest_report_date(advanceDate(report_date, \"-1d\").strftime(\"%Y%m%d\"), freq=\"S\", method=\"backward\")"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "36ca2fdf-da0b-43d2-88ba-5297aed23a40",
"metadata": {},
"outputs": [],
"source": [
"# 获取股票/行业指数收益\n",
"\n",
"index_return = index_rtn(industry_mapping.security_code.tolist(), last_report_date, report_date)\n",
"index_return = pd.merge(index_return, industry_mapping, on=[\"security_code\"])\n",
"\n",
"stk_returns = stk_return(last_report_date, report_date)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "9bd9841c-6a02-46c7-956d-585b85751f4f",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"D:\\dev\\github\\fof\\20220326\\..\\fof\\utility.py:297: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" g[\"weight\"] = g.HOLDMKTCAP / total_value\n"
]
}
],
"source": [
"# 获取所有在库基金的持仓\n",
"\n",
"security_ids = list(fd_basicinfo(trade_dt=report_date).SECURITYID.unique())\n",
"pos_df = fd_skdetail(security_ids, last_report_date)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "905274fb-e78e-4777-bcb1-6a875f58d6ca",
"metadata": {},
"outputs": [],
"source": [
"# 获取所有股票的行业分类\n",
"\n",
"industry_cat = sw_industry_daily(trade_date, trade_date, security_ids=pos_df.security_code.unique())"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "bea341bb-9b7f-4243-a36c-06a2b9e2fa17",
"metadata": {},
"outputs": [],
"source": [
"# 所有数据汇总\n",
"\n",
"total_df = pd.merge(pos_df, industry_cat[[\"security_code\", \"industry_code\", \"industry_name\"]], left_on=\"security_code\", right_on=\"security_code\").sort_values([\"pid\", \"security_code\"])\n",
"total_df = pd.merge(total_df, index_return[[\"industry_code\", \"rtn\"]], on=\"industry_code\").rename(columns={\"rtn\": \"industry_return\"})\n",
"total_df = pd.merge(total_df, stk_returns[[\"security_code\", \"chg_pct\"]], on=\"security_code\").rename(columns={\"chg_pct\": \"stk_return\"})\n",
"total_df[\"excess_return\"] = total_df[\"stk_return\"] - total_df[\"industry_return\"]\n",
"total_df[\"weighted_excess_return\"] = total_df[\"weight\"] * total_df[\"excess_return\"]"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "c8eb0432-6976-4bf6-a7ff-3993416a0b17",
"metadata": {},
"outputs": [],
"source": [
"# 计算指标\n",
"\n",
"## 基金总体行业超额\n",
"portfolio_excess_return = total_df.groupby(\"pid\")[\"weighted_excess_return\"].sum() / total_df.groupby(\"pid\")[\"weight\"].sum()\n",
"portfolio_excess_return.name = \"portfolio_excess_return\"\n",
"portfolio_excess_return = portfolio_excess_return.reset_index()\n",
"\n",
"## 基金分行业超额以及分行业市值\n",
"ind_return_weighted = total_df.groupby([\"pid\", \"industry_name\"])[\"weighted_excess_return\"].sum() / total_df.groupby([\"pid\", \"industry_name\"])[\"weight\"].sum()\n",
"ind_return_weighted.name = \"industry_excess_return\"\n",
"ind_return_weighted = ind_return_weighted.reset_index()\n",
"ind_return_weighted = ind_return_weighted.pivot_table(\"industry_excess_return\", \"pid\", \"industry_name\").fillna(0)\n",
"\n",
"ind_cap = total_df.groupby([\"pid\", \"industry_name\"])[\"HOLDMKTCAP\"].sum()\n",
"ind_cap.name = \"industry_capation\"\n",
"ind_cap = ind_cap.reset_index()\n",
"ind_cap = ind_cap.pivot_table(\"industry_capation\", \"pid\", \"industry_name\").fillna(0)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "226d1f62-9b14-4666-9837-d79931e55e07",
"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>pid</th>\n",
" <th>portfolio_excess_return</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1030000001</td>\n",
" <td>-0.005289</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1030000004</td>\n",
" <td>0.002218</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1030000005</td>\n",
" <td>0.021909</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1030000006</td>\n",
" <td>-0.116637</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1030000007</td>\n",
" <td>-0.077748</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7323</th>\n",
" <td>2030017318</td>\n",
" <td>0.015737</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7324</th>\n",
" <td>2030017336</td>\n",
" <td>-0.016775</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7325</th>\n",
" <td>2030017345</td>\n",
" <td>0.035186</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7326</th>\n",
" <td>2030017816</td>\n",
" <td>-0.129260</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7327</th>\n",
" <td>2030018069</td>\n",
" <td>-0.115075</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>7328 rows × 2 columns</p>\n",
"</div>"
],
"text/plain": [
" pid portfolio_excess_return\n",
"0 1030000001 -0.005289\n",
"1 1030000004 0.002218\n",
"2 1030000005 0.021909\n",
"3 1030000006 -0.116637\n",
"4 1030000007 -0.077748\n",
"... ... ...\n",
"7323 2030017318 0.015737\n",
"7324 2030017336 -0.016775\n",
"7325 2030017345 0.035186\n",
"7326 2030017816 -0.129260\n",
"7327 2030018069 -0.115075\n",
"\n",
"[7328 rows x 2 columns]"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 基金当期总体超额收益\n",
"\n",
"portfolio_excess_return"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "d9c69e46-96cc-48e7-b6e0-435a39255eba",
"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>industry_name</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",
" <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",
" <th>钢铁</th>\n",
" <th>银行</th>\n",
" <th>非银金融</th>\n",
" <th>食品饮料</th>\n",
" </tr>\n",
" <tr>\n",
" <th>pid</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",
" <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",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1030000001</th>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>-0.249004</td>\n",
" <td>0.084191</td>\n",
" <td>0.238508</td>\n",
" <td>0.235527</td>\n",
" <td>0.007881</td>\n",
" <td>0.000000</td>\n",
" <td>1.028651</td>\n",
" <td>-0.241994</td>\n",
" <td>...</td>\n",
" <td>-0.286732</td>\n",
" <td>0.111399</td>\n",
" <td>-0.350679</td>\n",
" <td>-0.289528</td>\n",
" <td>-0.289114</td>\n",
" <td>0.210146</td>\n",
" <td>0.000000</td>\n",
" <td>-0.108106</td>\n",
" <td>0.0</td>\n",
" <td>-0.036242</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1030000004</th>\n",
" <td>0.256112</td>\n",
" <td>0.000000</td>\n",
" <td>-0.068646</td>\n",
" <td>-0.054063</td>\n",
" <td>0.243458</td>\n",
" <td>-0.001795</td>\n",
" <td>-0.017852</td>\n",
" <td>0.000000</td>\n",
" <td>4.664020</td>\n",
" <td>-0.017967</td>\n",
" <td>...</td>\n",
" <td>0.258889</td>\n",
" <td>-0.157412</td>\n",
" <td>-0.107461</td>\n",
" <td>-0.024257</td>\n",
" <td>-0.278417</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>-0.000776</td>\n",
" <td>0.0</td>\n",
" <td>-0.015470</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1030000005</th>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>-0.068646</td>\n",
" <td>-0.096908</td>\n",
" <td>0.238508</td>\n",
" <td>-0.012088</td>\n",
" <td>0.080424</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>-0.244356</td>\n",
" <td>...</td>\n",
" <td>-0.136343</td>\n",
" <td>-0.149861</td>\n",
" <td>0.024657</td>\n",
" <td>0.600275</td>\n",
" <td>-0.148721</td>\n",
" <td>0.000000</td>\n",
" <td>1.390498</td>\n",
" <td>0.000000</td>\n",
" <td>0.0</td>\n",
" <td>-0.174549</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1030000006</th>\n",
" <td>0.000000</td>\n",
" <td>-0.058741</td>\n",
" <td>-0.233884</td>\n",
" <td>0.084191</td>\n",
" <td>0.238508</td>\n",
" <td>0.176984</td>\n",
" <td>-0.107263</td>\n",
" <td>0.000000</td>\n",
" <td>4.664020</td>\n",
" <td>0.059116</td>\n",
" <td>...</td>\n",
" <td>0.656308</td>\n",
" <td>-0.153247</td>\n",
" <td>-0.046337</td>\n",
" <td>0.362820</td>\n",
" <td>-0.047256</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.0</td>\n",
" <td>-0.024366</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1030000007</th>\n",
" <td>0.000000</td>\n",
" <td>0.235398</td>\n",
" <td>-0.155220</td>\n",
" <td>0.084191</td>\n",
" <td>0.238508</td>\n",
" <td>0.170612</td>\n",
" <td>-0.089972</td>\n",
" <td>-0.043129</td>\n",
" <td>4.664020</td>\n",
" <td>-0.019871</td>\n",
" <td>...</td>\n",
" <td>-0.024393</td>\n",
" <td>-0.153247</td>\n",
" <td>-0.107486</td>\n",
" <td>-0.100089</td>\n",
" <td>-0.278315</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>-0.254997</td>\n",
" <td>0.0</td>\n",
" <td>-0.036242</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",
" <td>...</td>\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",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2030017318</th>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>...</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.0</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2030017336</th>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>-0.045383</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>-0.091871</td>\n",
" <td>0.000000</td>\n",
" <td>...</td>\n",
" <td>0.086589</td>\n",
" <td>0.000000</td>\n",
" <td>-0.188825</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>-0.295124</td>\n",
" <td>0.000000</td>\n",
" <td>0.0</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2030017345</th>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>2.195066</td>\n",
" <td>0.000000</td>\n",
" <td>-0.053052</td>\n",
" <td>2.203692</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.094692</td>\n",
" <td>...</td>\n",
" <td>0.018303</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.018987</td>\n",
" <td>-0.516912</td>\n",
" <td>0.169472</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.0</td>\n",
" <td>-0.045557</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2030017816</th>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>-0.129260</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>...</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.0</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2030018069</th>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>-0.112275</td>\n",
" <td>-0.128626</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>...</td>\n",
" <td>-0.051380</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.0</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>7328 rows × 27 columns</p>\n",
"</div>"
],
"text/plain": [
"industry_name 交通运输 休闲服务 传媒 公用事业 农林牧渔 化工 \\\n",
"pid \n",
"1030000001 0.000000 0.000000 -0.249004 0.084191 0.238508 0.235527 \n",
"1030000004 0.256112 0.000000 -0.068646 -0.054063 0.243458 -0.001795 \n",
"1030000005 0.000000 0.000000 -0.068646 -0.096908 0.238508 -0.012088 \n",
"1030000006 0.000000 -0.058741 -0.233884 0.084191 0.238508 0.176984 \n",
"1030000007 0.000000 0.235398 -0.155220 0.084191 0.238508 0.170612 \n",
"... ... ... ... ... ... ... \n",
"2030017318 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n",
"2030017336 0.000000 0.000000 0.000000 0.000000 0.000000 -0.045383 \n",
"2030017345 0.000000 0.000000 0.000000 2.195066 0.000000 -0.053052 \n",
"2030017816 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n",
"2030018069 0.000000 0.000000 0.000000 0.000000 0.000000 -0.112275 \n",
"\n",
"industry_name 医药生物 商业贸易 国防军工 家用电器 ... 电气设备 \\\n",
"pid ... \n",
"1030000001 0.007881 0.000000 1.028651 -0.241994 ... -0.286732 \n",
"1030000004 -0.017852 0.000000 4.664020 -0.017967 ... 0.258889 \n",
"1030000005 0.080424 0.000000 0.000000 -0.244356 ... -0.136343 \n",
"1030000006 -0.107263 0.000000 4.664020 0.059116 ... 0.656308 \n",
"1030000007 -0.089972 -0.043129 4.664020 -0.019871 ... -0.024393 \n",
"... ... ... ... ... ... ... \n",
"2030017318 0.000000 0.000000 0.000000 0.000000 ... 0.000000 \n",
"2030017336 0.000000 0.000000 -0.091871 0.000000 ... 0.086589 \n",
"2030017345 2.203692 0.000000 0.000000 0.094692 ... 0.018303 \n",
"2030017816 -0.129260 0.000000 0.000000 0.000000 ... 0.000000 \n",
"2030018069 -0.128626 0.000000 0.000000 0.000000 ... -0.051380 \n",
"\n",
"industry_name 纺织服装 综合 计算机 轻工制造 通信 钢铁 \\\n",
"pid \n",
"1030000001 0.111399 -0.350679 -0.289528 -0.289114 0.210146 0.000000 \n",
"1030000004 -0.157412 -0.107461 -0.024257 -0.278417 0.000000 0.000000 \n",
"1030000005 -0.149861 0.024657 0.600275 -0.148721 0.000000 1.390498 \n",
"1030000006 -0.153247 -0.046337 0.362820 -0.047256 0.000000 0.000000 \n",
"1030000007 -0.153247 -0.107486 -0.100089 -0.278315 0.000000 0.000000 \n",
"... ... ... ... ... ... ... \n",
"2030017318 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n",
"2030017336 0.000000 -0.188825 0.000000 0.000000 0.000000 -0.295124 \n",
"2030017345 0.000000 0.000000 0.018987 -0.516912 0.169472 0.000000 \n",
"2030017816 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n",
"2030018069 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n",
"\n",
"industry_name 银行 非银金融 食品饮料 \n",
"pid \n",
"1030000001 -0.108106 0.0 -0.036242 \n",
"1030000004 -0.000776 0.0 -0.015470 \n",
"1030000005 0.000000 0.0 -0.174549 \n",
"1030000006 0.000000 0.0 -0.024366 \n",
"1030000007 -0.254997 0.0 -0.036242 \n",
"... ... ... ... \n",
"2030017318 0.000000 0.0 0.000000 \n",
"2030017336 0.000000 0.0 0.000000 \n",
"2030017345 0.000000 0.0 -0.045557 \n",
"2030017816 0.000000 0.0 0.000000 \n",
"2030018069 0.000000 0.0 0.000000 \n",
"\n",
"[7328 rows x 27 columns]"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 基金分行业当期超额收益\n",
"\n",
"ind_return_weighted"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "61a1a70c-ac88-4647-b902-3e90394ae66e",
"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>industry_name</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",
" <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",
" <th>钢铁</th>\n",
" <th>银行</th>\n",
" <th>非银金融</th>\n",
" <th>食品饮料</th>\n",
" </tr>\n",
" <tr>\n",
" <th>pid</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",
" <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",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1030000001</th>\n",
" <td>0.0</td>\n",
" <td>0.000000e+00</td>\n",
" <td>7.454773e+07</td>\n",
" <td>48574.64</td>\n",
" <td>11290.28</td>\n",
" <td>9.622596e+06</td>\n",
" <td>1.806004e+08</td>\n",
" <td>0.00</td>\n",
" <td>75510321.84</td>\n",
" <td>1.585879e+05</td>\n",
" <td>...</td>\n",
" <td>1.186537e+08</td>\n",
" <td>59012192.53</td>\n",
" <td>73144148.68</td>\n",
" <td>2.033256e+08</td>\n",
" <td>1.182012e+05</td>\n",
" <td>19224110.4</td>\n",
" <td>0.0</td>\n",
" <td>34721.10</td>\n",
" <td>0.0</td>\n",
" <td>5.376600e+04</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1030000004</th>\n",
" <td>36570312.5</td>\n",
" <td>0.000000e+00</td>\n",
" <td>8.186690e+03</td>\n",
" <td>9225166.99</td>\n",
" <td>23290410.94</td>\n",
" <td>5.858748e+07</td>\n",
" <td>2.117643e+07</td>\n",
" <td>0.00</td>\n",
" <td>56550.48</td>\n",
" <td>2.967343e+07</td>\n",
" <td>...</td>\n",
" <td>2.600131e+07</td>\n",
" <td>83329.40</td>\n",
" <td>19152007.48</td>\n",
" <td>4.581418e+06</td>\n",
" <td>1.696442e+07</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>53333263.98</td>\n",
" <td>0.0</td>\n",
" <td>3.445327e+07</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1030000005</th>\n",
" <td>0.0</td>\n",
" <td>0.000000e+00</td>\n",
" <td>8.069810e+03</td>\n",
" <td>83070.64</td>\n",
" <td>11290.28</td>\n",
" <td>4.580152e+07</td>\n",
" <td>6.061179e+07</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>4.270400e+04</td>\n",
" <td>...</td>\n",
" <td>2.442499e+07</td>\n",
" <td>49719.70</td>\n",
" <td>12634.36</td>\n",
" <td>3.215646e+04</td>\n",
" <td>1.579440e+04</td>\n",
" <td>0.0</td>\n",
" <td>10963394.0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>1.470207e+07</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1030000006</th>\n",
" <td>0.0</td>\n",
" <td>1.340379e+08</td>\n",
" <td>1.223118e+08</td>\n",
" <td>48574.64</td>\n",
" <td>11290.28</td>\n",
" <td>3.789418e+05</td>\n",
" <td>1.070166e+09</td>\n",
" <td>0.00</td>\n",
" <td>56550.48</td>\n",
" <td>1.716097e+08</td>\n",
" <td>...</td>\n",
" <td>3.302254e+04</td>\n",
" <td>90144.70</td>\n",
" <td>22063.48</td>\n",
" <td>5.161426e+04</td>\n",
" <td>4.799785e+07</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>2.197389e+08</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1030000007</th>\n",
" <td>0.0</td>\n",
" <td>4.200097e+07</td>\n",
" <td>2.065113e+08</td>\n",
" <td>48574.64</td>\n",
" <td>11290.28</td>\n",
" <td>2.148626e+08</td>\n",
" <td>2.168797e+08</td>\n",
" <td>50950877.12</td>\n",
" <td>56550.48</td>\n",
" <td>4.724892e+07</td>\n",
" <td>...</td>\n",
" <td>2.086720e+08</td>\n",
" <td>90144.70</td>\n",
" <td>31902063.48</td>\n",
" <td>1.519100e+05</td>\n",
" <td>1.259041e+08</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>97319.40</td>\n",
" <td>0.0</td>\n",
" <td>5.376600e+04</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",
" <td>...</td>\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",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2030017318</th>\n",
" <td>0.0</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.000000e+00</td>\n",
" <td>...</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>0.000000e+00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2030017336</th>\n",
" <td>0.0</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>1.031485e+07</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.00</td>\n",
" <td>492480.00</td>\n",
" <td>0.000000e+00</td>\n",
" <td>...</td>\n",
" <td>1.924336e+06</td>\n",
" <td>0.00</td>\n",
" <td>1119951.00</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.0</td>\n",
" <td>1105242.0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>0.000000e+00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2030017345</th>\n",
" <td>0.0</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.000000e+00</td>\n",
" <td>4662.00</td>\n",
" <td>0.00</td>\n",
" <td>1.121933e+07</td>\n",
" <td>6.711246e+04</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>4.496250e+06</td>\n",
" <td>...</td>\n",
" <td>1.303973e+07</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>1.369509e+07</td>\n",
" <td>2.233989e+04</td>\n",
" <td>2344148.0</td>\n",
" <td>0.0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>1.211040e+04</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2030017816</th>\n",
" <td>0.0</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.000000e+00</td>\n",
" <td>1.640751e+07</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.000000e+00</td>\n",
" <td>...</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>0.000000e+00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2030018069</th>\n",
" <td>0.0</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>2.901400e+06</td>\n",
" <td>1.836885e+07</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.000000e+00</td>\n",
" <td>...</td>\n",
" <td>1.825967e+07</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>0.000000e+00</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>7328 rows × 27 columns</p>\n",
"</div>"
],
"text/plain": [
"industry_name 交通运输 休闲服务 传媒 公用事业 \\\n",
"pid \n",
"1030000001 0.0 0.000000e+00 7.454773e+07 48574.64 \n",
"1030000004 36570312.5 0.000000e+00 8.186690e+03 9225166.99 \n",
"1030000005 0.0 0.000000e+00 8.069810e+03 83070.64 \n",
"1030000006 0.0 1.340379e+08 1.223118e+08 48574.64 \n",
"1030000007 0.0 4.200097e+07 2.065113e+08 48574.64 \n",
"... ... ... ... ... \n",
"2030017318 0.0 0.000000e+00 0.000000e+00 0.00 \n",
"2030017336 0.0 0.000000e+00 0.000000e+00 0.00 \n",
"2030017345 0.0 0.000000e+00 0.000000e+00 4662.00 \n",
"2030017816 0.0 0.000000e+00 0.000000e+00 0.00 \n",
"2030018069 0.0 0.000000e+00 0.000000e+00 0.00 \n",
"\n",
"industry_name 农林牧渔 化工 医药生物 商业贸易 \\\n",
"pid \n",
"1030000001 11290.28 9.622596e+06 1.806004e+08 0.00 \n",
"1030000004 23290410.94 5.858748e+07 2.117643e+07 0.00 \n",
"1030000005 11290.28 4.580152e+07 6.061179e+07 0.00 \n",
"1030000006 11290.28 3.789418e+05 1.070166e+09 0.00 \n",
"1030000007 11290.28 2.148626e+08 2.168797e+08 50950877.12 \n",
"... ... ... ... ... \n",
"2030017318 0.00 0.000000e+00 0.000000e+00 0.00 \n",
"2030017336 0.00 1.031485e+07 0.000000e+00 0.00 \n",
"2030017345 0.00 1.121933e+07 6.711246e+04 0.00 \n",
"2030017816 0.00 0.000000e+00 1.640751e+07 0.00 \n",
"2030018069 0.00 2.901400e+06 1.836885e+07 0.00 \n",
"\n",
"industry_name 国防军工 家用电器 ... 电气设备 纺织服装 \\\n",
"pid ... \n",
"1030000001 75510321.84 1.585879e+05 ... 1.186537e+08 59012192.53 \n",
"1030000004 56550.48 2.967343e+07 ... 2.600131e+07 83329.40 \n",
"1030000005 0.00 4.270400e+04 ... 2.442499e+07 49719.70 \n",
"1030000006 56550.48 1.716097e+08 ... 3.302254e+04 90144.70 \n",
"1030000007 56550.48 4.724892e+07 ... 2.086720e+08 90144.70 \n",
"... ... ... ... ... ... \n",
"2030017318 0.00 0.000000e+00 ... 0.000000e+00 0.00 \n",
"2030017336 492480.00 0.000000e+00 ... 1.924336e+06 0.00 \n",
"2030017345 0.00 4.496250e+06 ... 1.303973e+07 0.00 \n",
"2030017816 0.00 0.000000e+00 ... 0.000000e+00 0.00 \n",
"2030018069 0.00 0.000000e+00 ... 1.825967e+07 0.00 \n",
"\n",
"industry_name 综合 计算机 轻工制造 通信 \\\n",
"pid \n",
"1030000001 73144148.68 2.033256e+08 1.182012e+05 19224110.4 \n",
"1030000004 19152007.48 4.581418e+06 1.696442e+07 0.0 \n",
"1030000005 12634.36 3.215646e+04 1.579440e+04 0.0 \n",
"1030000006 22063.48 5.161426e+04 4.799785e+07 0.0 \n",
"1030000007 31902063.48 1.519100e+05 1.259041e+08 0.0 \n",
"... ... ... ... ... \n",
"2030017318 0.00 0.000000e+00 0.000000e+00 0.0 \n",
"2030017336 1119951.00 0.000000e+00 0.000000e+00 0.0 \n",
"2030017345 0.00 1.369509e+07 2.233989e+04 2344148.0 \n",
"2030017816 0.00 0.000000e+00 0.000000e+00 0.0 \n",
"2030018069 0.00 0.000000e+00 0.000000e+00 0.0 \n",
"\n",
"industry_name 钢铁 银行 非银金融 食品饮料 \n",
"pid \n",
"1030000001 0.0 34721.10 0.0 5.376600e+04 \n",
"1030000004 0.0 53333263.98 0.0 3.445327e+07 \n",
"1030000005 10963394.0 0.00 0.0 1.470207e+07 \n",
"1030000006 0.0 0.00 0.0 2.197389e+08 \n",
"1030000007 0.0 97319.40 0.0 5.376600e+04 \n",
"... ... ... ... ... \n",
"2030017318 0.0 0.00 0.0 0.000000e+00 \n",
"2030017336 1105242.0 0.00 0.0 0.000000e+00 \n",
"2030017345 0.0 0.00 0.0 1.211040e+04 \n",
"2030017816 0.0 0.00 0.0 0.000000e+00 \n",
"2030018069 0.0 0.00 0.0 0.000000e+00 \n",
"\n",
"[7328 rows x 27 columns]"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 基金风行业行业市值\n",
"\n",
"ind_cap"
]
},
{
"cell_type": "markdown",
"id": "41360cf6-5dac-4f1b-bff3-ba807d26c8fc",
"metadata": {},
"source": [
"## 1.1 Put it all together\n",
"\n",
"以下函数,计算在指定观察日,最近一期(半年度)的基金的行业超额水平"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "bf1b13e0-6a37-4389-8b14-8e6b5968cb80",
"metadata": {},
"outputs": [],
"source": [
"def create_portfolio_excess_analysis(security_ids, reprot_date):\n",
" \n",
" industry_mapping = pd.read_csv(\"industry_mapping.csv\")\n",
" industry_mapping[\"security_code\"] = industry_mapping.security_code.astype(str)\n",
" industry_mapping[\"industry_code\"] = industry_mapping.industry_code.astype(str)\n",
" \n",
" trade_date = adjustDateByCalendar(\"china.sse\", report_date, convention=BizDayConventions.Preceding).strftime(\"%Y%m%d\")\n",
" last_report_date = nearest_report_date(advanceDate(report_date, \"-1d\").strftime(\"%Y%m%d\"), freq=\"S\", method=\"backward\")\n",
" \n",
" # 获取股票/行业指数收益\n",
" index_return = index_rtn(industry_mapping.security_code.tolist(), last_report_date, report_date)\n",
" index_return = pd.merge(index_return, industry_mapping, on=[\"security_code\"])\n",
" stk_returns = stk_return(last_report_date, report_date)\n",
" \n",
" # 获取基金的持仓\n",
" pos_df = fd_skdetail(security_ids, last_report_date)\n",
" \n",
" # 获取所有股票的行业分类\n",
" industry_cat = sw_industry_daily(trade_date, trade_date, security_ids=pos_df.security_code.unique())\n",
" \n",
" # 所有数据汇总\n",
" total_df = pd.merge(pos_df, industry_cat[[\"security_code\", \"industry_code\", \"industry_name\"]], left_on=\"security_code\", right_on=\"security_code\").sort_values([\"pid\", \"security_code\"])\n",
" total_df = pd.merge(total_df, index_return[[\"industry_code\", \"rtn\"]], on=\"industry_code\").rename(columns={\"rtn\": \"industry_return\"})\n",
" total_df = pd.merge(total_df, stk_returns[[\"security_code\", \"chg_pct\"]], on=\"security_code\").rename(columns={\"chg_pct\": \"stk_return\"})\n",
" total_df[\"excess_return\"] = total_df[\"stk_return\"] - total_df[\"industry_return\"]\n",
" total_df[\"weighted_excess_return\"] = total_df[\"weight\"] * total_df[\"excess_return\"]\n",
"\n",
" # 计算指标\n",
"\n",
" ## 基金总体行业超额\n",
" portfolio_excess_return = total_df.groupby(\"pid\")[\"weighted_excess_return\"].sum() / total_df.groupby(\"pid\")[\"weight\"].sum()\n",
" portfolio_excess_return.name = \"portfolio_excess_return\"\n",
" portfolio_excess_return = portfolio_excess_return.reset_index()\n",
"\n",
" ## 基金分行业超额以及分行业市值\n",
" ind_return_weighted = total_df.groupby([\"pid\", \"industry_name\"])[\"weighted_excess_return\"].sum() / total_df.groupby([\"pid\", \"industry_name\"])[\"weight\"].sum()\n",
" ind_return_weighted.name = \"industry_excess_return\"\n",
" ind_return_weighted = ind_return_weighted.reset_index()\n",
" ind_return_weighted = ind_return_weighted.pivot_table(\"industry_excess_return\", \"pid\", \"industry_name\").fillna(0)\n",
"\n",
" ind_cap = total_df.groupby([\"pid\", \"industry_name\"])[\"HOLDMKTCAP\"].sum()\n",
" ind_cap.name = \"industry_capation\"\n",
" ind_cap = ind_cap.reset_index()\n",
" ind_cap = ind_cap.pivot_table(\"industry_capation\", \"pid\", \"industry_name\").fillna(0)\n",
" \n",
" return portfolio_excess_return, ind_return_weighted, ind_cap"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "85f44566-44fa-47f9-8ffb-67754f0efd7f",
"metadata": {},
"outputs": [],
"source": [
"report_date = \"2021-06-30\"\n",
"security_ids = list(fd_basicinfo(trade_dt=report_date).SECURITYID.unique())"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "69f1f6c8-44ea-4eb2-bec0-7f08c6c4181e",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"D:\\dev\\github\\fof\\20220326\\..\\fof\\utility.py:297: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" g[\"weight\"] = g.HOLDMKTCAP / total_value\n"
]
}
],
"source": [
"portfolio_excess_return, ind_return_weighted, ind_cap = create_portfolio_excess_analysis(security_ids, report_date) "
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "ba8aa3b2-1413-4fea-b5c9-8eb87d2d056c",
"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>pid</th>\n",
" <th>portfolio_excess_return</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1030000001</td>\n",
" <td>-0.012559</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1030000004</td>\n",
" <td>-0.033978</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1030000005</td>\n",
" <td>-0.071478</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1030000006</td>\n",
" <td>0.055331</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1030000007</td>\n",
" <td>-0.096477</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6359</th>\n",
" <td>2030016431</td>\n",
" <td>0.018161</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6360</th>\n",
" <td>2030016433</td>\n",
" <td>-0.018794</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6361</th>\n",
" <td>2030016435</td>\n",
" <td>0.030481</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6362</th>\n",
" <td>2030016437</td>\n",
" <td>0.090285</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6363</th>\n",
" <td>2030016439</td>\n",
" <td>-0.009720</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>6364 rows × 2 columns</p>\n",
"</div>"
],
"text/plain": [
" pid portfolio_excess_return\n",
"0 1030000001 -0.012559\n",
"1 1030000004 -0.033978\n",
"2 1030000005 -0.071478\n",
"3 1030000006 0.055331\n",
"4 1030000007 -0.096477\n",
"... ... ...\n",
"6359 2030016431 0.018161\n",
"6360 2030016433 -0.018794\n",
"6361 2030016435 0.030481\n",
"6362 2030016437 0.090285\n",
"6363 2030016439 -0.009720\n",
"\n",
"[6364 rows x 2 columns]"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"portfolio_excess_return"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "8d7a7f9d-e7e1-4f04-91aa-93d21874ef22",
"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>industry_name</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",
" <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",
" <th>钢铁</th>\n",
" <th>银行</th>\n",
" <th>非银金融</th>\n",
" <th>食品饮料</th>\n",
" </tr>\n",
" <tr>\n",
" <th>pid</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",
" <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",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1030000001</th>\n",
" <td>0.027219</td>\n",
" <td>-0.243673</td>\n",
" <td>-0.100605</td>\n",
" <td>-0.079526</td>\n",
" <td>-0.120066</td>\n",
" <td>0.397619</td>\n",
" <td>-0.131412</td>\n",
" <td>0.000000</td>\n",
" <td>-0.052048</td>\n",
" <td>0.819216</td>\n",
" <td>...</td>\n",
" <td>-0.057668</td>\n",
" <td>0.070444</td>\n",
" <td>0.078007</td>\n",
" <td>-0.133367</td>\n",
" <td>0.000000</td>\n",
" <td>-0.055862</td>\n",
" <td>-0.339874</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>-0.067343</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1030000004</th>\n",
" <td>0.027219</td>\n",
" <td>-0.243673</td>\n",
" <td>0.000000</td>\n",
" <td>-0.020686</td>\n",
" <td>-0.080782</td>\n",
" <td>0.086822</td>\n",
" <td>-0.123067</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>...</td>\n",
" <td>0.181278</td>\n",
" <td>-0.358230</td>\n",
" <td>-0.011603</td>\n",
" <td>-0.079317</td>\n",
" <td>0.075350</td>\n",
" <td>4.082255</td>\n",
" <td>-0.339874</td>\n",
" <td>0.047841</td>\n",
" <td>0.000000</td>\n",
" <td>-0.055954</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1030000005</th>\n",
" <td>0.027219</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>-0.128598</td>\n",
" <td>-0.120066</td>\n",
" <td>-0.063840</td>\n",
" <td>-0.177881</td>\n",
" <td>0.000000</td>\n",
" <td>0.135774</td>\n",
" <td>-0.098720</td>\n",
" <td>...</td>\n",
" <td>0.039201</td>\n",
" <td>-0.331813</td>\n",
" <td>0.935214</td>\n",
" <td>-0.093547</td>\n",
" <td>0.019887</td>\n",
" <td>1.070374</td>\n",
" <td>-0.339874</td>\n",
" <td>0.000000</td>\n",
" <td>-0.005269</td>\n",
" <td>-0.082037</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1030000006</th>\n",
" <td>-0.041567</td>\n",
" <td>0.013076</td>\n",
" <td>0.075309</td>\n",
" <td>-0.160220</td>\n",
" <td>0.261110</td>\n",
" <td>-0.082978</td>\n",
" <td>0.641327</td>\n",
" <td>0.000000</td>\n",
" <td>0.063575</td>\n",
" <td>0.007678</td>\n",
" <td>...</td>\n",
" <td>0.267742</td>\n",
" <td>-0.328437</td>\n",
" <td>-0.011738</td>\n",
" <td>-0.155664</td>\n",
" <td>-0.145388</td>\n",
" <td>0.028768</td>\n",
" <td>-0.317396</td>\n",
" <td>0.088514</td>\n",
" <td>-0.005269</td>\n",
" <td>-0.222966</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1030000007</th>\n",
" <td>-0.375820</td>\n",
" <td>-0.118565</td>\n",
" <td>0.019248</td>\n",
" <td>-0.079526</td>\n",
" <td>-0.270425</td>\n",
" <td>-0.211197</td>\n",
" <td>0.366141</td>\n",
" <td>-0.091448</td>\n",
" <td>-0.052048</td>\n",
" <td>0.819216</td>\n",
" <td>...</td>\n",
" <td>-0.224718</td>\n",
" <td>-0.251385</td>\n",
" <td>0.935214</td>\n",
" <td>0.042654</td>\n",
" <td>-0.154181</td>\n",
" <td>4.082255</td>\n",
" <td>-0.339874</td>\n",
" <td>0.184179</td>\n",
" <td>-0.005269</td>\n",
" <td>-0.016488</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",
" <td>...</td>\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",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2030016431</th>\n",
" <td>0.000000</td>\n",
" <td>0.040349</td>\n",
" <td>-0.145788</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>-0.187915</td>\n",
" <td>0.065480</td>\n",
" <td>0.000000</td>\n",
" <td>0.050628</td>\n",
" <td>0.134335</td>\n",
" <td>...</td>\n",
" <td>-0.123908</td>\n",
" <td>0.070452</td>\n",
" <td>0.077257</td>\n",
" <td>0.030829</td>\n",
" <td>0.000000</td>\n",
" <td>-0.067309</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.845389</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2030016433</th>\n",
" <td>-0.252331</td>\n",
" <td>0.028089</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>-0.167187</td>\n",
" <td>0.052448</td>\n",
" <td>0.000000</td>\n",
" <td>0.136502</td>\n",
" <td>-0.005071</td>\n",
" <td>...</td>\n",
" <td>-0.050813</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>-0.157086</td>\n",
" <td>-0.108208</td>\n",
" <td>4.082255</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.034461</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2030016435</th>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>-0.207255</td>\n",
" <td>0.000000</td>\n",
" <td>-0.020194</td>\n",
" <td>-0.124171</td>\n",
" <td>0.000000</td>\n",
" <td>-0.005028</td>\n",
" <td>4.019525</td>\n",
" <td>...</td>\n",
" <td>-0.429501</td>\n",
" <td>-0.251385</td>\n",
" <td>0.000000</td>\n",
" <td>-0.083830</td>\n",
" <td>0.635967</td>\n",
" <td>4.082255</td>\n",
" <td>0.000000</td>\n",
" <td>0.039471</td>\n",
" <td>0.000000</td>\n",
" <td>0.099397</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2030016437</th>\n",
" <td>-0.252331</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>-0.207255</td>\n",
" <td>0.000000</td>\n",
" <td>0.144299</td>\n",
" <td>0.234113</td>\n",
" <td>-0.247809</td>\n",
" <td>0.065065</td>\n",
" <td>0.135002</td>\n",
" <td>...</td>\n",
" <td>-0.022210</td>\n",
" <td>-0.252933</td>\n",
" <td>0.000000</td>\n",
" <td>-0.050639</td>\n",
" <td>0.000000</td>\n",
" <td>-0.065565</td>\n",
" <td>0.000000</td>\n",
" <td>0.055627</td>\n",
" <td>0.049837</td>\n",
" <td>0.014180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2030016439</th>\n",
" <td>-0.252325</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>-0.161904</td>\n",
" <td>0.000000</td>\n",
" <td>-0.023647</td>\n",
" <td>3.681914</td>\n",
" <td>0.000000</td>\n",
" <td>-0.005028</td>\n",
" <td>2.254323</td>\n",
" <td>...</td>\n",
" <td>-0.321437</td>\n",
" <td>-0.251385</td>\n",
" <td>0.000000</td>\n",
" <td>-0.158674</td>\n",
" <td>0.019887</td>\n",
" <td>4.082255</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.084437</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>6364 rows × 27 columns</p>\n",
"</div>"
],
"text/plain": [
"industry_name 交通运输 休闲服务 传媒 公用事业 农林牧渔 化工 \\\n",
"pid \n",
"1030000001 0.027219 -0.243673 -0.100605 -0.079526 -0.120066 0.397619 \n",
"1030000004 0.027219 -0.243673 0.000000 -0.020686 -0.080782 0.086822 \n",
"1030000005 0.027219 0.000000 0.000000 -0.128598 -0.120066 -0.063840 \n",
"1030000006 -0.041567 0.013076 0.075309 -0.160220 0.261110 -0.082978 \n",
"1030000007 -0.375820 -0.118565 0.019248 -0.079526 -0.270425 -0.211197 \n",
"... ... ... ... ... ... ... \n",
"2030016431 0.000000 0.040349 -0.145788 0.000000 0.000000 -0.187915 \n",
"2030016433 -0.252331 0.028089 0.000000 0.000000 0.000000 -0.167187 \n",
"2030016435 0.000000 0.000000 0.000000 -0.207255 0.000000 -0.020194 \n",
"2030016437 -0.252331 0.000000 0.000000 -0.207255 0.000000 0.144299 \n",
"2030016439 -0.252325 0.000000 0.000000 -0.161904 0.000000 -0.023647 \n",
"\n",
"industry_name 医药生物 商业贸易 国防军工 家用电器 ... 电气设备 \\\n",
"pid ... \n",
"1030000001 -0.131412 0.000000 -0.052048 0.819216 ... -0.057668 \n",
"1030000004 -0.123067 0.000000 0.000000 0.000000 ... 0.181278 \n",
"1030000005 -0.177881 0.000000 0.135774 -0.098720 ... 0.039201 \n",
"1030000006 0.641327 0.000000 0.063575 0.007678 ... 0.267742 \n",
"1030000007 0.366141 -0.091448 -0.052048 0.819216 ... -0.224718 \n",
"... ... ... ... ... ... ... \n",
"2030016431 0.065480 0.000000 0.050628 0.134335 ... -0.123908 \n",
"2030016433 0.052448 0.000000 0.136502 -0.005071 ... -0.050813 \n",
"2030016435 -0.124171 0.000000 -0.005028 4.019525 ... -0.429501 \n",
"2030016437 0.234113 -0.247809 0.065065 0.135002 ... -0.022210 \n",
"2030016439 3.681914 0.000000 -0.005028 2.254323 ... -0.321437 \n",
"\n",
"industry_name 纺织服装 综合 计算机 轻工制造 通信 钢铁 \\\n",
"pid \n",
"1030000001 0.070444 0.078007 -0.133367 0.000000 -0.055862 -0.339874 \n",
"1030000004 -0.358230 -0.011603 -0.079317 0.075350 4.082255 -0.339874 \n",
"1030000005 -0.331813 0.935214 -0.093547 0.019887 1.070374 -0.339874 \n",
"1030000006 -0.328437 -0.011738 -0.155664 -0.145388 0.028768 -0.317396 \n",
"1030000007 -0.251385 0.935214 0.042654 -0.154181 4.082255 -0.339874 \n",
"... ... ... ... ... ... ... \n",
"2030016431 0.070452 0.077257 0.030829 0.000000 -0.067309 0.000000 \n",
"2030016433 0.000000 0.000000 -0.157086 -0.108208 4.082255 0.000000 \n",
"2030016435 -0.251385 0.000000 -0.083830 0.635967 4.082255 0.000000 \n",
"2030016437 -0.252933 0.000000 -0.050639 0.000000 -0.065565 0.000000 \n",
"2030016439 -0.251385 0.000000 -0.158674 0.019887 4.082255 0.000000 \n",
"\n",
"industry_name 银行 非银金融 食品饮料 \n",
"pid \n",
"1030000001 0.000000 0.000000 -0.067343 \n",
"1030000004 0.047841 0.000000 -0.055954 \n",
"1030000005 0.000000 -0.005269 -0.082037 \n",
"1030000006 0.088514 -0.005269 -0.222966 \n",
"1030000007 0.184179 -0.005269 -0.016488 \n",
"... ... ... ... \n",
"2030016431 0.000000 0.000000 0.845389 \n",
"2030016433 0.000000 0.000000 0.034461 \n",
"2030016435 0.039471 0.000000 0.099397 \n",
"2030016437 0.055627 0.049837 0.014180 \n",
"2030016439 0.000000 0.000000 0.084437 \n",
"\n",
"[6364 rows x 27 columns]"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ind_return_weighted"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "1cc3c9cb-892c-4927-9a48-0210e51935a8",
"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>industry_name</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",
" <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",
" <th>钢铁</th>\n",
" <th>银行</th>\n",
" <th>非银金融</th>\n",
" <th>食品饮料</th>\n",
" </tr>\n",
" <tr>\n",
" <th>pid</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",
" <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",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1030000001</th>\n",
" <td>1.999888e+04</td>\n",
" <td>4.826127e+04</td>\n",
" <td>1.837828e+08</td>\n",
" <td>6.297216e+04</td>\n",
" <td>1.069545e+06</td>\n",
" <td>2.637949e+07</td>\n",
" <td>2.885386e+08</td>\n",
" <td>0.0</td>\n",
" <td>3.821110e+04</td>\n",
" <td>1.021554e+04</td>\n",
" <td>...</td>\n",
" <td>1.786656e+08</td>\n",
" <td>9.769972e+07</td>\n",
" <td>17900849.20</td>\n",
" <td>1.582151e+08</td>\n",
" <td>0.000000e+00</td>\n",
" <td>1.647230e+08</td>\n",
" <td>9402.21</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.000000e+00</td>\n",
" <td>3.999200e+04</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1030000004</th>\n",
" <td>1.999888e+04</td>\n",
" <td>4.826127e+04</td>\n",
" <td>0.000000e+00</td>\n",
" <td>1.501858e+07</td>\n",
" <td>2.860810e+07</td>\n",
" <td>5.390643e+07</td>\n",
" <td>9.073906e+07</td>\n",
" <td>0.0</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.000000e+00</td>\n",
" <td>...</td>\n",
" <td>9.159689e+06</td>\n",
" <td>2.893365e+04</td>\n",
" <td>30122649.20</td>\n",
" <td>8.121627e+04</td>\n",
" <td>7.550000e+06</td>\n",
" <td>5.909490e+03</td>\n",
" <td>9402.21</td>\n",
" <td>7.334502e+07</td>\n",
" <td>0.000000e+00</td>\n",
" <td>1.017293e+08</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1030000005</th>\n",
" <td>1.999888e+04</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.000000e+00</td>\n",
" <td>5.742621e+04</td>\n",
" <td>2.366172e+05</td>\n",
" <td>2.694165e+07</td>\n",
" <td>7.082668e+07</td>\n",
" <td>0.0</td>\n",
" <td>9.894922e+06</td>\n",
" <td>1.904220e+07</td>\n",
" <td>...</td>\n",
" <td>2.172023e+07</td>\n",
" <td>3.843687e+04</td>\n",
" <td>15649.20</td>\n",
" <td>9.439376e+04</td>\n",
" <td>1.497750e+04</td>\n",
" <td>2.099169e+04</td>\n",
" <td>9402.21</td>\n",
" <td>0.000000e+00</td>\n",
" <td>1.714383e+06</td>\n",
" <td>2.269042e+07</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1030000006</th>\n",
" <td>3.519698e+04</td>\n",
" <td>2.199831e+07</td>\n",
" <td>2.055871e+07</td>\n",
" <td>1.095501e+08</td>\n",
" <td>7.933913e+07</td>\n",
" <td>1.095159e+08</td>\n",
" <td>4.269330e+07</td>\n",
" <td>0.0</td>\n",
" <td>5.659414e+07</td>\n",
" <td>1.426874e+07</td>\n",
" <td>...</td>\n",
" <td>8.726372e+07</td>\n",
" <td>2.044139e+06</td>\n",
" <td>41498113.86</td>\n",
" <td>7.684011e+07</td>\n",
" <td>9.535366e+07</td>\n",
" <td>3.992568e+07</td>\n",
" <td>38792.33</td>\n",
" <td>2.692022e+08</td>\n",
" <td>1.714383e+06</td>\n",
" <td>4.166626e+07</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1030000007</th>\n",
" <td>3.226410e+07</td>\n",
" <td>1.435779e+08</td>\n",
" <td>2.066461e+08</td>\n",
" <td>6.297216e+04</td>\n",
" <td>2.175265e+08</td>\n",
" <td>5.179360e+08</td>\n",
" <td>1.667194e+07</td>\n",
" <td>97822903.8</td>\n",
" <td>3.821110e+04</td>\n",
" <td>1.021554e+04</td>\n",
" <td>...</td>\n",
" <td>2.281993e+08</td>\n",
" <td>9.503220e+03</td>\n",
" <td>15649.20</td>\n",
" <td>1.116465e+08</td>\n",
" <td>3.554286e+08</td>\n",
" <td>5.909490e+03</td>\n",
" <td>9402.21</td>\n",
" <td>3.075586e+07</td>\n",
" <td>1.714383e+06</td>\n",
" <td>5.657474e+04</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",
" <td>...</td>\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",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2030016431</th>\n",
" <td>0.000000e+00</td>\n",
" <td>1.803866e+08</td>\n",
" <td>1.889017e+08</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.000000e+00</td>\n",
" <td>9.769953e+07</td>\n",
" <td>7.237749e+08</td>\n",
" <td>0.0</td>\n",
" <td>3.406544e+08</td>\n",
" <td>2.535546e+08</td>\n",
" <td>...</td>\n",
" <td>2.657841e+08</td>\n",
" <td>1.286518e+08</td>\n",
" <td>36200671.00</td>\n",
" <td>1.053092e+08</td>\n",
" <td>0.000000e+00</td>\n",
" <td>1.734509e+08</td>\n",
" <td>0.00</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.000000e+00</td>\n",
" <td>7.286400e+03</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2030016433</th>\n",
" <td>1.845428e+08</td>\n",
" <td>1.766615e+08</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.000000e+00</td>\n",
" <td>2.897478e+08</td>\n",
" <td>4.418623e+08</td>\n",
" <td>0.0</td>\n",
" <td>1.202044e+08</td>\n",
" <td>3.085729e+08</td>\n",
" <td>...</td>\n",
" <td>3.680876e+08</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.00</td>\n",
" <td>5.514241e+08</td>\n",
" <td>1.302726e+08</td>\n",
" <td>5.909490e+03</td>\n",
" <td>0.00</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.000000e+00</td>\n",
" <td>3.164042e+08</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2030016435</th>\n",
" <td>0.000000e+00</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.000000e+00</td>\n",
" <td>4.234511e+04</td>\n",
" <td>0.000000e+00</td>\n",
" <td>1.212970e+08</td>\n",
" <td>1.426487e+08</td>\n",
" <td>0.0</td>\n",
" <td>9.063460e+03</td>\n",
" <td>2.321716e+04</td>\n",
" <td>...</td>\n",
" <td>1.443445e+06</td>\n",
" <td>9.503220e+03</td>\n",
" <td>0.00</td>\n",
" <td>3.189373e+04</td>\n",
" <td>9.335700e+03</td>\n",
" <td>5.909490e+03</td>\n",
" <td>0.00</td>\n",
" <td>3.979284e+07</td>\n",
" <td>0.000000e+00</td>\n",
" <td>4.097997e+08</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2030016437</th>\n",
" <td>1.279335e+07</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.000000e+00</td>\n",
" <td>4.234511e+04</td>\n",
" <td>0.000000e+00</td>\n",
" <td>8.227093e+07</td>\n",
" <td>2.834888e+08</td>\n",
" <td>9209376.0</td>\n",
" <td>2.538841e+08</td>\n",
" <td>1.006988e+07</td>\n",
" <td>...</td>\n",
" <td>3.114333e+08</td>\n",
" <td>4.972629e+07</td>\n",
" <td>0.00</td>\n",
" <td>7.055212e+07</td>\n",
" <td>0.000000e+00</td>\n",
" <td>1.300529e+07</td>\n",
" <td>0.00</td>\n",
" <td>3.264276e+08</td>\n",
" <td>1.337159e+08</td>\n",
" <td>5.889060e+07</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2030016439</th>\n",
" <td>3.027833e+08</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.000000e+00</td>\n",
" <td>5.635397e+04</td>\n",
" <td>0.000000e+00</td>\n",
" <td>1.522036e+08</td>\n",
" <td>1.374297e+05</td>\n",
" <td>0.0</td>\n",
" <td>9.063460e+03</td>\n",
" <td>4.469550e+04</td>\n",
" <td>...</td>\n",
" <td>4.681270e+05</td>\n",
" <td>9.503220e+03</td>\n",
" <td>0.00</td>\n",
" <td>1.419305e+08</td>\n",
" <td>1.497750e+04</td>\n",
" <td>5.909490e+03</td>\n",
" <td>0.00</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.000000e+00</td>\n",
" <td>4.109454e+04</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>6364 rows × 27 columns</p>\n",
"</div>"
],
"text/plain": [
"industry_name 交通运输 休闲服务 传媒 公用事业 \\\n",
"pid \n",
"1030000001 1.999888e+04 4.826127e+04 1.837828e+08 6.297216e+04 \n",
"1030000004 1.999888e+04 4.826127e+04 0.000000e+00 1.501858e+07 \n",
"1030000005 1.999888e+04 0.000000e+00 0.000000e+00 5.742621e+04 \n",
"1030000006 3.519698e+04 2.199831e+07 2.055871e+07 1.095501e+08 \n",
"1030000007 3.226410e+07 1.435779e+08 2.066461e+08 6.297216e+04 \n",
"... ... ... ... ... \n",
"2030016431 0.000000e+00 1.803866e+08 1.889017e+08 0.000000e+00 \n",
"2030016433 1.845428e+08 1.766615e+08 0.000000e+00 0.000000e+00 \n",
"2030016435 0.000000e+00 0.000000e+00 0.000000e+00 4.234511e+04 \n",
"2030016437 1.279335e+07 0.000000e+00 0.000000e+00 4.234511e+04 \n",
"2030016439 3.027833e+08 0.000000e+00 0.000000e+00 5.635397e+04 \n",
"\n",
"industry_name 农林牧渔 化工 医药生物 商业贸易 \\\n",
"pid \n",
"1030000001 1.069545e+06 2.637949e+07 2.885386e+08 0.0 \n",
"1030000004 2.860810e+07 5.390643e+07 9.073906e+07 0.0 \n",
"1030000005 2.366172e+05 2.694165e+07 7.082668e+07 0.0 \n",
"1030000006 7.933913e+07 1.095159e+08 4.269330e+07 0.0 \n",
"1030000007 2.175265e+08 5.179360e+08 1.667194e+07 97822903.8 \n",
"... ... ... ... ... \n",
"2030016431 0.000000e+00 9.769953e+07 7.237749e+08 0.0 \n",
"2030016433 0.000000e+00 2.897478e+08 4.418623e+08 0.0 \n",
"2030016435 0.000000e+00 1.212970e+08 1.426487e+08 0.0 \n",
"2030016437 0.000000e+00 8.227093e+07 2.834888e+08 9209376.0 \n",
"2030016439 0.000000e+00 1.522036e+08 1.374297e+05 0.0 \n",
"\n",
"industry_name 国防军工 家用电器 ... 电气设备 纺织服装 \\\n",
"pid ... \n",
"1030000001 3.821110e+04 1.021554e+04 ... 1.786656e+08 9.769972e+07 \n",
"1030000004 0.000000e+00 0.000000e+00 ... 9.159689e+06 2.893365e+04 \n",
"1030000005 9.894922e+06 1.904220e+07 ... 2.172023e+07 3.843687e+04 \n",
"1030000006 5.659414e+07 1.426874e+07 ... 8.726372e+07 2.044139e+06 \n",
"1030000007 3.821110e+04 1.021554e+04 ... 2.281993e+08 9.503220e+03 \n",
"... ... ... ... ... ... \n",
"2030016431 3.406544e+08 2.535546e+08 ... 2.657841e+08 1.286518e+08 \n",
"2030016433 1.202044e+08 3.085729e+08 ... 3.680876e+08 0.000000e+00 \n",
"2030016435 9.063460e+03 2.321716e+04 ... 1.443445e+06 9.503220e+03 \n",
"2030016437 2.538841e+08 1.006988e+07 ... 3.114333e+08 4.972629e+07 \n",
"2030016439 9.063460e+03 4.469550e+04 ... 4.681270e+05 9.503220e+03 \n",
"\n",
"industry_name 综合 计算机 轻工制造 通信 \\\n",
"pid \n",
"1030000001 17900849.20 1.582151e+08 0.000000e+00 1.647230e+08 \n",
"1030000004 30122649.20 8.121627e+04 7.550000e+06 5.909490e+03 \n",
"1030000005 15649.20 9.439376e+04 1.497750e+04 2.099169e+04 \n",
"1030000006 41498113.86 7.684011e+07 9.535366e+07 3.992568e+07 \n",
"1030000007 15649.20 1.116465e+08 3.554286e+08 5.909490e+03 \n",
"... ... ... ... ... \n",
"2030016431 36200671.00 1.053092e+08 0.000000e+00 1.734509e+08 \n",
"2030016433 0.00 5.514241e+08 1.302726e+08 5.909490e+03 \n",
"2030016435 0.00 3.189373e+04 9.335700e+03 5.909490e+03 \n",
"2030016437 0.00 7.055212e+07 0.000000e+00 1.300529e+07 \n",
"2030016439 0.00 1.419305e+08 1.497750e+04 5.909490e+03 \n",
"\n",
"industry_name 钢铁 银行 非银金融 食品饮料 \n",
"pid \n",
"1030000001 9402.21 0.000000e+00 0.000000e+00 3.999200e+04 \n",
"1030000004 9402.21 7.334502e+07 0.000000e+00 1.017293e+08 \n",
"1030000005 9402.21 0.000000e+00 1.714383e+06 2.269042e+07 \n",
"1030000006 38792.33 2.692022e+08 1.714383e+06 4.166626e+07 \n",
"1030000007 9402.21 3.075586e+07 1.714383e+06 5.657474e+04 \n",
"... ... ... ... ... \n",
"2030016431 0.00 0.000000e+00 0.000000e+00 7.286400e+03 \n",
"2030016433 0.00 0.000000e+00 0.000000e+00 3.164042e+08 \n",
"2030016435 0.00 3.979284e+07 0.000000e+00 4.097997e+08 \n",
"2030016437 0.00 3.264276e+08 1.337159e+08 5.889060e+07 \n",
"2030016439 0.00 0.000000e+00 0.000000e+00 4.109454e+04 \n",
"\n",
"[6364 rows x 27 columns]"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ind_cap"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "25dc5009-d146-4db0-bcc8-e0f69a6f66af",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"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.9.7"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
security_code,index_name,end_date,industry_code,entry_date
2070008337,申万农林牧渔指数,19000101,110000,2021-12-10 00:00:00
2070008339,申万基础化工指数,19000101,220000,2021-12-10 00:00:00
2070008340,申万钢铁指数,19000101,230000,2015-04-21 00:00:00
2070008341,申万有色金属指数,19000101,240000,2021-12-10 00:00:00
2070008344,申万电子指数,19000101,270000,2015-04-21 00:00:00
2070008347,申万家用电器指数,19000101,330000,2021-12-10 00:00:00
2070008348,申万食品饮料指数,19000101,340000,2021-12-10 00:00:00
2070008349,申万纺织服饰指数,19000101,350000,2021-12-10 00:00:00
2070008350,申万轻工制造指数,19000101,360000,2021-12-10 00:00:00
2070008351,申万医药生物指数,19000101,370000,2021-12-10 00:00:00
2070008352,申万公用事业指数,19000101,410000,2021-12-10 00:00:00
2070008353,申万交通运输指数,19000101,420000,2021-12-10 00:00:00
2070008354,申万房地产指数,19000101,430000,2021-12-10 00:00:00
2070008356,申万商贸零售指数,19000101,450000,2021-12-10 00:00:00
2070008357,申万社会服务指数,19000101,460000,2021-12-10 00:00:00
2070008359,申万综合指数,19000101,510000,2021-12-10 00:00:00
2070008716,申万机械设备指数,19000101,640000,2014-09-30 00:00:00
2070008717,申万国防军工指数,19000101,650000,2014-09-30 00:00:00
2070008718,申万汽车指数,19000101,280000,2014-09-30 00:00:00
2070008719,申万计算机指数,19000101,710000,2014-09-30 00:00:00
2070008720,申万通信指数,19000101,730000,2014-09-30 00:00:00
2070008721,申万银行指数,19000101,480000,2014-09-30 00:00:00
2070008722,申万非银金融指数,19000101,490000,2014-09-30 00:00:00
2070008787,申万建筑材料指数,19000101,610000,2014-09-30 00:00:00
2070008788,申万建筑装饰指数,19000101,620000,2014-09-30 00:00:00
2070008789,申万电力设备指数,19000101,630000,2021-12-10 00:00:00
2070008790,申万传媒指数,19000101,720000,2014-09-30 00:00:00
2070020439,申万煤炭指数,19000101,740000,2022-03-10 00:00:00
2070020440,申万石油石化指数,19000101,750000,2022-03-10 00:00:00
2070020441,申万环保指数,19000101,760000,2022-03-10 00:00:00
2070020442,申万美容护理指数,19000101,770000,2022-03-10 00:00:00
......@@ -285,7 +285,7 @@ def fd_skdetail(security_ids, trade_dt):
query = f"""
SELECT SECODE as pid, PUBLISHDATE, SKCODE as security_code, SKNAME, HOLDMKTCAP, HOLDAMT, NAVRTO FROM TQ_FD_SKDETAIL
WHERE
ENDDATE = '{trade_dt}' AND
ENDDATE = '{_to_yyyymmdd(trade_dt)}' AND
ISVALID = 1 AND
SECODE in ({p_id_strs})
"""
......@@ -435,7 +435,7 @@ def stk_return(start_date, end_date, security_ids=None):
sec_id_strs = _join_ids(security_ids)
if sec_id_strs:
query = f"""
SELECT security_code, min(trade_date) as start_date, max(trade_date) as end_date, exp(sum(log(1.0 + change_pct / 100.))) AS chg_pct FROM stk_daily_price_pro
SELECT security_code, min(trade_date) as start_date, max(trade_date) as end_date, exp(sum(ln(1.0 + change_pct / 100.))) - 1.0 AS chg_pct FROM stk_daily_price_pro
WHERE
trade_date >= '{_to_yyyy_mm_dd(start_date)}' AND
trade_date <= '{_to_yyyy_mm_dd(end_date)}' AND
......@@ -445,7 +445,7 @@ def stk_return(start_date, end_date, security_ids=None):
"""
else:
query = f"""
SELECT security_code, min(trade_date) as start_date, max(trade_date) as end_date, exp(sum(log(1.0 + change_pct / 100.))) - 1.0 AS chg_pct FROM stk_daily_price_pro
SELECT security_code, min(trade_date) as start_date, max(trade_date) as end_date, exp(sum(ln(1.0 + change_pct / 100.))) - 1.0 AS chg_pct FROM stk_daily_price_pro
WHERE
trade_date >= '{_to_yyyy_mm_dd(start_date)}' AND
trade_date <= '{_to_yyyy_mm_dd(end_date)}' AND
......
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