Commit 52149dd6 authored by Dr.李's avatar Dr.李

added manager index notebook

parent e3a7f558
...@@ -433,20 +433,18 @@ def stk_return(start_date, end_date, security_ids=None): ...@@ -433,20 +433,18 @@ def stk_return(start_date, end_date, security_ids=None):
return read_sql(query, source="mysql").sort_values("security_code").reset_index(drop=True) return read_sql(query, source="mysql").sort_values("security_code").reset_index(drop=True)
def fd_manager(manager_ids, manager_names=None, start_date=None, end_date=None): def fd_manager(manager_ids=None, manager_names=None, start_date=None, end_date=None):
if manager_ids: if manager_ids:
manager_ids = _join_ids(manager_ids) manager_ids = _join_ids(manager_ids)
elif manager_names: elif manager_names:
manager_names = _join_ids(manager_names) manager_names = _join_ids(manager_names)
else:
raise ValueError("manager_ids and manager_names can't be set empty both")
if manager_ids: if manager_ids:
query = f""" query = f"""
SELECT MANAGERCODE, MANAGERNAME, COMPCODE, COMPNAME, SECODE as SECURITYID, BEGINDATE, ENDDATE FROM TQ_FD_MGPERFORMANCE SELECT MANAGERCODE, MANAGERNAME, COMPCODE, COMPNAME, SECODE as SECURITYID, BEGINDATE, ENDDATE FROM TQ_FD_MGPERFORMANCE
WHERE WHERE
BEGINDATE <= '{_to_yyyymmdd(end_date)}' AND BEGINDATE <= '{_to_yyyymmdd(end_date)}' AND
ENDDATE >= '{_to_yyyymmdd(start_date)}' AND (ENDDATE >= '{_to_yyyymmdd(start_date)}' OR ENDDATE = '19000101') AND
MANAGERCODE in ({manager_ids}) AND MANAGERCODE in ({manager_ids}) AND
ISVALID = 1 ISVALID = 1
""" """
...@@ -454,10 +452,48 @@ def fd_manager(manager_ids, manager_names=None, start_date=None, end_date=None): ...@@ -454,10 +452,48 @@ def fd_manager(manager_ids, manager_names=None, start_date=None, end_date=None):
query = f""" query = f"""
SELECT MANAGERCODE, MANAGERNAME, COMPCODE, COMPNAME, SECODE as SECURITYID, BEGINDATE, ENDDATE FROM TQ_FD_MGPERFORMANCE SELECT MANAGERCODE, MANAGERNAME, COMPCODE, COMPNAME, SECODE as SECURITYID, BEGINDATE, ENDDATE FROM TQ_FD_MGPERFORMANCE
WHERE WHERE
BEGINDATE <= '{_to_yyyymmdd(end_date)}' AND BEGINDATE <= '{_to_yyyymmdd(end_date)}' AND
ENDDATE >= '{_to_yyyymmdd(start_date)}' AND (ENDDATE >= '{_to_yyyymmdd(start_date)}' OR ENDDATE = '19000101') AND
MANAGERNAME in ({manager_names}) AND MANAGERNAME in ({manager_names}) AND
ISVALID = 1 ISVALID = 1
""" """
else:
query = f"""
SELECT MANAGERCODE, MANAGERNAME, COMPCODE, COMPNAME, SECODE as SECURITYID, BEGINDATE, ENDDATE FROM TQ_FD_MGPERFORMANCE
WHERE
BEGINDATE <= '{_to_yyyymmdd(end_date)}' AND
(ENDDATE >= '{_to_yyyymmdd(start_date)}' OR ENDDATE = '19000101') AND
ISVALID = 1
"""
return read_sql(query).sort_values("MANAGERCODE").reset_index(drop=True) return read_sql(query).sort_values("MANAGERCODE").reset_index(drop=True)
def fd_fund_mktv(security_ids, trade_dt):
nav_df = fd_qtfdnav(security_ids, trade_dt)
sec_id_strs = _join_ids(security_ids)
query = f"""
SELECT SECODE as SECURITYID, REPORTDATE, INIFDSHARE * 10000 as INIFDSHARE, ENDFDSHARE * 10000 as ENDFDSHARE FROM TQ_FD_SHARE
WHERE
REPORTDATE <= '{_to_yyyymmdd(trade_dt)}' AND
SECODE IN ({sec_id_strs}) AND
ISVALID = 1
ORDER BY REPORTDATE
"""
shares_df = read_sql(query).sort_values("SECURITYID").reset_index(drop=True)
shares_df = shares_df.groupby("SECURITYID", as_index=False).last()
df = pd.merge(nav_df[["SECURITYID", "UNITNAV", "NAVGRTD"]], shares_df[["SECURITYID", "ENDFDSHARE"]], on="SECURITYID")
df["MKTV"] = df["UNITNAV"] * df["ENDFDSHARE"]
return df
def fd_rl_classification(security_ids, trade_dt):
sec_id_strs = _join_ids(security_ids)
query = f"""
SELECT security_id as SECURITYID, rl_class, rl_class_name, rl_sub_class, rl_sub_class_name FROM fd_rl_classification
WHERE
trade_date = '{_to_yyyymmdd(trade_dt)}' AND
security_id in ({sec_id_strs}) AND
flag = 1
"""
return read_sql(query, source="mysql").sort_values("SECURITYID").reset_index(drop=True)
{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"id": "ca389ee5-b800-4682-bfab-a22a6247bd67",
"metadata": {},
"outputs": [],
"source": [
"import sys\n",
"sys.path.append(\"../\")\n",
"import datetime as dt\n",
"from fof.utility import fd_manager\n",
"from PyFin.api import *"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "008213ed-f569-4535-8519-7a5b1b06503c",
"metadata": {},
"outputs": [],
"source": [
"trade_dt = adjustDateByCalendar(\"china.sse\", \"2015-01-01\").strftime(\"%Y%m%d\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "be10d317-bca6-41db-9b54-56573cd564a6",
"metadata": {},
"outputs": [],
"source": [
"funds = fd_manager(\"30057809\", start_date='20100101', end_date='20220226')"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "44022a45-2da2-4ee9-a107-f842f396317f",
"metadata": {},
"outputs": [],
"source": [
"funds"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "321f0f1d-c5c9-4591-8b67-e3ab9dbd1a11",
"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
}
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "ca389ee5-b800-4682-bfab-a22a6247bd67",
"metadata": {},
"outputs": [],
"source": [
"import sys\n",
"sys.path.append(\"../\")\n",
"import datetime as dt\n",
"from fof.utility import (\n",
" fd_manager,\n",
" fd_fund_mktv,\n",
" fd_rl_classification\n",
")\n",
"import pandas as pd\n",
"from PyFin.api import *"
]
},
{
"cell_type": "markdown",
"id": "63c680ce-57a7-4376-90fa-629c80fd5b82",
"metadata": {},
"source": [
"# 1. Prepare Data\n",
"-----------------------"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "008213ed-f569-4535-8519-7a5b1b06503c",
"metadata": {},
"outputs": [],
"source": [
"trade_dt = adjustDateByCalendar(\"china.sse\", \"2022-02-01\").strftime(\"%Y%m%d\")"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "be10d317-bca6-41db-9b54-56573cd564a6",
"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>MANAGERCODE</th>\n",
" <th>MANAGERNAME</th>\n",
" <th>COMPCODE</th>\n",
" <th>COMPNAME</th>\n",
" <th>SECURITYID</th>\n",
" <th>BEGINDATE</th>\n",
" <th>ENDDATE</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>30322345</td>\n",
" <td>左金保</td>\n",
" <td>80000243</td>\n",
" <td>长信基金管理有限责任公司</td>\n",
" <td>1030008874</td>\n",
" <td>20170109</td>\n",
" <td>19000101</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>30322345</td>\n",
" <td>左金保</td>\n",
" <td>80000243</td>\n",
" <td>长信基金管理有限责任公司</td>\n",
" <td>1030010453</td>\n",
" <td>20171109</td>\n",
" <td>19000101</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>30322345</td>\n",
" <td>左金保</td>\n",
" <td>80000243</td>\n",
" <td>长信基金管理有限责任公司</td>\n",
" <td>1030011585</td>\n",
" <td>20180809</td>\n",
" <td>19000101</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>30322345</td>\n",
" <td>左金保</td>\n",
" <td>80000243</td>\n",
" <td>长信基金管理有限责任公司</td>\n",
" <td>1030010116</td>\n",
" <td>20180830</td>\n",
" <td>19000101</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>30322345</td>\n",
" <td>左金保</td>\n",
" <td>80000243</td>\n",
" <td>长信基金管理有限责任公司</td>\n",
" <td>2030000115</td>\n",
" <td>20150313</td>\n",
" <td>19000101</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" MANAGERCODE MANAGERNAME COMPCODE COMPNAME SECURITYID BEGINDATE \\\n",
"0 30322345 左金保 80000243 长信基金管理有限责任公司 1030008874 20170109 \n",
"1 30322345 左金保 80000243 长信基金管理有限责任公司 1030010453 20171109 \n",
"2 30322345 左金保 80000243 长信基金管理有限责任公司 1030011585 20180809 \n",
"3 30322345 左金保 80000243 长信基金管理有限责任公司 1030010116 20180830 \n",
"4 30322345 左金保 80000243 长信基金管理有限责任公司 2030000115 20150313 \n",
"\n",
" ENDDATE \n",
"0 19000101 \n",
"1 19000101 \n",
"2 19000101 \n",
"3 19000101 \n",
"4 19000101 "
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 获取指定日,基金经理在管基金\n",
"funds = fd_manager(\"30322345\", start_date=trade_dt, end_date=trade_dt)\n",
"funds.head()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "ffbac3af-39d6-4cd3-95cb-705c32380985",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>SECURITYID</th>\n",
" <th>UNITNAV</th>\n",
" <th>NAVGRTD</th>\n",
" <th>ENDFDSHARE</th>\n",
" <th>MKTV</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1030000867</td>\n",
" <td>1.9650</td>\n",
" <td>1.708075</td>\n",
" <td>1.385083e+08</td>\n",
" <td>2.721688e+08</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1030004356</td>\n",
" <td>1.5530</td>\n",
" <td>1.569653</td>\n",
" <td>1.991231e+08</td>\n",
" <td>3.092382e+08</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1030005207</td>\n",
" <td>1.8904</td>\n",
" <td>1.689080</td>\n",
" <td>2.636247e+08</td>\n",
" <td>4.983561e+08</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1030007006</td>\n",
" <td>1.1860</td>\n",
" <td>0.168919</td>\n",
" <td>5.582928e+08</td>\n",
" <td>6.621352e+08</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1030008874</td>\n",
" <td>1.7560</td>\n",
" <td>1.679213</td>\n",
" <td>3.007749e+06</td>\n",
" <td>5.281608e+06</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" SECURITYID UNITNAV NAVGRTD ENDFDSHARE MKTV\n",
"0 1030000867 1.9650 1.708075 1.385083e+08 2.721688e+08\n",
"1 1030004356 1.5530 1.569653 1.991231e+08 3.092382e+08\n",
"2 1030005207 1.8904 1.689080 2.636247e+08 4.983561e+08\n",
"3 1030007006 1.1860 0.168919 5.582928e+08 6.621352e+08\n",
"4 1030008874 1.7560 1.679213 3.007749e+06 5.281608e+06"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 在管基金规模\n",
"funds_mktv = fd_fund_mktv(funds.SECURITYID.unique(), trade_dt=trade_dt)\n",
"funds_mktv.head()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "3dc7be9d-e8c2-4566-bf14-d617ea230c14",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>SECURITYID</th>\n",
" <th>rl_class</th>\n",
" <th>rl_class_name</th>\n",
" <th>rl_sub_class</th>\n",
" <th>rl_sub_class_name</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1030000867</td>\n",
" <td>9902</td>\n",
" <td>混合型基金</td>\n",
" <td>990202</td>\n",
" <td>高权益仓位混合型基金</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1030004356</td>\n",
" <td>9901</td>\n",
" <td>股票型基金</td>\n",
" <td>990102</td>\n",
" <td>普通股票型基金</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1030005207</td>\n",
" <td>9901</td>\n",
" <td>股票型基金</td>\n",
" <td>990102</td>\n",
" <td>普通股票型基金</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1030007006</td>\n",
" <td>9902</td>\n",
" <td>混合型基金</td>\n",
" <td>990202</td>\n",
" <td>高权益仓位混合型基金</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1030008874</td>\n",
" <td>9902</td>\n",
" <td>混合型基金</td>\n",
" <td>990202</td>\n",
" <td>高权益仓位混合型基金</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" SECURITYID rl_class rl_class_name rl_sub_class rl_sub_class_name\n",
"0 1030000867 9902 混合型基金 990202 高权益仓位混合型基金\n",
"1 1030004356 9901 股票型基金 990102 普通股票型基金\n",
"2 1030005207 9901 股票型基金 990102 普通股票型基金\n",
"3 1030007006 9902 混合型基金 990202 高权益仓位混合型基金\n",
"4 1030008874 9902 混合型基金 990202 高权益仓位混合型基金"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 获取基金分类信息\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.head()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "1055c68c-3875-489b-acaa-a9046d98a2c1",
"metadata": {},
"outputs": [],
"source": [
"# 计算分类\n",
"total_df = pd.merge(funds_mktv, funds_rl_classification, on=\"SECURITYID\")"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "00d6c888-682e-43c5-8c57-420a279effa3",
"metadata": {},
"outputs": [],
"source": [
"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",
"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"
]
},
{
"cell_type": "markdown",
"id": "36e0e9b4-2c82-4a48-a6d9-a4a5d14151f7",
"metadata": {},
"source": [
"## 1.1 Put it all together"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "e1817df4-ce3f-48ca-b656-2a17abc18f8e",
"metadata": {},
"outputs": [],
"source": [
"def cal_manager_index_ret(manager_ids, 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",
" \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",
" \n",
" total_df = pd.merge(funds, funds_mktv, on=\"SECURITYID\")\n",
" total_df = pd.merge(total_df, funds_rl_classification, on=\"SECURITYID\")\n",
" \n",
" def calc(g):\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",
" 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",
" return pd.Series(\n",
" dict(MANAGERNAME=g.MANAGERNAME.values[0], all=market_manager_index_ret, bond=bond_market_manager_index_ret, equity=equity_market_manager_index_ret)\n",
" )\n",
" return total_df.groupby(\"MANAGERCODE\", as_index=False).apply(calc)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "3225d437-56a8-4fc6-80bc-22456a356754",
"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>MANAGERCODE</th>\n",
" <th>MANAGERNAME</th>\n",
" <th>all</th>\n",
" <th>bond</th>\n",
" <th>equity</th>\n",
" <th>trade_date</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>30189744</td>\n",
" <td>张坤</td>\n",
" <td>0.039522</td>\n",
" <td>0.0</td>\n",
" <td>0.039522</td>\n",
" <td>20220207</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>30322345</td>\n",
" <td>左金保</td>\n",
" <td>0.009627</td>\n",
" <td>0.0</td>\n",
" <td>0.009627</td>\n",
" <td>20220207</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" MANAGERCODE MANAGERNAME all bond equity trade_date\n",
"0 30189744 张坤 0.039522 0.0 0.039522 20220207\n",
"1 30322345 左金保 0.009627 0.0 0.009627 20220207"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"res = cal_manager_index_ret([\"30322345\", \"30189744\"], trade_dt=trade_dt)\n",
"res[\"trade_date\"] = trade_dt\n",
"res"
]
},
{
"cell_type": "markdown",
"id": "f8725110-12d9-475a-8687-d2985f51c9b1",
"metadata": {},
"source": [
"# 2. 基金经理指数\n",
"------------------"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "3b18ed34-2864-472b-b5ed-460e27d1ab4e",
"metadata": {},
"outputs": [],
"source": [
"start_dt = \"2022-01-01\"\n",
"end_dt = \"2022-02-01\"\n",
"\n",
"trade_dates = [d.strftime(\"%Y%m%d\") for d in bizDatesList(\"china.sse\", start_dt, end_dt)]"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "0b15eb76-4a60-4bd5-bf40-a93f0f9255e8",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2022-02-26 20:52:14.442717 : 20220104\n",
"2022-02-26 20:52:35.783732 : 20220105\n",
"2022-02-26 20:52:56.740246 : 20220106\n",
"2022-02-26 20:53:16.887966 : 20220107\n",
"2022-02-26 20:53:42.567207 : 20220110\n",
"2022-02-26 20:54:07.289536 : 20220111\n",
"2022-02-26 20:54:33.584606 : 20220112\n",
"2022-02-26 20:55:03.079815 : 20220113\n",
"2022-02-26 20:55:27.821764 : 20220114\n",
"2022-02-26 20:55:56.362991 : 20220117\n",
"2022-02-26 20:56:20.024529 : 20220118\n",
"2022-02-26 20:56:43.735811 : 20220119\n",
"2022-02-26 20:57:07.604535 : 20220120\n",
"2022-02-26 20:57:34.089679 : 20220121\n",
"2022-02-26 20:58:00.446535 : 20220124\n",
"2022-02-26 20:58:25.516419 : 20220125\n",
"2022-02-26 20:58:49.720528 : 20220126\n",
"2022-02-26 20:59:13.330575 : 20220127\n",
"2022-02-26 20:59:37.040424 : 20220128\n"
]
}
],
"source": [
"dfs = []\n",
"for trade_dt in trade_dates:\n",
" print(dt.datetime.now(), \":\", trade_dt)\n",
" manager_ids = fd_manager(start_date=trade_dt, end_date=trade_dt).MANAGERCODE.unique().tolist()\n",
" res = cal_manager_index_ret(manager_ids, trade_dt)\n",
" res[\"trade_date\"] = trade_dt\n",
" dfs.append(res)"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "c1e84b66-9528-444e-aa7a-dd784352cf28",
"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>MANAGERCODE</th>\n",
" <th>MANAGERNAME</th>\n",
" <th>all</th>\n",
" <th>bond</th>\n",
" <th>equity</th>\n",
" <th>trade_date</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>757</th>\n",
" <td>30322345</td>\n",
" <td>左金保</td>\n",
" <td>-0.011036</td>\n",
" <td>0.0</td>\n",
" <td>-0.011036</td>\n",
" <td>20220104</td>\n",
" </tr>\n",
" <tr>\n",
" <th>758</th>\n",
" <td>30322345</td>\n",
" <td>左金保</td>\n",
" <td>-0.020597</td>\n",
" <td>0.0</td>\n",
" <td>-0.020597</td>\n",
" <td>20220105</td>\n",
" </tr>\n",
" <tr>\n",
" <th>758</th>\n",
" <td>30322345</td>\n",
" <td>左金保</td>\n",
" <td>0.003278</td>\n",
" <td>0.0</td>\n",
" <td>0.003278</td>\n",
" <td>20220106</td>\n",
" </tr>\n",
" <tr>\n",
" <th>767</th>\n",
" <td>30322345</td>\n",
" <td>左金保</td>\n",
" <td>-0.006381</td>\n",
" <td>0.0</td>\n",
" <td>-0.006381</td>\n",
" <td>20220107</td>\n",
" </tr>\n",
" <tr>\n",
" <th>758</th>\n",
" <td>30322345</td>\n",
" <td>左金保</td>\n",
" <td>0.004087</td>\n",
" <td>0.0</td>\n",
" <td>0.004087</td>\n",
" <td>20220110</td>\n",
" </tr>\n",
" <tr>\n",
" <th>758</th>\n",
" <td>30322345</td>\n",
" <td>左金保</td>\n",
" <td>-0.008969</td>\n",
" <td>0.0</td>\n",
" <td>-0.008969</td>\n",
" <td>20220111</td>\n",
" </tr>\n",
" <tr>\n",
" <th>759</th>\n",
" <td>30322345</td>\n",
" <td>左金保</td>\n",
" <td>0.012165</td>\n",
" <td>0.0</td>\n",
" <td>0.012165</td>\n",
" <td>20220112</td>\n",
" </tr>\n",
" <tr>\n",
" <th>759</th>\n",
" <td>30322345</td>\n",
" <td>左金保</td>\n",
" <td>-0.015069</td>\n",
" <td>0.0</td>\n",
" <td>-0.015069</td>\n",
" <td>20220113</td>\n",
" </tr>\n",
" <tr>\n",
" <th>766</th>\n",
" <td>30322345</td>\n",
" <td>左金保</td>\n",
" <td>-0.000082</td>\n",
" <td>0.0</td>\n",
" <td>-0.000082</td>\n",
" <td>20220114</td>\n",
" </tr>\n",
" <tr>\n",
" <th>753</th>\n",
" <td>30322345</td>\n",
" <td>左金保</td>\n",
" <td>0.012872</td>\n",
" <td>0.0</td>\n",
" <td>0.012872</td>\n",
" <td>20220117</td>\n",
" </tr>\n",
" <tr>\n",
" <th>755</th>\n",
" <td>30322345</td>\n",
" <td>左金保</td>\n",
" <td>0.005892</td>\n",
" <td>0.0</td>\n",
" <td>0.005892</td>\n",
" <td>20220118</td>\n",
" </tr>\n",
" <tr>\n",
" <th>755</th>\n",
" <td>30322345</td>\n",
" <td>左金保</td>\n",
" <td>-0.014009</td>\n",
" <td>0.0</td>\n",
" <td>-0.014009</td>\n",
" <td>20220119</td>\n",
" </tr>\n",
" <tr>\n",
" <th>754</th>\n",
" <td>30322345</td>\n",
" <td>左金保</td>\n",
" <td>-0.012030</td>\n",
" <td>0.0</td>\n",
" <td>-0.012030</td>\n",
" <td>20220120</td>\n",
" </tr>\n",
" <tr>\n",
" <th>763</th>\n",
" <td>30322345</td>\n",
" <td>左金保</td>\n",
" <td>-0.009188</td>\n",
" <td>0.0</td>\n",
" <td>-0.009188</td>\n",
" <td>20220121</td>\n",
" </tr>\n",
" <tr>\n",
" <th>752</th>\n",
" <td>30322345</td>\n",
" <td>左金保</td>\n",
" <td>0.008311</td>\n",
" <td>0.0</td>\n",
" <td>0.008311</td>\n",
" <td>20220124</td>\n",
" </tr>\n",
" <tr>\n",
" <th>753</th>\n",
" <td>30322345</td>\n",
" <td>左金保</td>\n",
" <td>-0.024946</td>\n",
" <td>0.0</td>\n",
" <td>-0.024946</td>\n",
" <td>20220125</td>\n",
" </tr>\n",
" <tr>\n",
" <th>753</th>\n",
" <td>30322345</td>\n",
" <td>左金保</td>\n",
" <td>0.005885</td>\n",
" <td>0.0</td>\n",
" <td>0.005885</td>\n",
" <td>20220126</td>\n",
" </tr>\n",
" <tr>\n",
" <th>754</th>\n",
" <td>30322345</td>\n",
" <td>左金保</td>\n",
" <td>-0.019892</td>\n",
" <td>0.0</td>\n",
" <td>-0.019892</td>\n",
" <td>20220127</td>\n",
" </tr>\n",
" <tr>\n",
" <th>762</th>\n",
" <td>30322345</td>\n",
" <td>左金保</td>\n",
" <td>-0.005132</td>\n",
" <td>0.0</td>\n",
" <td>-0.005132</td>\n",
" <td>20220128</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" MANAGERCODE MANAGERNAME all bond equity trade_date\n",
"757 30322345 左金保 -0.011036 0.0 -0.011036 20220104\n",
"758 30322345 左金保 -0.020597 0.0 -0.020597 20220105\n",
"758 30322345 左金保 0.003278 0.0 0.003278 20220106\n",
"767 30322345 左金保 -0.006381 0.0 -0.006381 20220107\n",
"758 30322345 左金保 0.004087 0.0 0.004087 20220110\n",
"758 30322345 左金保 -0.008969 0.0 -0.008969 20220111\n",
"759 30322345 左金保 0.012165 0.0 0.012165 20220112\n",
"759 30322345 左金保 -0.015069 0.0 -0.015069 20220113\n",
"766 30322345 左金保 -0.000082 0.0 -0.000082 20220114\n",
"753 30322345 左金保 0.012872 0.0 0.012872 20220117\n",
"755 30322345 左金保 0.005892 0.0 0.005892 20220118\n",
"755 30322345 左金保 -0.014009 0.0 -0.014009 20220119\n",
"754 30322345 左金保 -0.012030 0.0 -0.012030 20220120\n",
"763 30322345 左金保 -0.009188 0.0 -0.009188 20220121\n",
"752 30322345 左金保 0.008311 0.0 0.008311 20220124\n",
"753 30322345 左金保 -0.024946 0.0 -0.024946 20220125\n",
"753 30322345 左金保 0.005885 0.0 0.005885 20220126\n",
"754 30322345 左金保 -0.019892 0.0 -0.019892 20220127\n",
"762 30322345 左金保 -0.005132 0.0 -0.005132 20220128"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"final_report = pd.concat(dfs)\n",
"final_report[final_report.MANAGERCODE == '30322345']"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "215df6f9-032d-46e6-8e9c-fabbfefff472",
"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
}
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