Commit 64406a81 authored by Dr.李's avatar Dr.李

added manager more info

parent 52149dd6
...@@ -52,6 +52,9 @@ INDUSTRY_STYLES = [ ...@@ -52,6 +52,9 @@ INDUSTRY_STYLES = [
] ]
BOND_CLASSES = ["990301", "990302", "990303", "990304", "990305", "990306", "990399", "990501", "990502", "990205", "990402", "990603"]
def read_sql(query, source="mssql"): def read_sql(query, source="mssql"):
if source == "mssql": if source == "mssql":
engine = sa.create_engine(MSSQL_CONN, encoding="utf8", connect_args={"charset": "GBK"}) engine = sa.create_engine(MSSQL_CONN, encoding="utf8", connect_args={"charset": "GBK"})
...@@ -60,7 +63,7 @@ def read_sql(query, source="mssql"): ...@@ -60,7 +63,7 @@ def read_sql(query, source="mssql"):
return pd.read_sql(query, con=engine) return pd.read_sql(query, con=engine)
def nearest_report_date(date): def nearest_report_date(date, freq="Q"):
if len(date) == 10: if len(date) == 10:
date = date.replace("-", "") date = date.replace("-", "")
...@@ -68,7 +71,14 @@ def nearest_report_date(date): ...@@ -68,7 +71,14 @@ def nearest_report_date(date):
year = int(date[0:4]) year = int(date[0:4])
last_year = year last_year = year
q = (mm // 3 + 1) * 3 if freq == "Q":
q = (mm // 3 + 1) * 3 - 3
else:
q = (mm // 6 + 1) * 6 - 6
if q <= 0:
q += 12
last_year -= 1
last = calendar.monthrange(last_year, q)[1] last = calendar.monthrange(last_year, q)[1]
return dt.date(last_year, q, last).strftime("%Y%m%d") return dt.date(last_year, q, last).strftime("%Y%m%d")
...@@ -497,3 +507,16 @@ def fd_rl_classification(security_ids, trade_dt): ...@@ -497,3 +507,16 @@ def fd_rl_classification(security_ids, trade_dt):
flag = 1 flag = 1
""" """
return read_sql(query, source="mysql").sort_values("SECURITYID").reset_index(drop=True) return read_sql(query, source="mysql").sort_values("SECURITYID").reset_index(drop=True)
def read_factors(security_ids, trade_dt, factors):
sec_id_strs = _join_ids(security_ids)
query = f"""
SELECT security_code, trade_date, {','.join(factors)} FROM factor_valuation_estimation
WHERE
trade_date = '{_to_yyyymmdd(trade_dt)}' AND
security_code in ({sec_id_strs}) AND
flag = 1
"""
return read_sql(query, source="mysql").sort_values("security_code").reset_index(drop=True)
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
"cells": [ "cells": [
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 1, "execution_count": 3,
"id": "ca389ee5-b800-4682-bfab-a22a6247bd67", "id": "ca389ee5-b800-4682-bfab-a22a6247bd67",
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
...@@ -13,7 +13,8 @@ ...@@ -13,7 +13,8 @@
"from fof.utility import (\n", "from fof.utility import (\n",
" fd_manager,\n", " fd_manager,\n",
" fd_fund_mktv,\n", " fd_fund_mktv,\n",
" fd_rl_classification\n", " fd_rl_classification,\n",
" BOND_CLASSES\n",
")\n", ")\n",
"import pandas as pd\n", "import pandas as pd\n",
"from PyFin.api import *" "from PyFin.api import *"
...@@ -30,7 +31,7 @@ ...@@ -30,7 +31,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 2, "execution_count": 4,
"id": "008213ed-f569-4535-8519-7a5b1b06503c", "id": "008213ed-f569-4535-8519-7a5b1b06503c",
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
...@@ -40,7 +41,7 @@ ...@@ -40,7 +41,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 3, "execution_count": 5,
"id": "be10d317-bca6-41db-9b54-56573cd564a6", "id": "be10d317-bca6-41db-9b54-56573cd564a6",
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
...@@ -145,7 +146,7 @@ ...@@ -145,7 +146,7 @@
"4 19000101 " "4 19000101 "
] ]
}, },
"execution_count": 3, "execution_count": 5,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
...@@ -158,7 +159,7 @@ ...@@ -158,7 +159,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 4, "execution_count": 6,
"id": "ffbac3af-39d6-4cd3-95cb-705c32380985", "id": "ffbac3af-39d6-4cd3-95cb-705c32380985",
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
...@@ -196,40 +197,40 @@ ...@@ -196,40 +197,40 @@
" <td>1030000867</td>\n", " <td>1030000867</td>\n",
" <td>1.9650</td>\n", " <td>1.9650</td>\n",
" <td>1.708075</td>\n", " <td>1.708075</td>\n",
" <td>1.385083e+08</td>\n", " <td>1.940913e+08</td>\n",
" <td>2.721688e+08</td>\n", " <td>3.813894e+08</td>\n",
" </tr>\n", " </tr>\n",
" <tr>\n", " <tr>\n",
" <th>1</th>\n", " <th>1</th>\n",
" <td>1030004356</td>\n", " <td>1030004356</td>\n",
" <td>1.5530</td>\n", " <td>1.5530</td>\n",
" <td>1.569653</td>\n", " <td>1.569653</td>\n",
" <td>1.991231e+08</td>\n", " <td>3.329090e+08</td>\n",
" <td>3.092382e+08</td>\n", " <td>5.170077e+08</td>\n",
" </tr>\n", " </tr>\n",
" <tr>\n", " <tr>\n",
" <th>2</th>\n", " <th>2</th>\n",
" <td>1030005207</td>\n", " <td>1030005207</td>\n",
" <td>1.8904</td>\n", " <td>1.8904</td>\n",
" <td>1.689080</td>\n", " <td>1.689080</td>\n",
" <td>2.636247e+08</td>\n", " <td>8.860713e+07</td>\n",
" <td>4.983561e+08</td>\n", " <td>1.675029e+08</td>\n",
" </tr>\n", " </tr>\n",
" <tr>\n", " <tr>\n",
" <th>3</th>\n", " <th>3</th>\n",
" <td>1030007006</td>\n", " <td>1030007006</td>\n",
" <td>1.1860</td>\n", " <td>1.1860</td>\n",
" <td>0.168919</td>\n", " <td>0.168919</td>\n",
" <td>5.582928e+08</td>\n", " <td>4.971115e+08</td>\n",
" <td>6.621352e+08</td>\n", " <td>5.895742e+08</td>\n",
" </tr>\n", " </tr>\n",
" <tr>\n", " <tr>\n",
" <th>4</th>\n", " <th>4</th>\n",
" <td>1030008874</td>\n", " <td>1030008874</td>\n",
" <td>1.7560</td>\n", " <td>1.7560</td>\n",
" <td>1.679213</td>\n", " <td>1.679213</td>\n",
" <td>3.007749e+06</td>\n", " <td>1.152421e+07</td>\n",
" <td>5.281608e+06</td>\n", " <td>2.023652e+07</td>\n",
" </tr>\n", " </tr>\n",
" </tbody>\n", " </tbody>\n",
"</table>\n", "</table>\n",
...@@ -237,14 +238,14 @@ ...@@ -237,14 +238,14 @@
], ],
"text/plain": [ "text/plain": [
" SECURITYID UNITNAV NAVGRTD ENDFDSHARE MKTV\n", " SECURITYID UNITNAV NAVGRTD ENDFDSHARE MKTV\n",
"0 1030000867 1.9650 1.708075 1.385083e+08 2.721688e+08\n", "0 1030000867 1.9650 1.708075 1.940913e+08 3.813894e+08\n",
"1 1030004356 1.5530 1.569653 1.991231e+08 3.092382e+08\n", "1 1030004356 1.5530 1.569653 3.329090e+08 5.170077e+08\n",
"2 1030005207 1.8904 1.689080 2.636247e+08 4.983561e+08\n", "2 1030005207 1.8904 1.689080 8.860713e+07 1.675029e+08\n",
"3 1030007006 1.1860 0.168919 5.582928e+08 6.621352e+08\n", "3 1030007006 1.1860 0.168919 4.971115e+08 5.895742e+08\n",
"4 1030008874 1.7560 1.679213 3.007749e+06 5.281608e+06" "4 1030008874 1.7560 1.679213 1.152421e+07 2.023652e+07"
] ]
}, },
"execution_count": 4, "execution_count": 6,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
...@@ -257,7 +258,7 @@ ...@@ -257,7 +258,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 5, "execution_count": 7,
"id": "3dc7be9d-e8c2-4566-bf14-d617ea230c14", "id": "3dc7be9d-e8c2-4566-bf14-d617ea230c14",
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
...@@ -343,21 +344,20 @@ ...@@ -343,21 +344,20 @@
"4 1030008874 9902 混合型基金 990202 高权益仓位混合型基金" "4 1030008874 9902 混合型基金 990202 高权益仓位混合型基金"
] ]
}, },
"execution_count": 5, "execution_count": 7,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
], ],
"source": [ "source": [
"# 获取基金分类信息\n", "# 获取基金分类信息\n",
"bonds_class_codes = [\"990301\", \"990302\", \"990303\", \"990304\", \"990305\", \"990306\", \"990399\", \"990501\", \"990502\", \"990205\", \"990402\", \"990603\"]\n",
"funds_rl_classification = fd_rl_classification(funds_mktv.SECURITYID, trade_dt)\n", "funds_rl_classification = fd_rl_classification(funds_mktv.SECURITYID, trade_dt)\n",
"funds_rl_classification.head()" "funds_rl_classification.head()"
] ]
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 6, "execution_count": 8,
"id": "1055c68c-3875-489b-acaa-a9046d98a2c1", "id": "1055c68c-3875-489b-acaa-a9046d98a2c1",
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
...@@ -368,13 +368,13 @@ ...@@ -368,13 +368,13 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 7, "execution_count": 9,
"id": "00d6c888-682e-43c5-8c57-420a279effa3", "id": "00d6c888-682e-43c5-8c57-420a279effa3",
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"market_manager_index_ret = total_df.MKTV @ total_df.NAVGRTD / (1e-10 + total_df.MKTV.sum()) / 100.0\n", "market_manager_index_ret = total_df.MKTV @ total_df.NAVGRTD / (1e-10 + total_df.MKTV.sum()) / 100.0\n",
"flags = total_df.rl_sub_class.isin(bonds_class_codes)\n", "flags = total_df.rl_sub_class.isin(BOND_CLASSES)\n",
"bond_market_manager_index_ret = total_df[flags].MKTV @ total_df[flags].NAVGRTD / (1e-10 + total_df[flags].MKTV.sum()) / 100.0\n", "bond_market_manager_index_ret = total_df[flags].MKTV @ total_df[flags].NAVGRTD / (1e-10 + total_df[flags].MKTV.sum()) / 100.0\n",
"equity_market_manager_index_ret = total_df[~flags].MKTV @ total_df[~flags].NAVGRTD / (1e-10 + total_df[~flags].MKTV.sum()) / 100.0" "equity_market_manager_index_ret = total_df[~flags].MKTV @ total_df[~flags].NAVGRTD / (1e-10 + total_df[~flags].MKTV.sum()) / 100.0"
] ]
...@@ -389,7 +389,7 @@ ...@@ -389,7 +389,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 8, "execution_count": 10,
"id": "e1817df4-ce3f-48ca-b656-2a17abc18f8e", "id": "e1817df4-ce3f-48ca-b656-2a17abc18f8e",
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
...@@ -398,7 +398,6 @@ ...@@ -398,7 +398,6 @@
" funds = fd_manager(manager_ids, start_date=trade_dt, end_date=trade_dt)\n", " funds = fd_manager(manager_ids, start_date=trade_dt, end_date=trade_dt)\n",
" funds_mktv = fd_fund_mktv(funds.SECURITYID.unique(), trade_dt=trade_dt)\n", " funds_mktv = fd_fund_mktv(funds.SECURITYID.unique(), trade_dt=trade_dt)\n",
" \n", " \n",
" bonds_class_codes = [\"990301\", \"990302\", \"990303\", \"990304\", \"990305\", \"990306\", \"990399\", \"990501\", \"990502\", \"990205\", \"990402\", \"990603\"]\n",
" funds_rl_classification = fd_rl_classification(funds_mktv.SECURITYID, trade_dt)\n", " funds_rl_classification = fd_rl_classification(funds_mktv.SECURITYID, trade_dt)\n",
" \n", " \n",
" total_df = pd.merge(funds, funds_mktv, on=\"SECURITYID\")\n", " total_df = pd.merge(funds, funds_mktv, on=\"SECURITYID\")\n",
...@@ -406,7 +405,7 @@ ...@@ -406,7 +405,7 @@
" \n", " \n",
" def calc(g):\n", " def calc(g):\n",
" market_manager_index_ret = g.MKTV @ g.NAVGRTD / (1e-10 + g.MKTV.sum()) / 100.0\n", " market_manager_index_ret = g.MKTV @ g.NAVGRTD / (1e-10 + g.MKTV.sum()) / 100.0\n",
" flags = g.rl_sub_class.isin(bonds_class_codes)\n", " flags = g.rl_sub_class.isin(BOND_CLASSES)\n",
" bond_market_manager_index_ret = g[flags].MKTV @ g[flags].NAVGRTD / (1e-10 + g[flags].MKTV.sum()) / 100.0\n", " bond_market_manager_index_ret = g[flags].MKTV @ g[flags].NAVGRTD / (1e-10 + g[flags].MKTV.sum()) / 100.0\n",
" equity_market_manager_index_ret = g[~flags].MKTV @ g[~flags].NAVGRTD / (1e-10 + g[~flags].MKTV.sum()) / 100.0\n", " equity_market_manager_index_ret = g[~flags].MKTV @ g[~flags].NAVGRTD / (1e-10 + g[~flags].MKTV.sum()) / 100.0\n",
" return pd.Series(\n", " return pd.Series(\n",
...@@ -417,7 +416,7 @@ ...@@ -417,7 +416,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 9, "execution_count": 11,
"id": "3225d437-56a8-4fc6-80bc-22456a356754", "id": "3225d437-56a8-4fc6-80bc-22456a356754",
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
...@@ -464,9 +463,9 @@ ...@@ -464,9 +463,9 @@
" <th>1</th>\n", " <th>1</th>\n",
" <td>30322345</td>\n", " <td>30322345</td>\n",
" <td>左金保</td>\n", " <td>左金保</td>\n",
" <td>0.009627</td>\n", " <td>0.011596</td>\n",
" <td>0.0</td>\n", " <td>0.0</td>\n",
" <td>0.009627</td>\n", " <td>0.011596</td>\n",
" <td>20220207</td>\n", " <td>20220207</td>\n",
" </tr>\n", " </tr>\n",
" </tbody>\n", " </tbody>\n",
...@@ -476,10 +475,10 @@ ...@@ -476,10 +475,10 @@
"text/plain": [ "text/plain": [
" MANAGERCODE MANAGERNAME all bond equity trade_date\n", " MANAGERCODE MANAGERNAME all bond equity trade_date\n",
"0 30189744 张坤 0.039522 0.0 0.039522 20220207\n", "0 30189744 张坤 0.039522 0.0 0.039522 20220207\n",
"1 30322345 左金保 0.009627 0.0 0.009627 20220207" "1 30322345 左金保 0.011596 0.0 0.011596 20220207"
] ]
}, },
"execution_count": 9, "execution_count": 11,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
......
This diff is collapsed.
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