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

update codes

parent c66e3552
......@@ -2,7 +2,7 @@
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"execution_count": 1,
"id": "a1fbf6c8-e22a-4d0d-b3d8-c6c54d60bce1",
"metadata": {},
"outputs": [],
......@@ -26,17 +26,19 @@
},
{
"cell_type": "code",
"execution_count": 3,
"execution_count": 25,
"id": "1813212b-9027-4831-a245-1a19a44e787b",
"metadata": {},
"outputs": [],
"source": [
"trade_dt = adjustDateByCalendar(\"china.sse\", \"2021-06-30\").strftime(\"%Y%m%d\")"
"trade_dt = adjustDateByCalendar(\"china.sse\", \"2021-06-30\").strftime(\"%Y%m%d\")\n",
"end_date = adjustDateByCalendar(\"china.sse\", \"2021-09-30\").strftime(\"%Y%m%d\")\n",
"prev_w = 1.0"
]
},
{
"cell_type": "code",
"execution_count": 4,
"execution_count": 26,
"id": "21a0b455-1eb3-47f0-8a9c-15533dd12939",
"metadata": {},
"outputs": [
......@@ -61,369 +63,185 @@
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>pid</th>\n",
" <th>security_code</th>\n",
" <th>SKNAME</th>\n",
" <th>HOLDMKTCAP</th>\n",
" <th>HOLDAMT</th>\n",
" <th>NAVRTO</th>\n",
" <th>weight_x</th>\n",
" <th>weight_y</th>\n",
" <th>weight</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1030000006</td>\n",
" <td>2010000045</td>\n",
" <td>海信视像</td>\n",
" <td>71468410.0</td>\n",
" <td>4228900.0</td>\n",
" <td>1.61</td>\n",
" <td>0.021116</td>\n",
" <td>0.000000</td>\n",
" <td>0.021116</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1030000006</td>\n",
" <td>2010000121</td>\n",
" <td>中青旅</td>\n",
" <td>33714502.5</td>\n",
" <td>3210905.0</td>\n",
" <td>0.76</td>\n",
" <td>0.009961</td>\n",
" <td>0.000000</td>\n",
" <td>0.009961</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1030000006</td>\n",
" <td>2010000171</td>\n",
" <td>复星医药</td>\n",
" <td>48781519.0</td>\n",
" <td>676300.0</td>\n",
" <td>1.10</td>\n",
" <td>0.014413</td>\n",
" <td>0.000000</td>\n",
" <td>0.014413</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1030000006</td>\n",
" <td>2010000377</td>\n",
" <td>片仔癀</td>\n",
" <td>89447057.5</td>\n",
" <td>199525.0</td>\n",
" <td>2.02</td>\n",
" <td>0.026428</td>\n",
" <td>0.000000</td>\n",
" <td>0.026428</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1030000006</td>\n",
" <td>2010000438</td>\n",
" <td>贵州茅台</td>\n",
" <td>136307792.5</td>\n",
" <td>66275.0</td>\n",
" <td>3.08</td>\n",
" <td>0.040273</td>\n",
" <td>0.092662</td>\n",
" <td>0.040273</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" pid security_code SKNAME HOLDMKTCAP HOLDAMT NAVRTO weight\n",
"0 1030000006 2010000045 海信视像 71468410.0 4228900.0 1.61 0.021116\n",
"1 1030000006 2010000121 中青旅 33714502.5 3210905.0 0.76 0.009961\n",
"2 1030000006 2010000171 复星医药 48781519.0 676300.0 1.10 0.014413\n",
"3 1030000006 2010000377 片仔癀 89447057.5 199525.0 2.02 0.026428\n",
"4 1030000006 2010000438 贵州茅台 136307792.5 66275.0 3.08 0.040273"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 获取指定基金在基准日的持仓(portfolio date)\n",
"portfolio = fd_skdetail(\"1030000006\", trade_dt=trade_dt)\n",
"portfolio.head()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "82ca3a10-45e2-4b49-8be1-1e77104a1a52",
"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>trade_date</th>\n",
" <th>security_code</th>\n",
" <th>sname</th>\n",
" <th>weight</th>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2021-06-30</td>\n",
" <td>2010000001</td>\n",
" <td>浦发银行</td>\n",
" <td>0.0055</td>\n",
" <th>113</th>\n",
" <td>2010034355</td>\n",
" <td>0.000008</td>\n",
" <td>0.000000</td>\n",
" <td>0.000008</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2021-06-30</td>\n",
" <td>2010000010</td>\n",
" <td>上海机场</td>\n",
" <td>0.0022</td>\n",
" <th>114</th>\n",
" <td>2010034356</td>\n",
" <td>0.000013</td>\n",
" <td>0.000000</td>\n",
" <td>0.000013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2021-06-30</td>\n",
" <td>2010000011</td>\n",
" <td>包钢股份</td>\n",
" <td>0.0017</td>\n",
" <th>115</th>\n",
" <td>2010034358</td>\n",
" <td>0.000002</td>\n",
" <td>0.000000</td>\n",
" <td>0.000002</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2021-06-30</td>\n",
" <td>2010000012</td>\n",
" <td>华能国际</td>\n",
" <td>0.0009</td>\n",
" <th>116</th>\n",
" <td>2010034359</td>\n",
" <td>0.000003</td>\n",
" <td>0.000000</td>\n",
" <td>0.000003</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2021-06-30</td>\n",
" <td>2010000014</td>\n",
" <td>华夏银行</td>\n",
" <td>0.0018</td>\n",
" <th>117</th>\n",
" <td>2010034373</td>\n",
" <td>0.000016</td>\n",
" <td>0.000000</td>\n",
" <td>0.000016</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>118 rows × 4 columns</p>\n",
"</div>"
],
"text/plain": [
" trade_date security_code sname weight\n",
"0 2021-06-30 2010000001 浦发银行 0.0055\n",
"1 2021-06-30 2010000010 上海机场 0.0022\n",
"2 2021-06-30 2010000011 包钢股份 0.0017\n",
"3 2021-06-30 2010000012 华能国际 0.0009\n",
"4 2021-06-30 2010000014 华夏银行 0.0018"
" security_code weight_x weight_y weight\n",
"0 2010000045 0.021116 0.000000 0.021116\n",
"1 2010000121 0.009961 0.000000 0.009961\n",
"2 2010000171 0.014413 0.000000 0.014413\n",
"3 2010000377 0.026428 0.000000 0.026428\n",
"4 2010000438 0.040273 0.092662 0.040273\n",
".. ... ... ... ...\n",
"113 2010034355 0.000008 0.000000 0.000008\n",
"114 2010034356 0.000013 0.000000 0.000013\n",
"115 2010034358 0.000002 0.000000 0.000002\n",
"116 2010034359 0.000003 0.000000 0.000003\n",
"117 2010034373 0.000016 0.000000 0.000016\n",
"\n",
"[118 rows x 4 columns]"
]
},
"execution_count": 6,
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 获取指定基金在基准日的持仓(portfolio date)\n",
"portfolio1 = fd_skdetail(\"1030000006\", trade_dt=trade_dt)\n",
"portfolio2 = fd_skdetail(\"1030000006\", trade_dt=end_date)\n",
"portfolio = pd.merge(portfolio1[[\"security_code\", \"weight\"]], portfolio2[[\"security_code\", \"weight\"]], how=\"outer\", on=[\"security_code\"]).fillna(0)\n",
"portfolio[\"weight\"] = prev_w * portfolio[\"weight_x\"] + (1.0 - prev_w) * portfolio[\"weight_y\"]\n",
"portfolio[portfolio.weight != 0]"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "82ca3a10-45e2-4b49-8be1-1e77104a1a52",
"metadata": {},
"outputs": [],
"source": [
"# 获取基准指数的成分\n",
"idx_comp = index_component(\"2070000060\", trade_dt, trade_dt)\n",
"idx_comp.head()"
"idx_comp1 = index_component(\"2070000669\", trade_dt, trade_dt)\n",
"idx_comp2 = index_component(\"2070000669\", end_date, end_date)\n",
"idx_comp = pd.merge(idx_comp1[[\"security_code\", \"weight\"]], idx_comp2[[\"security_code\", \"weight\"]], how=\"outer\", on=[\"security_code\"]).fillna(0)\n",
"idx_comp[\"weight\"] = prev_w * idx_comp[\"weight_x\"] + (1.0 - prev_w) * idx_comp[\"weight_y\"]\n",
"idx_comp[\"weight\"] /= idx_comp[\"weight\"].sum()\n",
"idx_comp"
]
},
{
"cell_type": "code",
"execution_count": 9,
"execution_count": null,
"id": "6d57d8f9-6c1c-4a41-ae64-87763648a22b",
"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>trade_date</th>\n",
" <th>security_code</th>\n",
" <th>industry_code</th>\n",
" <th>industry_name</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2021-06-30</td>\n",
" <td>2010000001</td>\n",
" <td>480000</td>\n",
" <td>银行</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2021-06-30</td>\n",
" <td>2010000005</td>\n",
" <td>420000</td>\n",
" <td>交通运输</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2021-06-30</td>\n",
" <td>2010000007</td>\n",
" <td>280000</td>\n",
" <td>汽车</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2021-06-30</td>\n",
" <td>2010000008</td>\n",
" <td>430000</td>\n",
" <td>房地产</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2021-06-30</td>\n",
" <td>2010000009</td>\n",
" <td>410000</td>\n",
" <td>公用事业</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" trade_date security_code industry_code industry_name\n",
"0 2021-06-30 2010000001 480000 银行\n",
"1 2021-06-30 2010000005 420000 交通运输\n",
"2 2021-06-30 2010000007 280000 汽车\n",
"3 2021-06-30 2010000008 430000 房地产\n",
"4 2021-06-30 2010000009 410000 公用事业"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"outputs": [],
"source": [
"# 获取行业分类信息\n",
"ind = sw_industry_daily(trade_dt, trade_dt, 1)\n",
"ind.head()"
"ind.sort_values(\"security_code\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "94cc8a8f-6270-4a16-be78-371adaae16cc",
"metadata": {},
"outputs": [],
"source": [
"len(ind.industry_code.unique())"
]
},
{
"cell_type": "code",
"execution_count": 11,
"execution_count": null,
"id": "fa17cc0d-61ad-4958-bf01-7cdc1c17230d",
"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>security_code</th>\n",
" <th>start_date</th>\n",
" <th>end_date</th>\n",
" <th>chg_pct</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2010000001</td>\n",
" <td>2021-06-30</td>\n",
" <td>2021-06-30</td>\n",
" <td>0.002004</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2010000005</td>\n",
" <td>2021-06-30</td>\n",
" <td>2021-06-30</td>\n",
" <td>0.001792</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2010000007</td>\n",
" <td>2021-06-30</td>\n",
" <td>2021-06-30</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2010000008</td>\n",
" <td>2021-06-30</td>\n",
" <td>2021-06-30</td>\n",
" <td>0.014689</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2010000009</td>\n",
" <td>2021-06-30</td>\n",
" <td>2021-06-30</td>\n",
" <td>-0.006601</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" security_code start_date end_date chg_pct\n",
"0 2010000001 2021-06-30 2021-06-30 0.002004\n",
"1 2010000005 2021-06-30 2021-06-30 0.001792\n",
"2 2010000007 2021-06-30 2021-06-30 0.000000\n",
"3 2010000008 2021-06-30 2021-06-30 0.014689\n",
"4 2010000009 2021-06-30 2021-06-30 -0.006601"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"outputs": [],
"source": [
"# 获取股票的区间收益,brison分解针对指定区间进行\n",
"# 下面的例子,分解20210630到20211231区间的收益\n",
"\n",
"rtns = stk_return(trade_dt, trade_dt)\n",
"rtns.head()"
"rtns = stk_return(trade_dt, end_date)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "e17f2462-6fe6-4b43-9dda-902a83f7a419",
"metadata": {},
"outputs": [],
"source": [
"rtns"
]
},
{
......@@ -443,25 +261,15 @@
"* **TR**: 总超额收益\n",
"* **SR**: 证券选择收益\n",
"* **AR**: 行业配置收益\n",
"* **IR**: 交互收益\n",
"\n",
"以下的归因我们都只做了 **一天** 的结果,区间归因即为每日归因的累加。"
"* **IR**: 交互收益"
]
},
{
"cell_type": "code",
"execution_count": 12,
"execution_count": null,
"id": "41d6c18d-2ff7-4592-89cb-d19c4e8cc3e1",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Wall time: 86.1 ms\n"
]
}
],
"outputs": [],
"source": [
"%%time\n",
"\n",
......@@ -470,434 +278,10 @@
},
{
"cell_type": "code",
"execution_count": 13,
"execution_count": null,
"id": "b31e7832-ee3f-43c8-b931-022e2f855919",
"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>portfolio</th>\n",
" <th>benchmark</th>\n",
" <th>p_ret</th>\n",
" <th>b_ret</th>\n",
" <th>TR</th>\n",
" <th>SR</th>\n",
" <th>AR</th>\n",
" <th>IR</th>\n",
" </tr>\n",
" <tr>\n",
" <th>industry</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>0.000000</td>\n",
" <td>0.0294</td>\n",
" <td>0.000000</td>\n",
" <td>0.013769</td>\n",
" <td>-4.048145e-04</td>\n",
" <td>-0.000405</td>\n",
" <td>-0.000405</td>\n",
" <td>4.048145e-04</td>\n",
" </tr>\n",
" <tr>\n",
" <th>休闲服务</th>\n",
" <td>0.039602</td>\n",
" <td>0.0149</td>\n",
" <td>-0.006466</td>\n",
" <td>-0.004642</td>\n",
" <td>-1.868824e-04</td>\n",
" <td>-0.000027</td>\n",
" <td>-0.000115</td>\n",
" <td>-4.504017e-05</td>\n",
" </tr>\n",
" <tr>\n",
" <th>传媒</th>\n",
" <td>0.036138</td>\n",
" <td>0.0140</td>\n",
" <td>-0.012678</td>\n",
" <td>0.000715</td>\n",
" <td>-4.681614e-04</td>\n",
" <td>-0.000188</td>\n",
" <td>0.000016</td>\n",
" <td>-2.964908e-04</td>\n",
" </tr>\n",
" <tr>\n",
" <th>公用事业</th>\n",
" <td>0.000012</td>\n",
" <td>0.0177</td>\n",
" <td>0.042125</td>\n",
" <td>0.003800</td>\n",
" <td>-6.675646e-05</td>\n",
" <td>0.000678</td>\n",
" <td>-0.000067</td>\n",
" <td>-6.778995e-04</td>\n",
" </tr>\n",
" <tr>\n",
" <th>农林牧渔</th>\n",
" <td>0.000003</td>\n",
" <td>0.0161</td>\n",
" <td>-0.007081</td>\n",
" <td>-0.005968</td>\n",
" <td>9.606328e-05</td>\n",
" <td>-0.000018</td>\n",
" <td>0.000096</td>\n",
" <td>1.792142e-05</td>\n",
" </tr>\n",
" <tr>\n",
" <th>化工</th>\n",
" <td>0.000096</td>\n",
" <td>0.0347</td>\n",
" <td>0.032804</td>\n",
" <td>0.004375</td>\n",
" <td>-1.486653e-04</td>\n",
" <td>0.000986</td>\n",
" <td>-0.000151</td>\n",
" <td>-9.837681e-04</td>\n",
" </tr>\n",
" <tr>\n",
" <th>医药生物</th>\n",
" <td>0.541291</td>\n",
" <td>0.1119</td>\n",
" <td>0.002162</td>\n",
" <td>0.001370</td>\n",
" <td>1.016734e-03</td>\n",
" <td>0.000089</td>\n",
" <td>0.000588</td>\n",
" <td>3.399191e-04</td>\n",
" </tr>\n",
" <tr>\n",
" <th>商业贸易</th>\n",
" <td>0.000000</td>\n",
" <td>0.0026</td>\n",
" <td>0.000000</td>\n",
" <td>0.000918</td>\n",
" <td>-2.386400e-06</td>\n",
" <td>-0.000002</td>\n",
" <td>-0.000002</td>\n",
" <td>2.386400e-06</td>\n",
" </tr>\n",
" <tr>\n",
" <th>国防军工</th>\n",
" <td>0.000000</td>\n",
" <td>0.0129</td>\n",
" <td>0.000000</td>\n",
" <td>0.014161</td>\n",
" <td>-1.826710e-04</td>\n",
" <td>-0.000183</td>\n",
" <td>-0.000183</td>\n",
" <td>1.826710e-04</td>\n",
" </tr>\n",
" <tr>\n",
" <th>家用电器</th>\n",
" <td>0.050703</td>\n",
" <td>0.0363</td>\n",
" <td>-0.002778</td>\n",
" <td>0.005931</td>\n",
" <td>-3.561571e-04</td>\n",
" <td>-0.000316</td>\n",
" <td>0.000085</td>\n",
" <td>-1.254411e-04</td>\n",
" </tr>\n",
" <tr>\n",
" <th>建筑材料</th>\n",
" <td>0.000000</td>\n",
" <td>0.0111</td>\n",
" <td>0.000000</td>\n",
" <td>-0.001708</td>\n",
" <td>1.896090e-05</td>\n",
" <td>0.000019</td>\n",
" <td>0.000019</td>\n",
" <td>-1.896090e-05</td>\n",
" </tr>\n",
" <tr>\n",
" <th>建筑装饰</th>\n",
" <td>0.000007</td>\n",
" <td>0.0122</td>\n",
" <td>-0.021015</td>\n",
" <td>-0.002694</td>\n",
" <td>3.272320e-05</td>\n",
" <td>-0.000224</td>\n",
" <td>0.000033</td>\n",
" <td>2.233851e-04</td>\n",
" </tr>\n",
" <tr>\n",
" <th>房地产</th>\n",
" <td>0.000000</td>\n",
" <td>0.0206</td>\n",
" <td>0.000000</td>\n",
" <td>-0.000414</td>\n",
" <td>8.521000e-06</td>\n",
" <td>0.000009</td>\n",
" <td>0.000009</td>\n",
" <td>-8.521000e-06</td>\n",
" </tr>\n",
" <tr>\n",
" <th>有色金属</th>\n",
" <td>0.000007</td>\n",
" <td>0.0243</td>\n",
" <td>0.013247</td>\n",
" <td>0.019732</td>\n",
" <td>-4.794005e-04</td>\n",
" <td>-0.000158</td>\n",
" <td>-0.000479</td>\n",
" <td>1.575546e-04</td>\n",
" </tr>\n",
" <tr>\n",
" <th>机械设备</th>\n",
" <td>0.050724</td>\n",
" <td>0.0246</td>\n",
" <td>-0.000273</td>\n",
" <td>0.018532</td>\n",
" <td>-4.697309e-04</td>\n",
" <td>-0.000463</td>\n",
" <td>0.000484</td>\n",
" <td>-4.912561e-04</td>\n",
" </tr>\n",
" <tr>\n",
" <th>汽车</th>\n",
" <td>0.000005</td>\n",
" <td>0.0324</td>\n",
" <td>-0.009157</td>\n",
" <td>-0.003305</td>\n",
" <td>1.070463e-04</td>\n",
" <td>-0.000190</td>\n",
" <td>0.000107</td>\n",
" <td>1.895696e-04</td>\n",
" </tr>\n",
" <tr>\n",
" <th>电子</th>\n",
" <td>0.065804</td>\n",
" <td>0.1012</td>\n",
" <td>0.017476</td>\n",
" <td>0.019454</td>\n",
" <td>-8.187368e-04</td>\n",
" <td>-0.000200</td>\n",
" <td>-0.000689</td>\n",
" <td>7.000751e-05</td>\n",
" </tr>\n",
" <tr>\n",
" <th>电气设备</th>\n",
" <td>0.000005</td>\n",
" <td>0.0541</td>\n",
" <td>-0.010346</td>\n",
" <td>0.014837</td>\n",
" <td>-8.027072e-04</td>\n",
" <td>-0.001362</td>\n",
" <td>-0.000803</td>\n",
" <td>1.362263e-03</td>\n",
" </tr>\n",
" <tr>\n",
" <th>纺织服装</th>\n",
" <td>0.000027</td>\n",
" <td>0.0000</td>\n",
" <td>-0.000558</td>\n",
" <td>0.000000</td>\n",
" <td>-1.485314e-08</td>\n",
" <td>-0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>-1.485314e-08</td>\n",
" </tr>\n",
" <tr>\n",
" <th>综合</th>\n",
" <td>0.000007</td>\n",
" <td>0.0000</td>\n",
" <td>0.019664</td>\n",
" <td>0.000000</td>\n",
" <td>1.281863e-07</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1.281863e-07</td>\n",
" </tr>\n",
" <tr>\n",
" <th>计算机</th>\n",
" <td>0.000015</td>\n",
" <td>0.0273</td>\n",
" <td>0.117384</td>\n",
" <td>0.017953</td>\n",
" <td>-4.883305e-04</td>\n",
" <td>0.002714</td>\n",
" <td>-0.000490</td>\n",
" <td>-2.712942e-03</td>\n",
" </tr>\n",
" <tr>\n",
" <th>轻工制造</th>\n",
" <td>0.014181</td>\n",
" <td>0.0034</td>\n",
" <td>-0.035708</td>\n",
" <td>-0.001493</td>\n",
" <td>-5.013087e-04</td>\n",
" <td>-0.000116</td>\n",
" <td>-0.000016</td>\n",
" <td>-3.688828e-04</td>\n",
" </tr>\n",
" <tr>\n",
" <th>通信</th>\n",
" <td>0.000000</td>\n",
" <td>0.0108</td>\n",
" <td>0.000000</td>\n",
" <td>0.010520</td>\n",
" <td>-1.136123e-04</td>\n",
" <td>-0.000114</td>\n",
" <td>-0.000114</td>\n",
" <td>1.136123e-04</td>\n",
" </tr>\n",
" <tr>\n",
" <th>采掘</th>\n",
" <td>0.000000</td>\n",
" <td>0.0080</td>\n",
" <td>0.000000</td>\n",
" <td>0.005232</td>\n",
" <td>-4.185280e-05</td>\n",
" <td>-0.000042</td>\n",
" <td>-0.000042</td>\n",
" <td>4.185280e-05</td>\n",
" </tr>\n",
" <tr>\n",
" <th>钢铁</th>\n",
" <td>0.000000</td>\n",
" <td>0.0059</td>\n",
" <td>0.000000</td>\n",
" <td>0.000734</td>\n",
" <td>-4.333400e-06</td>\n",
" <td>-0.000004</td>\n",
" <td>-0.000004</td>\n",
" <td>4.333400e-06</td>\n",
" </tr>\n",
" <tr>\n",
" <th>银行</th>\n",
" <td>0.000000</td>\n",
" <td>0.1239</td>\n",
" <td>0.000000</td>\n",
" <td>0.009456</td>\n",
" <td>-1.171629e-03</td>\n",
" <td>-0.001172</td>\n",
" <td>-0.001172</td>\n",
" <td>1.171629e-03</td>\n",
" </tr>\n",
" <tr>\n",
" <th>非银金融</th>\n",
" <td>0.000000</td>\n",
" <td>0.1111</td>\n",
" <td>0.000000</td>\n",
" <td>0.007316</td>\n",
" <td>-8.128087e-04</td>\n",
" <td>-0.000813</td>\n",
" <td>-0.000813</td>\n",
" <td>8.128087e-04</td>\n",
" </tr>\n",
" <tr>\n",
" <th>食品饮料</th>\n",
" <td>0.201270</td>\n",
" <td>0.1391</td>\n",
" <td>0.001934</td>\n",
" <td>0.000774</td>\n",
" <td>2.815118e-04</td>\n",
" <td>0.000161</td>\n",
" <td>0.000048</td>\n",
" <td>7.208423e-05</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" portfolio benchmark p_ret b_ret TR SR \\\n",
"industry \n",
"交通运输 0.000000 0.0294 0.000000 0.013769 -4.048145e-04 -0.000405 \n",
"休闲服务 0.039602 0.0149 -0.006466 -0.004642 -1.868824e-04 -0.000027 \n",
"传媒 0.036138 0.0140 -0.012678 0.000715 -4.681614e-04 -0.000188 \n",
"公用事业 0.000012 0.0177 0.042125 0.003800 -6.675646e-05 0.000678 \n",
"农林牧渔 0.000003 0.0161 -0.007081 -0.005968 9.606328e-05 -0.000018 \n",
"化工 0.000096 0.0347 0.032804 0.004375 -1.486653e-04 0.000986 \n",
"医药生物 0.541291 0.1119 0.002162 0.001370 1.016734e-03 0.000089 \n",
"商业贸易 0.000000 0.0026 0.000000 0.000918 -2.386400e-06 -0.000002 \n",
"国防军工 0.000000 0.0129 0.000000 0.014161 -1.826710e-04 -0.000183 \n",
"家用电器 0.050703 0.0363 -0.002778 0.005931 -3.561571e-04 -0.000316 \n",
"建筑材料 0.000000 0.0111 0.000000 -0.001708 1.896090e-05 0.000019 \n",
"建筑装饰 0.000007 0.0122 -0.021015 -0.002694 3.272320e-05 -0.000224 \n",
"房地产 0.000000 0.0206 0.000000 -0.000414 8.521000e-06 0.000009 \n",
"有色金属 0.000007 0.0243 0.013247 0.019732 -4.794005e-04 -0.000158 \n",
"机械设备 0.050724 0.0246 -0.000273 0.018532 -4.697309e-04 -0.000463 \n",
"汽车 0.000005 0.0324 -0.009157 -0.003305 1.070463e-04 -0.000190 \n",
"电子 0.065804 0.1012 0.017476 0.019454 -8.187368e-04 -0.000200 \n",
"电气设备 0.000005 0.0541 -0.010346 0.014837 -8.027072e-04 -0.001362 \n",
"纺织服装 0.000027 0.0000 -0.000558 0.000000 -1.485314e-08 -0.000000 \n",
"综合 0.000007 0.0000 0.019664 0.000000 1.281863e-07 0.000000 \n",
"计算机 0.000015 0.0273 0.117384 0.017953 -4.883305e-04 0.002714 \n",
"轻工制造 0.014181 0.0034 -0.035708 -0.001493 -5.013087e-04 -0.000116 \n",
"通信 0.000000 0.0108 0.000000 0.010520 -1.136123e-04 -0.000114 \n",
"采掘 0.000000 0.0080 0.000000 0.005232 -4.185280e-05 -0.000042 \n",
"钢铁 0.000000 0.0059 0.000000 0.000734 -4.333400e-06 -0.000004 \n",
"银行 0.000000 0.1239 0.000000 0.009456 -1.171629e-03 -0.001172 \n",
"非银金融 0.000000 0.1111 0.000000 0.007316 -8.128087e-04 -0.000813 \n",
"食品饮料 0.201270 0.1391 0.001934 0.000774 2.815118e-04 0.000161 \n",
"\n",
" AR IR \n",
"industry \n",
"交通运输 -0.000405 4.048145e-04 \n",
"休闲服务 -0.000115 -4.504017e-05 \n",
"传媒 0.000016 -2.964908e-04 \n",
"公用事业 -0.000067 -6.778995e-04 \n",
"农林牧渔 0.000096 1.792142e-05 \n",
"化工 -0.000151 -9.837681e-04 \n",
"医药生物 0.000588 3.399191e-04 \n",
"商业贸易 -0.000002 2.386400e-06 \n",
"国防军工 -0.000183 1.826710e-04 \n",
"家用电器 0.000085 -1.254411e-04 \n",
"建筑材料 0.000019 -1.896090e-05 \n",
"建筑装饰 0.000033 2.233851e-04 \n",
"房地产 0.000009 -8.521000e-06 \n",
"有色金属 -0.000479 1.575546e-04 \n",
"机械设备 0.000484 -4.912561e-04 \n",
"汽车 0.000107 1.895696e-04 \n",
"电子 -0.000689 7.000751e-05 \n",
"电气设备 -0.000803 1.362263e-03 \n",
"纺织服装 0.000000 -1.485314e-08 \n",
"综合 0.000000 1.281863e-07 \n",
"计算机 -0.000490 -2.712942e-03 \n",
"轻工制造 -0.000016 -3.688828e-04 \n",
"通信 -0.000114 1.136123e-04 \n",
"采掘 -0.000042 4.185280e-05 \n",
"钢铁 -0.000004 4.333400e-06 \n",
"银行 -0.001172 1.171629e-03 \n",
"非银金融 -0.000813 8.128087e-04 \n",
"食品饮料 0.000048 7.208423e-05 "
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"outputs": [],
"source": [
"res"
]
......@@ -905,7 +289,27 @@
{
"cell_type": "code",
"execution_count": null,
"id": "e97cd6d4-f302-4e61-95a1-1e6580aebfc5",
"id": "121c95c2-3d4e-456f-babd-cfd439f36c26",
"metadata": {},
"outputs": [],
"source": [
"res.sum()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "89fc64a3-f802-4141-aa0d-ff32176781c1",
"metadata": {},
"outputs": [],
"source": [
"len(res)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "a862b580-4909-48fe-a6c4-4b61b539e85e",
"metadata": {},
"outputs": [],
"source": []
......
......@@ -302,7 +302,7 @@ def fd_skdetail(security_ids, trade_dt):
groups = read_sql(query).sort_values("security_code").groupby("pid")
dfs = []
for k, g in groups:
g = g[g.PUBLISHDATE == np.max(g.PUBLISHDATE)]
# g = g[g.PUBLISHDATE == np.max(g.PUBLISHDATE)]
total_value = g.HOLDMKTCAP.sum()
g["weight"] = g.HOLDMKTCAP / total_value
dfs.append(g)
......@@ -423,7 +423,7 @@ def sw_industry_daily(start_date, end_date, level=1, security_ids=None):
sec_id_strs = _join_ids(security_ids)
if sec_id_strs:
query = f"""
SELECT trade_date, security_code, industry_code{level} as industry_code, industry_name{level} as industry_name FROM sw_industry_daily
SELECT trade_date, security_code, industry_code{level} as industry_code, industry_name{level} as industry_name FROM sw_industry_daily_2021
WHERE
trade_date >= '{_to_yyyy_mm_dd(start_date)}' AND
trade_date <= '{_to_yyyy_mm_dd(end_date)}' AND
......@@ -432,7 +432,7 @@ def sw_industry_daily(start_date, end_date, level=1, security_ids=None):
"""
else:
query = f"""
SELECT trade_date, security_code, industry_code{level} as industry_code, industry_name{level} as industry_name FROM sw_industry_daily
SELECT trade_date, security_code, industry_code{level} as industry_code, industry_name{level} as industry_name FROM sw_industry_daily_2021
WHERE
trade_date >= '{_to_yyyy_mm_dd(start_date)}' AND
trade_date <= '{_to_yyyy_mm_dd(end_date)}' AND
......@@ -445,24 +445,26 @@ 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(ln(1.0 + change_pct / 100.))) - 1.0 AS chg_pct FROM stk_daily_price_pro
SELECT security_code, trade_date, `close`, lat_factor FROM stk_daily_price_pro
WHERE
trade_date >= '{_to_yyyy_mm_dd(start_date)}' AND
trade_date <= '{_to_yyyy_mm_dd(end_date)}' AND
trade_date in ('{_to_yyyy_mm_dd(start_date)}', '{_to_yyyy_mm_dd(end_date)}') AND
security_code IN ({sec_id_strs}) AND
flag = 1
GROUP BY security_code;
"""
else:
query = f"""
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
SELECT security_code, trade_date, `close` * lat_factor AS lat_price FROM stk_daily_price_pro
WHERE
trade_date >= '{_to_yyyy_mm_dd(start_date)}' AND
trade_date <= '{_to_yyyy_mm_dd(end_date)}' AND
trade_date in ('{_to_yyyy_mm_dd(start_date)}', '{_to_yyyy_mm_dd(end_date)}') AND
flag = 1
GROUP BY security_code;
"""
return read_sql(query, source="mysql").sort_values("security_code").reset_index(drop=True)
df = read_sql(query, source="mysql").sort_values("security_code")
df["trade_date"] = df["trade_date"].astype(str)
df = df.pivot(index="security_code", columns="trade_date", values="lat_price").dropna()
df.rename(columns={f'{_to_yyyy_mm_dd(start_date)}': "start_date", f'{_to_yyyy_mm_dd(end_date)}': "end_date"}, inplace=True)
df["chg_pct"] = df["end_date"] / df["start_date"] - 1.0
return df.reset_index()
def fd_manager(manager_ids=None, manager_names=None, start_date=None, end_date=None):
......
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