diff --git "a/script/api_test.ipynb" "b/script/api_test.ipynb"
deleted file mode 100644--- "a/script/api_test.ipynb"
+++ /dev/null
@@ -1,1987 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "code",
- "execution_count": 11,
- "metadata": {},
- "outputs": [],
- "source": [
- "import api\n",
- "import datetime as dt\n",
- "from datetime import datetime, timedelta\n",
- "import pandas as pd\n",
- "from sqlalchemy import create_engine"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [],
- "source": [
- "%load_ext autoreload\n",
- "%autoreload 2"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [],
- "source": [
- "db_url = \"sqlite:///../local.db\""
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 13,
- "metadata": {},
- "outputs": [],
- "source": [
- "## test create portoflio profile\n",
- "stocks = [\n",
- " dict(ticker=\"002709.XSHE\", shares=100, date=datetime(2021,1,5)),\n",
- " dict(ticker=\"002920.XSHE\", shares=100, date=datetime(2021,1,5)),\n",
- " dict(ticker=\"300274.XSHE\", shares=100, date=datetime(2021,1,5)),\n",
- " dict(ticker='600409.XSHG', shares=100, date=datetime(2021,1,5)),\n",
- " dict(ticker='600415.XSHG', shares=100, date=datetime(2021,1,5)),\n",
- " dict(ticker='603882.XSHG', shares=100, date=datetime(2021,1,5))\n",
- "]\n",
- "p_portfolio, error = api.update_portfolio_profile(stocks)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 15,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "
\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " ticker | \n",
- " shares | \n",
- " date | \n",
- " sector | \n",
- " aggregate_sector | \n",
- " display_name | \n",
- " name | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 0 | \n",
- " 002709.XSHE | \n",
- " 100 | \n",
- " 2021-01-05 | \n",
- " 电气设备I 电池II 电池化学品III 化学原料和化学制品制造业 电池部件及材料 工业 | \n",
- " 工业 | \n",
- " 天赐材料 | \n",
- " TCCL | \n",
- "
\n",
- " \n",
- " 1 | \n",
- " 002920.XSHE | \n",
- " 100 | \n",
- " 2021-01-05 | \n",
- " 计算机I 软件开发II 垂直应用软件III 汽车制造业 汽车电子 可选消费 | \n",
- " 信息与通信 | \n",
- " 德赛西威 | \n",
- " DSXW | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 300274.XSHE | \n",
- " 100 | \n",
- " 2021-01-05 | \n",
- " 电气设备I 光伏设备II 逆变器III 电气机械和器材制造业 光伏设备 工业 | \n",
- " 工业 | \n",
- " 阳光电源 | \n",
- " YGDY | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 600409.XSHG | \n",
- " 100 | \n",
- " 2021-01-05 | \n",
- " 化工I 化学原料II 纯碱III 化学原料和化学制品制造业 粘胶 原材料 | \n",
- " 原料与能源 | \n",
- " 三友化工 | \n",
- " SYHG | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 600415.XSHG | \n",
- " 100 | \n",
- " 2021-01-05 | \n",
- " 商业贸易I 一般零售II 商业物业经营III 商务服务业 市场服务 工业 | \n",
- " 消费 | \n",
- " 小商品城 | \n",
- " XSPC | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 603882.XSHG | \n",
- " 100 | \n",
- " 2021-01-05 | \n",
- " 医药生物I 医疗服务II 诊断服务III 卫生 体外诊断 医药卫生 | \n",
- " 医药卫生 | \n",
- " 金域医学 | \n",
- " JYYX | \n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " ticker shares date \\\n",
- "0 002709.XSHE 100 2021-01-05 \n",
- "1 002920.XSHE 100 2021-01-05 \n",
- "2 300274.XSHE 100 2021-01-05 \n",
- "3 600409.XSHG 100 2021-01-05 \n",
- "4 600415.XSHG 100 2021-01-05 \n",
- "5 603882.XSHG 100 2021-01-05 \n",
- "\n",
- " sector aggregate_sector display_name \\\n",
- "0 电气设备I 电池II 电池化学品III 化学原料和化学制品制造业 电池部件及材料 工业 工业 天赐材料 \n",
- "1 计算机I 软件开发II 垂直应用软件III 汽车制造业 汽车电子 可选消费 信息与通信 德赛西威 \n",
- "2 电气设备I 光伏设备II 逆变器III 电气机械和器材制造业 光伏设备 工业 工业 阳光电源 \n",
- "3 化工I 化学原料II 纯碱III 化学原料和化学制品制造业 粘胶 原材料 原料与能源 三友化工 \n",
- "4 商业贸易I 一般零售II 商业物业经营III 商务服务业 市场服务 工业 消费 小商品城 \n",
- "5 医药生物I 医疗服务II 诊断服务III 卫生 体外诊断 医药卫生 医药卫生 金域医学 \n",
- "\n",
- " name \n",
- "0 TCCL \n",
- "1 DSXW \n",
- "2 YGDY \n",
- "3 SYHG \n",
- "4 XSPC \n",
- "5 JYYX "
- ]
- },
- "execution_count": 15,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "p_portfolio"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 16,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " ticker | \n",
- " shares | \n",
- " date | \n",
- " sector | \n",
- " aggregate_sector | \n",
- " display_name | \n",
- " name | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 0 | \n",
- " 002709.XSHE | \n",
- " 200 | \n",
- " 2022-01-10 | \n",
- " 电气设备I 电池II 电池化学品III 化学原料和化学制品制造业 电池部件及材料 工业 | \n",
- " 工业 | \n",
- " 天赐材料 | \n",
- " TCCL | \n",
- "
\n",
- " \n",
- " 1 | \n",
- " 002920.XSHE | \n",
- " 200 | \n",
- " 2022-01-10 | \n",
- " 计算机I 软件开发II 垂直应用软件III 汽车制造业 汽车电子 可选消费 | \n",
- " 信息与通信 | \n",
- " 德赛西威 | \n",
- " DSXW | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 300274.XSHE | \n",
- " 200 | \n",
- " 2022-01-10 | \n",
- " 电气设备I 光伏设备II 逆变器III 电气机械和器材制造业 光伏设备 工业 | \n",
- " 工业 | \n",
- " 阳光电源 | \n",
- " YGDY | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 600409.XSHG | \n",
- " 200 | \n",
- " 2022-01-10 | \n",
- " 化工I 化学原料II 纯碱III 化学原料和化学制品制造业 粘胶 原材料 | \n",
- " 原料与能源 | \n",
- " 三友化工 | \n",
- " SYHG | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 600415.XSHG | \n",
- " 200 | \n",
- " 2022-01-10 | \n",
- " 商业贸易I 一般零售II 商业物业经营III 商务服务业 市场服务 工业 | \n",
- " 消费 | \n",
- " 小商品城 | \n",
- " XSPC | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 603882.XSHG | \n",
- " 200 | \n",
- " 2022-01-10 | \n",
- " 医药生物I 医疗服务II 诊断服务III 卫生 体外诊断 医药卫生 | \n",
- " 医药卫生 | \n",
- " 金域医学 | \n",
- " JYYX | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 002709.XSHE | \n",
- " 100 | \n",
- " 2021-01-05 | \n",
- " 电气设备I 电池II 电池化学品III 化学原料和化学制品制造业 电池部件及材料 工业 | \n",
- " 工业 | \n",
- " 天赐材料 | \n",
- " TCCL | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 002920.XSHE | \n",
- " 100 | \n",
- " 2021-01-05 | \n",
- " 计算机I 软件开发II 垂直应用软件III 汽车制造业 汽车电子 可选消费 | \n",
- " 信息与通信 | \n",
- " 德赛西威 | \n",
- " DSXW | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 300274.XSHE | \n",
- " 100 | \n",
- " 2021-01-05 | \n",
- " 电气设备I 光伏设备II 逆变器III 电气机械和器材制造业 光伏设备 工业 | \n",
- " 工业 | \n",
- " 阳光电源 | \n",
- " YGDY | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 600409.XSHG | \n",
- " 100 | \n",
- " 2021-01-05 | \n",
- " 化工I 化学原料II 纯碱III 化学原料和化学制品制造业 粘胶 原材料 | \n",
- " 原料与能源 | \n",
- " 三友化工 | \n",
- " SYHG | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 600415.XSHG | \n",
- " 100 | \n",
- " 2021-01-05 | \n",
- " 商业贸易I 一般零售II 商业物业经营III 商务服务业 市场服务 工业 | \n",
- " 消费 | \n",
- " 小商品城 | \n",
- " XSPC | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " 603882.XSHG | \n",
- " 100 | \n",
- " 2021-01-05 | \n",
- " 医药生物I 医疗服务II 诊断服务III 卫生 体外诊断 医药卫生 | \n",
- " 医药卫生 | \n",
- " 金域医学 | \n",
- " JYYX | \n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " ticker shares date \\\n",
- "0 002709.XSHE 200 2022-01-10 \n",
- "1 002920.XSHE 200 2022-01-10 \n",
- "2 300274.XSHE 200 2022-01-10 \n",
- "3 600409.XSHG 200 2022-01-10 \n",
- "4 600415.XSHG 200 2022-01-10 \n",
- "5 603882.XSHG 200 2022-01-10 \n",
- "6 002709.XSHE 100 2021-01-05 \n",
- "7 002920.XSHE 100 2021-01-05 \n",
- "8 300274.XSHE 100 2021-01-05 \n",
- "9 600409.XSHG 100 2021-01-05 \n",
- "10 600415.XSHG 100 2021-01-05 \n",
- "11 603882.XSHG 100 2021-01-05 \n",
- "\n",
- " sector aggregate_sector display_name \\\n",
- "0 电气设备I 电池II 电池化学品III 化学原料和化学制品制造业 电池部件及材料 工业 工业 天赐材料 \n",
- "1 计算机I 软件开发II 垂直应用软件III 汽车制造业 汽车电子 可选消费 信息与通信 德赛西威 \n",
- "2 电气设备I 光伏设备II 逆变器III 电气机械和器材制造业 光伏设备 工业 工业 阳光电源 \n",
- "3 化工I 化学原料II 纯碱III 化学原料和化学制品制造业 粘胶 原材料 原料与能源 三友化工 \n",
- "4 商业贸易I 一般零售II 商业物业经营III 商务服务业 市场服务 工业 消费 小商品城 \n",
- "5 医药生物I 医疗服务II 诊断服务III 卫生 体外诊断 医药卫生 医药卫生 金域医学 \n",
- "6 电气设备I 电池II 电池化学品III 化学原料和化学制品制造业 电池部件及材料 工业 工业 天赐材料 \n",
- "7 计算机I 软件开发II 垂直应用软件III 汽车制造业 汽车电子 可选消费 信息与通信 德赛西威 \n",
- "8 电气设备I 光伏设备II 逆变器III 电气机械和器材制造业 光伏设备 工业 工业 阳光电源 \n",
- "9 化工I 化学原料II 纯碱III 化学原料和化学制品制造业 粘胶 原材料 原料与能源 三友化工 \n",
- "10 商业贸易I 一般零售II 商业物业经营III 商务服务业 市场服务 工业 消费 小商品城 \n",
- "11 医药生物I 医疗服务II 诊断服务III 卫生 体外诊断 医药卫生 医药卫生 金域医学 \n",
- "\n",
- " name \n",
- "0 TCCL \n",
- "1 DSXW \n",
- "2 YGDY \n",
- "3 SYHG \n",
- "4 XSPC \n",
- "5 JYYX \n",
- "6 TCCL \n",
- "7 DSXW \n",
- "8 YGDY \n",
- "9 SYHG \n",
- "10 XSPC \n",
- "11 JYYX "
- ]
- },
- "execution_count": 16,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "## test update portfolio profile\n",
- "stocks = [\n",
- " dict(ticker=\"002709.XSHE\", shares=200, date=datetime(2022,1,10)),\n",
- " dict(ticker=\"002920.XSHE\", shares=200, date=datetime(2022,1,10)),\n",
- " dict(ticker=\"300274.XSHE\", shares=200, date=datetime(2022,1,10)),\n",
- " dict(ticker='600409.XSHG', shares=200, date=datetime(2022,1,10)),\n",
- " dict(ticker='600415.XSHG', shares=200, date=datetime(2022,1,10)),\n",
- " dict(ticker='603882.XSHG', shares=200, date=datetime(2022,1,10))\n",
- "]\n",
- "p_profile, error = api.update_portfolio_profile(stocks, p_portfolio)\n",
- "p_profile"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 43,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " date | \n",
- " weight | \n",
- " display_name | \n",
- " ticker | \n",
- " sector | \n",
- " aggregate_sector | \n",
- " name | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 0 | \n",
- " 2020-12-31 | \n",
- " 0.088 | \n",
- " 神州高铁 | \n",
- " 000008.XSHE | \n",
- " 机械设备I 运输设备II 铁路设备III 铁路、船舶、航空航天和其他运输设备制造业 城轨铁路 工业 | \n",
- " 工业 | \n",
- " SZGT | \n",
- "
\n",
- " \n",
- " 1 | \n",
- " 2020-12-31 | \n",
- " 0.344 | \n",
- " 中国宝安 | \n",
- " 000009.XSHE | \n",
- " 电气设备I 电池II 电池化学品III 综合 工业集团企业 工业 | \n",
- " 工业 | \n",
- " ZGBA | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2020-12-31 | \n",
- " 0.180 | \n",
- " 南玻A | \n",
- " 000012.XSHE | \n",
- " 建筑材料I 玻璃制造II 玻璃制造III 非金属矿物制品业 玻璃 原材料 | \n",
- " 原料与能源 | \n",
- " NBA | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 2020-12-31 | \n",
- " 0.297 | \n",
- " 深科技 | \n",
- " 000021.XSHE | \n",
- " 电子I 电子制造II 消费电子零部件及组装III 计算机、通信和其他电子设备制造业 安防设备... | \n",
- " 信息与通信 | \n",
- " SKJ | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 2020-12-31 | \n",
- " 0.030 | \n",
- " 招商港口 | \n",
- " 001872.XSHE | \n",
- " 交通运输I 航运港口II 港口III 水上运输业 港口 工业 | \n",
- " 工业 | \n",
- " ZSGK | \n",
- "
\n",
- " \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " 495 | \n",
- " 2020-12-31 | \n",
- " 0.438 | \n",
- " 睿创微纳 | \n",
- " 688002.XSHG | \n",
- " 国防军工I 军工电子II 军工电子III 计算机、通信和其他电子设备制造业 集成电路设计 信息技术 | \n",
- " 工业 | \n",
- " RCWN | \n",
- "
\n",
- " \n",
- " 496 | \n",
- " 2020-12-31 | \n",
- " 0.287 | \n",
- " 晶晨股份 | \n",
- " 688099.XSHG | \n",
- " 电子I 半导体II 数字芯片设计III 软件和信息技术服务业 集成电路设计 信息技术 | \n",
- " 信息与通信 | \n",
- " JCGF | \n",
- "
\n",
- " \n",
- " 497 | \n",
- " 2020-12-31 | \n",
- " 0.252 | \n",
- " 虹软科技 | \n",
- " 688088.XSHG | \n",
- " 计算机I IT服务II IT服务III 软件和信息技术服务业 通用软件 信息技术 | \n",
- " 信息与通信 | \n",
- " HRKJ | \n",
- "
\n",
- " \n",
- " 498 | \n",
- " 2020-12-31 | \n",
- " 0.134 | \n",
- " 微芯生物 | \n",
- " 688321.XSHG | \n",
- " 医药生物I 化学制药II 化学制剂III 医药制造业 药品制剂 医药卫生 | \n",
- " 医药卫生 | \n",
- " WXSW | \n",
- "
\n",
- " \n",
- " 499 | \n",
- " 2020-12-31 | \n",
- " 0.130 | \n",
- " 南微医学 | \n",
- " 688029.XSHG | \n",
- " 医药生物I 医疗器械II 医疗耗材III 专用设备制造业 医疗耗材 医药卫生 | \n",
- " 医药卫生 | \n",
- " NWYX | \n",
- "
\n",
- " \n",
- "
\n",
- "
500 rows × 7 columns
\n",
- "
"
- ],
- "text/plain": [
- " date weight display_name ticker \\\n",
- "0 2020-12-31 0.088 神州高铁 000008.XSHE \n",
- "1 2020-12-31 0.344 中国宝安 000009.XSHE \n",
- "2 2020-12-31 0.180 南玻A 000012.XSHE \n",
- "3 2020-12-31 0.297 深科技 000021.XSHE \n",
- "4 2020-12-31 0.030 招商港口 001872.XSHE \n",
- ".. ... ... ... ... \n",
- "495 2020-12-31 0.438 睿创微纳 688002.XSHG \n",
- "496 2020-12-31 0.287 晶晨股份 688099.XSHG \n",
- "497 2020-12-31 0.252 虹软科技 688088.XSHG \n",
- "498 2020-12-31 0.134 微芯生物 688321.XSHG \n",
- "499 2020-12-31 0.130 南微医学 688029.XSHG \n",
- "\n",
- " sector aggregate_sector name \n",
- "0 机械设备I 运输设备II 铁路设备III 铁路、船舶、航空航天和其他运输设备制造业 城轨铁路 工业 工业 SZGT \n",
- "1 电气设备I 电池II 电池化学品III 综合 工业集团企业 工业 工业 ZGBA \n",
- "2 建筑材料I 玻璃制造II 玻璃制造III 非金属矿物制品业 玻璃 原材料 原料与能源 NBA \n",
- "3 电子I 电子制造II 消费电子零部件及组装III 计算机、通信和其他电子设备制造业 安防设备... 信息与通信 SKJ \n",
- "4 交通运输I 航运港口II 港口III 水上运输业 港口 工业 工业 ZSGK \n",
- ".. ... ... ... \n",
- "495 国防军工I 军工电子II 军工电子III 计算机、通信和其他电子设备制造业 集成电路设计 信息技术 工业 RCWN \n",
- "496 电子I 半导体II 数字芯片设计III 软件和信息技术服务业 集成电路设计 信息技术 信息与通信 JCGF \n",
- "497 计算机I IT服务II IT服务III 软件和信息技术服务业 通用软件 信息技术 信息与通信 HRKJ \n",
- "498 医药生物I 化学制药II 化学制剂III 医药制造业 药品制剂 医药卫生 医药卫生 WXSW \n",
- "499 医药生物I 医疗器械II 医疗耗材III 专用设备制造业 医疗耗材 医药卫生 医药卫生 NWYX \n",
- "\n",
- "[500 rows x 7 columns]"
- ]
- },
- "execution_count": 43,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "## test create benchmark portfolio\n",
- "b_profile,error = api.update_benchmark_profile(datetime(2021,1,5), datetime(2021,1,5), benchmark='000905.XSHG')\n",
- "b_profile"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 44,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " date | \n",
- " weight | \n",
- " display_name | \n",
- " ticker | \n",
- " sector | \n",
- " aggregate_sector | \n",
- " name | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 1500 | \n",
- " 2020-12-31 | \n",
- " 0.088 | \n",
- " 神州高铁 | \n",
- " 000008.XSHE | \n",
- " 机械设备I 运输设备II 铁路设备III 铁路、船舶、航空航天和其他运输设备制造业 城轨铁路 工业 | \n",
- " 工业 | \n",
- " SZGT | \n",
- "
\n",
- " \n",
- " 1501 | \n",
- " 2020-12-31 | \n",
- " 0.344 | \n",
- " 中国宝安 | \n",
- " 000009.XSHE | \n",
- " 电气设备I 电池II 电池化学品III 综合 工业集团企业 工业 | \n",
- " 工业 | \n",
- " ZGBA | \n",
- "
\n",
- " \n",
- " 1502 | \n",
- " 2020-12-31 | \n",
- " 0.180 | \n",
- " 南玻A | \n",
- " 000012.XSHE | \n",
- " 建筑材料I 玻璃制造II 玻璃制造III 非金属矿物制品业 玻璃 原材料 | \n",
- " 原料与能源 | \n",
- " NBA | \n",
- "
\n",
- " \n",
- " 1503 | \n",
- " 2020-12-31 | \n",
- " 0.297 | \n",
- " 深科技 | \n",
- " 000021.XSHE | \n",
- " 电子I 电子制造II 消费电子零部件及组装III 计算机、通信和其他电子设备制造业 安防设备... | \n",
- " 信息与通信 | \n",
- " SKJ | \n",
- "
\n",
- " \n",
- " 1504 | \n",
- " 2020-12-31 | \n",
- " 0.030 | \n",
- " 招商港口 | \n",
- " 001872.XSHE | \n",
- " 交通运输I 航运港口II 港口III 水上运输业 港口 工业 | \n",
- " 工业 | \n",
- " ZSGK | \n",
- "
\n",
- " \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " 26995 | \n",
- " 2021-12-31 | \n",
- " 0.328 | \n",
- " 凯赛生物 | \n",
- " 688065.XSHG | \n",
- " 化工I 化学制品II 其他化学制品III 化学纤维制造业 其他化学原料 原材料 | \n",
- " 原料与能源 | \n",
- " KSSW | \n",
- "
\n",
- " \n",
- " 26996 | \n",
- " 2021-12-31 | \n",
- " 0.118 | \n",
- " 财达证券 | \n",
- " 600906.XSHG | \n",
- " 非银金融I 证券II 证券III 资本市场服务 证券公司 金融 | \n",
- " 金融与地产 | \n",
- " CDZQ | \n",
- "
\n",
- " \n",
- " 26997 | \n",
- " 2021-12-31 | \n",
- " 0.101 | \n",
- " 圣湘生物 | \n",
- " 688289.XSHG | \n",
- " 医药生物I 医疗器械II 体外诊断III 医药制造业 体外诊断 医药卫生 | \n",
- " 医药卫生 | \n",
- " SXSW | \n",
- "
\n",
- " \n",
- " 26998 | \n",
- " 2021-12-31 | \n",
- " 0.089 | \n",
- " 南网能源 | \n",
- " 003035.XSHE | \n",
- " 公用事业I 电力II 电能综合服务III 科技推广和应用服务业 节能与资源回收 工业 | \n",
- " 公用事业 | \n",
- " NWNY | \n",
- "
\n",
- " \n",
- " 26999 | \n",
- " 2021-12-31 | \n",
- " 0.350 | \n",
- " 思瑞浦 | \n",
- " 688536.XSHG | \n",
- " 电子I 半导体II 模拟芯片设计III 软件和信息技术服务业 集成电路设计 信息技术 | \n",
- " 信息与通信 | \n",
- " SRP | \n",
- "
\n",
- " \n",
- "
\n",
- "
6500 rows × 7 columns
\n",
- "
"
- ],
- "text/plain": [
- " date weight display_name ticker \\\n",
- "1500 2020-12-31 0.088 神州高铁 000008.XSHE \n",
- "1501 2020-12-31 0.344 中国宝安 000009.XSHE \n",
- "1502 2020-12-31 0.180 南玻A 000012.XSHE \n",
- "1503 2020-12-31 0.297 深科技 000021.XSHE \n",
- "1504 2020-12-31 0.030 招商港口 001872.XSHE \n",
- "... ... ... ... ... \n",
- "26995 2021-12-31 0.328 凯赛生物 688065.XSHG \n",
- "26996 2021-12-31 0.118 财达证券 600906.XSHG \n",
- "26997 2021-12-31 0.101 圣湘生物 688289.XSHG \n",
- "26998 2021-12-31 0.089 南网能源 003035.XSHE \n",
- "26999 2021-12-31 0.350 思瑞浦 688536.XSHG \n",
- "\n",
- " sector aggregate_sector \\\n",
- "1500 机械设备I 运输设备II 铁路设备III 铁路、船舶、航空航天和其他运输设备制造业 城轨铁路 工业 工业 \n",
- "1501 电气设备I 电池II 电池化学品III 综合 工业集团企业 工业 工业 \n",
- "1502 建筑材料I 玻璃制造II 玻璃制造III 非金属矿物制品业 玻璃 原材料 原料与能源 \n",
- "1503 电子I 电子制造II 消费电子零部件及组装III 计算机、通信和其他电子设备制造业 安防设备... 信息与通信 \n",
- "1504 交通运输I 航运港口II 港口III 水上运输业 港口 工业 工业 \n",
- "... ... ... \n",
- "26995 化工I 化学制品II 其他化学制品III 化学纤维制造业 其他化学原料 原材料 原料与能源 \n",
- "26996 非银金融I 证券II 证券III 资本市场服务 证券公司 金融 金融与地产 \n",
- "26997 医药生物I 医疗器械II 体外诊断III 医药制造业 体外诊断 医药卫生 医药卫生 \n",
- "26998 公用事业I 电力II 电能综合服务III 科技推广和应用服务业 节能与资源回收 工业 公用事业 \n",
- "26999 电子I 半导体II 模拟芯片设计III 软件和信息技术服务业 集成电路设计 信息技术 信息与通信 \n",
- "\n",
- " name \n",
- "1500 SZGT \n",
- "1501 ZGBA \n",
- "1502 NBA \n",
- "1503 SKJ \n",
- "1504 ZSGK \n",
- "... ... \n",
- "26995 KSSW \n",
- "26996 CDZQ \n",
- "26997 SXSW \n",
- "26998 NWNY \n",
- "26999 SRP \n",
- "\n",
- "[6500 rows x 7 columns]"
- ]
- },
- "execution_count": 44,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "## test update benchmark profile\n",
- "bp_updated, error = api.update_benchmark_profile(datetime(2021,1,5), datetime(2022,1,5), profile=b_profile)\n",
- "bp_updated"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# save portfolio and benchmark profile\n",
- "db_url = \"sqlite:///../local.db\"\n",
- "with create_engine(db_url).connect() as conn:\n",
- " p_profile.to_sql(\"portfolio_profile\", conn, if_exists=\"replace\")\n",
- " # bp_updated.to_sql(\"benchmark_profile\", conn, if_exists=\"replace\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 46,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " date | \n",
- " ticker | \n",
- " open | \n",
- " close | \n",
- " high | \n",
- " low | \n",
- " volume | \n",
- " money | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 0 | \n",
- " 2021-01-05 | \n",
- " 600409.XSHG | \n",
- " 9.23 | \n",
- " 9.57 | \n",
- " 9.66 | \n",
- " 9.08 | \n",
- " 82669289.0 | \n",
- " 7.803391e+08 | \n",
- "
\n",
- " \n",
- " 1 | \n",
- " 2021-01-06 | \n",
- " 600409.XSHG | \n",
- " 9.40 | \n",
- " 9.73 | \n",
- " 9.78 | \n",
- " 9.34 | \n",
- " 76413825.0 | \n",
- " 7.351438e+08 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2021-01-07 | \n",
- " 600409.XSHG | \n",
- " 9.74 | \n",
- " 10.14 | \n",
- " 10.27 | \n",
- " 9.74 | \n",
- " 61932917.0 | \n",
- " 6.235711e+08 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 2021-01-08 | \n",
- " 600409.XSHG | \n",
- " 10.15 | \n",
- " 10.13 | \n",
- " 10.30 | \n",
- " 9.70 | \n",
- " 49727039.0 | \n",
- " 4.964196e+08 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 2021-01-11 | \n",
- " 600409.XSHG | \n",
- " 10.10 | \n",
- " 10.29 | \n",
- " 10.36 | \n",
- " 9.76 | \n",
- " 64022975.0 | \n",
- " 6.439525e+08 | \n",
- "
\n",
- " \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " 1477 | \n",
- " 2022-01-04 | \n",
- " 600415.XSHG | \n",
- " 4.80 | \n",
- " 4.89 | \n",
- " 4.90 | \n",
- " 4.78 | \n",
- " 58291943.0 | \n",
- " 2.832956e+08 | \n",
- "
\n",
- " \n",
- " 1478 | \n",
- " 2022-01-05 | \n",
- " 600415.XSHG | \n",
- " 4.95 | \n",
- " 4.80 | \n",
- " 4.95 | \n",
- " 4.78 | \n",
- " 43227038.0 | \n",
- " 2.095315e+08 | \n",
- "
\n",
- " \n",
- " 1479 | \n",
- " 2022-01-06 | \n",
- " 600415.XSHG | \n",
- " 4.81 | \n",
- " 4.73 | \n",
- " 4.82 | \n",
- " 4.71 | \n",
- " 30542883.0 | \n",
- " 1.450018e+08 | \n",
- "
\n",
- " \n",
- " 1480 | \n",
- " 2022-01-07 | \n",
- " 600415.XSHG | \n",
- " 4.74 | \n",
- " 4.70 | \n",
- " 4.79 | \n",
- " 4.68 | \n",
- " 24902567.0 | \n",
- " 1.178837e+08 | \n",
- "
\n",
- " \n",
- " 1481 | \n",
- " 2022-01-10 | \n",
- " 600415.XSHG | \n",
- " 4.70 | \n",
- " 4.75 | \n",
- " 4.85 | \n",
- " 4.67 | \n",
- " 39278041.0 | \n",
- " 1.859827e+08 | \n",
- "
\n",
- " \n",
- "
\n",
- "
1482 rows × 8 columns
\n",
- "
"
- ],
- "text/plain": [
- " date ticker open close high low volume \\\n",
- "0 2021-01-05 600409.XSHG 9.23 9.57 9.66 9.08 82669289.0 \n",
- "1 2021-01-06 600409.XSHG 9.40 9.73 9.78 9.34 76413825.0 \n",
- "2 2021-01-07 600409.XSHG 9.74 10.14 10.27 9.74 61932917.0 \n",
- "3 2021-01-08 600409.XSHG 10.15 10.13 10.30 9.70 49727039.0 \n",
- "4 2021-01-11 600409.XSHG 10.10 10.29 10.36 9.76 64022975.0 \n",
- "... ... ... ... ... ... ... ... \n",
- "1477 2022-01-04 600415.XSHG 4.80 4.89 4.90 4.78 58291943.0 \n",
- "1478 2022-01-05 600415.XSHG 4.95 4.80 4.95 4.78 43227038.0 \n",
- "1479 2022-01-06 600415.XSHG 4.81 4.73 4.82 4.71 30542883.0 \n",
- "1480 2022-01-07 600415.XSHG 4.74 4.70 4.79 4.68 24902567.0 \n",
- "1481 2022-01-10 600415.XSHG 4.70 4.75 4.85 4.67 39278041.0 \n",
- "\n",
- " money \n",
- "0 7.803391e+08 \n",
- "1 7.351438e+08 \n",
- "2 6.235711e+08 \n",
- "3 4.964196e+08 \n",
- "4 6.439525e+08 \n",
- "... ... \n",
- "1477 2.832956e+08 \n",
- "1478 2.095315e+08 \n",
- "1479 1.450018e+08 \n",
- "1480 1.178837e+08 \n",
- "1481 1.859827e+08 \n",
- "\n",
- "[1482 rows x 8 columns]"
- ]
- },
- "execution_count": 46,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "## test get portfolio stock\n",
- "min_date = p_profile.date.min()\n",
- "max_date = p_profile.date.max()\n",
- "p_stocks, error = api.get_stocks_price(p_profile, min_date, max_date)\n",
- "p_stocks"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 47,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "Timestamp('2022-01-10 00:00:00')"
- ]
- },
- "execution_count": 47,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "max_date"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 48,
- "metadata": {},
- "outputs": [
- {
- "ename": "KeyboardInterrupt",
- "evalue": "",
- "output_type": "error",
- "traceback": [
- "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
- "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
- "Cell \u001b[0;32mIn[48], line 3\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[39m## test get benchmark stock\u001b[39;00m\n\u001b[1;32m 2\u001b[0m min_date \u001b[39m=\u001b[39m bp_updated\u001b[39m.\u001b[39mdate\u001b[39m.\u001b[39mmin()\n\u001b[0;32m----> 3\u001b[0m b_stocks, error \u001b[39m=\u001b[39m api\u001b[39m.\u001b[39;49mget_stocks_price(bp_updated, min_date, max_date)\n\u001b[1;32m 4\u001b[0m b_stocks\n",
- "File \u001b[0;32m~/Desktop/risk-monitor-dashboard/script/api.py:27\u001b[0m, in \u001b[0;36mauth_api..wrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 24\u001b[0m \u001b[39mif\u001b[39;00m (\u001b[39mnot\u001b[39;00m jq\u001b[39m.\u001b[39mis_auth()):\n\u001b[1;32m 25\u001b[0m jq\u001b[39m.\u001b[39mauth(user_name, password)\n\u001b[0;32m---> 27\u001b[0m result \u001b[39m=\u001b[39m func(\u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 28\u001b[0m \u001b[39mreturn\u001b[39;00m result\n",
- "File \u001b[0;32m~/Desktop/risk-monitor-dashboard/script/api.py:230\u001b[0m, in \u001b[0;36mget_stocks_price\u001b[0;34m(profile, start_date, end_date, frequency)\u001b[0m\n\u001b[1;32m 227\u001b[0m ticker \u001b[39m=\u001b[39m profile[\u001b[39m'\u001b[39m\u001b[39mticker\u001b[39m\u001b[39m'\u001b[39m]\u001b[39m.\u001b[39mto_list()\n\u001b[1;32m 228\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m--> 230\u001b[0m data \u001b[39m=\u001b[39m jq\u001b[39m.\u001b[39;49mget_price(ticker, start_date\u001b[39m=\u001b[39;49mstart_str,\n\u001b[1;32m 231\u001b[0m end_date\u001b[39m=\u001b[39;49mend_str, frequency\u001b[39m=\u001b[39;49mfrequency)\n\u001b[1;32m 232\u001b[0m data\u001b[39m.\u001b[39mrename(columns\u001b[39m=\u001b[39m{\u001b[39m'\u001b[39m\u001b[39mtime\u001b[39m\u001b[39m'\u001b[39m: \u001b[39m'\u001b[39m\u001b[39mdate\u001b[39m\u001b[39m'\u001b[39m, \u001b[39m'\u001b[39m\u001b[39mcode\u001b[39m\u001b[39m'\u001b[39m: \u001b[39m\"\u001b[39m\u001b[39mticker\u001b[39m\u001b[39m\"\u001b[39m}, inplace\u001b[39m=\u001b[39m\u001b[39mTrue\u001b[39;00m)\n\u001b[1;32m 233\u001b[0m \u001b[39mreturn\u001b[39;00m data, error_message\n",
- "File \u001b[0;32m/opt/homebrew/Caskroom/miniforge/base/envs/portfolio_risk_assesment/lib/python3.11/site-packages/jqdatasdk/utils.py:308\u001b[0m, in \u001b[0;36massert_auth.._wrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 306\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mException\u001b[39;00m(\u001b[39m\"\u001b[39m\u001b[39mPlease run jqdatasdk.auth first\u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[1;32m 307\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[0;32m--> 308\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n",
- "File \u001b[0;32m/opt/homebrew/Caskroom/miniforge/base/envs/portfolio_risk_assesment/lib/python3.11/site-packages/jqdatasdk/api.py:39\u001b[0m, in \u001b[0;36mget_price\u001b[0;34m(security, start_date, end_date, frequency, fields, skip_paused, fq, count, panel, fill_paused)\u001b[0m\n\u001b[1;32m 37\u001b[0m \u001b[39mif\u001b[39;00m count \u001b[39mand\u001b[39;00m start_date:\n\u001b[1;32m 38\u001b[0m \u001b[39mraise\u001b[39;00m ParamsError(\u001b[39m\"\u001b[39m\u001b[39m(start_date, count) only one param is required\u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[0;32m---> 39\u001b[0m \u001b[39mreturn\u001b[39;00m JQDataClient\u001b[39m.\u001b[39;49minstance()\u001b[39m.\u001b[39;49mget_price(\u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49m\u001b[39mlocals\u001b[39;49m())\n",
- "File \u001b[0;32m/opt/homebrew/Caskroom/miniforge/base/envs/portfolio_risk_assesment/lib/python3.11/site-packages/jqdatasdk/client.py:347\u001b[0m, in \u001b[0;36mJQDataClient.__getattr__..\u001b[0;34m(**kwargs)\u001b[0m\n\u001b[1;32m 346\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39m__getattr__\u001b[39m(\u001b[39mself\u001b[39m, method):\n\u001b[0;32m--> 347\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mlambda\u001b[39;00m \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs: \u001b[39mself\u001b[39;49m(method, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n",
- "File \u001b[0;32m/opt/homebrew/Caskroom/miniforge/base/envs/portfolio_risk_assesment/lib/python3.11/site-packages/jqdatasdk/client.py:331\u001b[0m, in \u001b[0;36mJQDataClient.__call__\u001b[0;34m(self, method, **kwargs)\u001b[0m\n\u001b[1;32m 329\u001b[0m \u001b[39mfor\u001b[39;00m _ \u001b[39min\u001b[39;00m \u001b[39mrange\u001b[39m(\u001b[39mself\u001b[39m\u001b[39m.\u001b[39mrequest_attempt_count):\n\u001b[1;32m 330\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m--> 331\u001b[0m result \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mquery(method, kwargs)\n\u001b[1;32m 332\u001b[0m \u001b[39mbreak\u001b[39;00m\n\u001b[1;32m 333\u001b[0m \u001b[39mexcept\u001b[39;00m socket_error \u001b[39mas\u001b[39;00m ex:\n",
- "File \u001b[0;32m/opt/homebrew/Caskroom/miniforge/base/envs/portfolio_risk_assesment/lib/python3.11/site-packages/jqdatasdk/client.py:256\u001b[0m, in \u001b[0;36mJQDataClient.query\u001b[0;34m(self, method, params)\u001b[0m\n\u001b[1;32m 254\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[1;32m 255\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mensure_auth()\n\u001b[0;32m--> 256\u001b[0m response \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mclient\u001b[39m.\u001b[39;49mquery(request)\n\u001b[1;32m 257\u001b[0m \u001b[39mif\u001b[39;00m response\u001b[39m.\u001b[39mstatus:\n\u001b[1;32m 258\u001b[0m msg \u001b[39m=\u001b[39m response\u001b[39m.\u001b[39mmsg\n",
- "File \u001b[0;32m/opt/homebrew/Caskroom/miniforge/base/envs/portfolio_risk_assesment/lib/python3.11/site-packages/thriftpy2/thrift.py:219\u001b[0m, in \u001b[0;36mTClient._req\u001b[0;34m(self, _api, *args, **kwargs)\u001b[0m\n\u001b[1;32m 217\u001b[0m \u001b[39m# wait result only if non-oneway\u001b[39;00m\n\u001b[1;32m 218\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mgetattr\u001b[39m(result_cls, \u001b[39m\"\u001b[39m\u001b[39moneway\u001b[39m\u001b[39m\"\u001b[39m):\n\u001b[0;32m--> 219\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_recv(_api)\n",
- "File \u001b[0;32m/opt/homebrew/Caskroom/miniforge/base/envs/portfolio_risk_assesment/lib/python3.11/site-packages/thriftpy2/thrift.py:238\u001b[0m, in \u001b[0;36mTClient._recv\u001b[0;34m(self, _api)\u001b[0m\n\u001b[1;32m 236\u001b[0m \u001b[39mraise\u001b[39;00m x\n\u001b[1;32m 237\u001b[0m result \u001b[39m=\u001b[39m \u001b[39mgetattr\u001b[39m(\u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_service, _api \u001b[39m+\u001b[39m \u001b[39m\"\u001b[39m\u001b[39m_result\u001b[39m\u001b[39m\"\u001b[39m)()\n\u001b[0;32m--> 238\u001b[0m result\u001b[39m.\u001b[39;49mread(\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_iprot)\n\u001b[1;32m 239\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_iprot\u001b[39m.\u001b[39mread_message_end()\n\u001b[1;32m 241\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mhasattr\u001b[39m(result, \u001b[39m\"\u001b[39m\u001b[39msuccess\u001b[39m\u001b[39m\"\u001b[39m) \u001b[39mand\u001b[39;00m result\u001b[39m.\u001b[39msuccess \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n",
- "File \u001b[0;32m/opt/homebrew/Caskroom/miniforge/base/envs/portfolio_risk_assesment/lib/python3.11/site-packages/thriftpy2/thrift.py:160\u001b[0m, in \u001b[0;36mTPayload.read\u001b[0;34m(self, iprot)\u001b[0m\n\u001b[1;32m 159\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mread\u001b[39m(\u001b[39mself\u001b[39m, iprot):\n\u001b[0;32m--> 160\u001b[0m iprot\u001b[39m.\u001b[39mread_struct(\u001b[39mself\u001b[39m)\n",
- "File \u001b[0;32m/opt/homebrew/Caskroom/miniforge/base/envs/portfolio_risk_assesment/lib/python3.11/site-packages/thriftpy2/protocol/cybin/cybin.pyx:501\u001b[0m, in \u001b[0;36mcybin.TCyBinaryProtocol.read_struct\u001b[0;34m()\u001b[0m\n",
- "File \u001b[0;32m/opt/homebrew/Caskroom/miniforge/base/envs/portfolio_risk_assesment/lib/python3.11/site-packages/thriftpy2/protocol/cybin/cybin.pyx:202\u001b[0m, in \u001b[0;36mcybin.read_struct\u001b[0;34m()\u001b[0m\n",
- "File \u001b[0;32m/opt/homebrew/Caskroom/miniforge/base/envs/portfolio_risk_assesment/lib/python3.11/site-packages/thriftpy2/protocol/cybin/cybin.pyx:354\u001b[0m, in \u001b[0;36mcybin.c_read_val\u001b[0;34m()\u001b[0m\n",
- "File \u001b[0;32m/opt/homebrew/Caskroom/miniforge/base/envs/portfolio_risk_assesment/lib/python3.11/site-packages/thriftpy2/protocol/cybin/cybin.pyx:202\u001b[0m, in \u001b[0;36mcybin.read_struct\u001b[0;34m()\u001b[0m\n",
- "File \u001b[0;32m/opt/homebrew/Caskroom/miniforge/base/envs/portfolio_risk_assesment/lib/python3.11/site-packages/thriftpy2/protocol/cybin/cybin.pyx:294\u001b[0m, in \u001b[0;36mcybin.c_read_val\u001b[0;34m()\u001b[0m\n",
- "File \u001b[0;32m/opt/homebrew/Caskroom/miniforge/base/envs/portfolio_risk_assesment/lib/python3.11/site-packages/thriftpy2/protocol/cybin/cybin.pyx:255\u001b[0m, in \u001b[0;36mcybin.c_read_string\u001b[0;34m()\u001b[0m\n",
- "File \u001b[0;32m/opt/homebrew/Caskroom/miniforge/base/envs/portfolio_risk_assesment/lib/python3.11/site-packages/thriftpy2/protocol/cybin/cybin.pyx:244\u001b[0m, in \u001b[0;36mcybin.c_read_binary\u001b[0;34m()\u001b[0m\n",
- "File \u001b[0;32m/opt/homebrew/Caskroom/miniforge/base/envs/portfolio_risk_assesment/lib/python3.11/site-packages/thriftpy2/transport/buffered/cybuffered.pyx:65\u001b[0m, in \u001b[0;36mthriftpy2.transport.buffered.cybuffered.TCyBufferedTransport.c_read\u001b[0;34m()\u001b[0m\n",
- "File \u001b[0;32m/opt/homebrew/Caskroom/miniforge/base/envs/portfolio_risk_assesment/lib/python3.11/site-packages/thriftpy2/transport/buffered/cybuffered.pyx:69\u001b[0m, in \u001b[0;36mthriftpy2.transport.buffered.cybuffered.TCyBufferedTransport.read_trans\u001b[0;34m()\u001b[0m\n",
- "File \u001b[0;32m/opt/homebrew/Caskroom/miniforge/base/envs/portfolio_risk_assesment/lib/python3.11/site-packages/thriftpy2/transport/cybase.pyx:65\u001b[0m, in \u001b[0;36mthriftpy2.transport.cybase.TCyBuffer.read_trans\u001b[0;34m()\u001b[0m\n",
- "File \u001b[0;32m/opt/homebrew/Caskroom/miniforge/base/envs/portfolio_risk_assesment/lib/python3.11/site-packages/thriftpy2/transport/socket.py:112\u001b[0m, in \u001b[0;36mTSocket.read\u001b[0;34m(self, sz)\u001b[0m\n\u001b[1;32m 110\u001b[0m \u001b[39mwhile\u001b[39;00m \u001b[39mTrue\u001b[39;00m:\n\u001b[1;32m 111\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m--> 112\u001b[0m buff \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49msock\u001b[39m.\u001b[39;49mrecv(sz)\n\u001b[1;32m 113\u001b[0m \u001b[39mexcept\u001b[39;00m socket\u001b[39m.\u001b[39merror \u001b[39mas\u001b[39;00m e:\n\u001b[1;32m 114\u001b[0m \u001b[39mif\u001b[39;00m e\u001b[39m.\u001b[39merrno \u001b[39m==\u001b[39m errno\u001b[39m.\u001b[39mEINTR:\n",
- "\u001b[0;31mKeyboardInterrupt\u001b[0m: "
- ]
- }
- ],
- "source": [
- "## test get benchmark stock\n",
- "min_date = bp_updated.date.min()\n",
- "b_stocks, error = api.get_stocks_price(bp_updated, min_date, max_date)\n",
- "b_stocks"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# save profile to db\n",
- "\n",
- "## save result \n",
- "b_stocks.to_pickle('../data/b_stocks.pkl')\n",
- "p_stocks.to_pickle('../data/p_stocks.pkl')\n",
- "p_profile.to_pickle('../data/p_profile.pkl')\n",
- "bp_updated.to_pickle('../data/b_profile.pkl')"
- ]
- },
- {
- "attachments": {},
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Testing processing\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "import processing"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "calculated_p_stock = processing.get_processing_result_of_stocks_df(p_stocks, p_profile)\n",
- "calculated_b_stock = processing.get_processing_result_of_stocks_df(b_stocks, bp_updated)\n",
- "p_eval_df = processing.get_portfolio_evaluation(calculated_p_stock, calculated_b_stock, p_profile)\n",
- "sector_eval_df = processing.get_portfolio_sector_evaluation(calculated_p_stock, calculated_b_stock) \n",
- "# merged_df = processing.merge_on_date(calculated_p_stock, calculated_b_stock)\n",
- "# bnb_sector_result = processing.get_bhb_result(sector_eval_df)\n",
- "# bnb_stock_result = processing.get_bhb_result(merged_df)\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "## save reuslt\n",
- "calculated_p_stock.to_pickle('../data/calculated_p_stock.pkl')\n",
- "calculated_b_stock.to_pickle('../data/calculated_b_stock.pkl')\n",
- "p_eval_df.to_pickle('../data/p_eval_df.pkl')\n",
- "sector_eval_df.to_pickle('../data/sector_eval_df.pkl')\n",
- "merged_df.to_pickle('../data/merged_df.pkl')\n",
- "bnb_sector_result.to_pickle('../data/bnb_sector_result.pkl')\n",
- "bnb_stock_result.to_pickle('../data/bnb_stock_result.pkl')\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Analysis"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [
- {
- "data": {},
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.holoviews_exec.v0+json": "",
- "text/html": [
- "\n",
- ""
- ],
- "text/plain": [
- ":NdOverlay [Variable]\n",
- " :Curve [date] (value)"
- ]
- },
- "execution_count": 35,
- "metadata": {
- "application/vnd.holoviews_exec.v0+json": {
- "id": "p1002"
- }
- },
- "output_type": "execute_result"
- }
- ],
- "source": [
- "p_eval_df.hvplot.line(x='date', y=['portfolio_return_p', 'portfolio_return_b'], title='Portfolio Return').opts(yformatter='%.2f')"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/var/folders/v5/2108rh5964q9j741wg_s8r1w0000gn/T/ipykernel_1926/4163140187.py:4: 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",
- " selected_df['contribution'] = selected_df['portfolio_return'] / selected_df.groupby('date')['portfolio_return'].transform('sum')\n"
- ]
- },
- {
- "data": {},
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.holoviews_exec.v0+json": "",
- "text/html": [
- "\n",
- ""
- ],
- "text/plain": [
- ":NdOverlay [display_name]\n",
- " :Curve [date] (portfolio_return)"
- ]
- },
- "execution_count": 69,
- "metadata": {
- "application/vnd.holoviews_exec.v0+json": {
- "id": "p8955"
- }
- },
- "output_type": "execute_result"
- }
- ],
- "source": [
- "## i'm going to check the return in portfolio to determine eaches contribution to the lost\n",
- "date_range = (datetime(2021,3,5), datetime(2021,4,30))\n",
- "selected_df = calculated_p_stock[(calculated_p_stock.date <= date_range[1]) & (calculated_p_stock.date >= date_range[0])]\n",
- "selected_df['contribution'] = selected_df['portfolio_return'] / selected_df.groupby('date')['portfolio_return'].transform('sum')\n",
- "selected_df[selected_df.date == datetime(2021,3,5)]\n",
- "selected_df.hvplot.line(x='date',y='portfolio_return',by='display_name')"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [
- {
- "data": {},
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.holoviews_exec.v0+json": "",
- "text/html": [
- "\n",
- ""
- ],
- "text/plain": [
- ":NdOverlay [ticker]\n",
- " :Curve [date] (return)"
- ]
- },
- "execution_count": 38,
- "metadata": {
- "application/vnd.holoviews_exec.v0+json": {
- "id": "p1892"
- }
- },
- "output_type": "execute_result"
- }
- ],
- "source": [
- "calculated_p_stock.hvplot(x='date',y='return', title='Portfolio Return', by='ticker').opts(yformatter='%.2f')"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 60,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "(datetime.datetime(2021, 12, 31, 0, 0, tzinfo=), datetime.datetime(2023, 8, 14, 17, 40, 56, 432401, tzinfo=), datetime.timedelta(days=1))\n"
- ]
- }
- ],
- "source": [
- "## load benchmark portoflio profile\n",
- "# load data\n",
- "from sqlalchemy import create_engine, text\n",
- "from utils import convert_string_to_datetime, time_in_beijing\n",
- "\n",
- "\n",
- "# a list of table and delta time as frequency\n",
- "def need_to_update(table_name='benchmark_profile', freq=timedelta(days=1)):\n",
- " with create_engine(db_url).connect() as conn:\n",
- " max_date = conn.execute(text(f\"SELECT MAX(date) FROM {table_name}\")).fetchone()[0]\n",
- " max_date = convert_string_to_datetime(max_date)\n",
- " current_time = time_in_beijing()\n",
- " # if max_date - current time > delta time, return (start_date, end_date, freq)\n",
- " if current_time - max_date > freq:\n",
- " return (max_date, current_time, freq)\n",
- " else:\n",
- " return None\n",
- "\n",
- "print(need_to_update())\n",
- "\n",
- "# else return None\n",
- "\n",
- "# with create_engine(db_url).connect() as conn:\n",
- "# max_date = conn.execute(text('SELECT MAX(date) FROM benchmark_profile')).fetchone()[0]\n",
- "# # convert max_date to datetime with shanghai time zon\n",
- "# max_date = convert_string_to_datetime(max_date)\n",
- "# print(max_date)\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 73,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " index | \n",
- " date | \n",
- " weight | \n",
- " display_name | \n",
- " ticker | \n",
- " sector | \n",
- " aggregate_sector | \n",
- " name | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 0 | \n",
- " 26500 | \n",
- " 2021-12-31 | \n",
- " 0.530 | \n",
- " 中国宝安 | \n",
- " 000009.XSHE | \n",
- " 电气设备I 电池II 电池化学品III 综合 工业集团企业 工业 | \n",
- " 工业 | \n",
- " ZGBA | \n",
- "
\n",
- " \n",
- " 1 | \n",
- " 26501 | \n",
- " 2021-12-31 | \n",
- " 0.194 | \n",
- " 南玻A | \n",
- " 000012.XSHE | \n",
- " 建筑材料I 玻璃制造II 玻璃制造III 非金属矿物制品业 玻璃 原材料 | \n",
- " 原料与能源 | \n",
- " NBA | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 26502 | \n",
- " 2021-12-31 | \n",
- " 0.211 | \n",
- " 深科技 | \n",
- " 000021.XSHE | \n",
- " 电子I 电子制造II 消费电子零部件及组装III 计算机、通信和其他电子设备制造业 安防设备... | \n",
- " 信息与通信 | \n",
- " SKJ | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 26503 | \n",
- " 2021-12-31 | \n",
- " 0.055 | \n",
- " 招商港口 | \n",
- " 001872.XSHE | \n",
- " 交通运输I 航运港口II 港口III 水上运输业 港口 工业 | \n",
- " 工业 | \n",
- " ZSGK | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 26504 | \n",
- " 2021-12-31 | \n",
- " 0.219 | \n",
- " 深圳能源 | \n",
- " 000027.XSHE | \n",
- " 公用事业I 电力II 火电III 电力、热力生产和供应业 火电 公用事业 | \n",
- " 公用事业 | \n",
- " SZNY | \n",
- "
\n",
- " \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " 495 | \n",
- " 26995 | \n",
- " 2021-12-31 | \n",
- " 0.328 | \n",
- " 凯赛生物 | \n",
- " 688065.XSHG | \n",
- " 化工I 化学制品II 其他化学制品III 化学纤维制造业 其他化学原料 原材料 | \n",
- " 原料与能源 | \n",
- " KSSW | \n",
- "
\n",
- " \n",
- " 496 | \n",
- " 26996 | \n",
- " 2021-12-31 | \n",
- " 0.118 | \n",
- " 财达证券 | \n",
- " 600906.XSHG | \n",
- " 非银金融I 证券II 证券III 资本市场服务 证券公司 金融 | \n",
- " 金融与地产 | \n",
- " CDZQ | \n",
- "
\n",
- " \n",
- " 497 | \n",
- " 26997 | \n",
- " 2021-12-31 | \n",
- " 0.101 | \n",
- " 圣湘生物 | \n",
- " 688289.XSHG | \n",
- " 医药生物I 医疗器械II 体外诊断III 医药制造业 体外诊断 医药卫生 | \n",
- " 医药卫生 | \n",
- " SXSW | \n",
- "
\n",
- " \n",
- " 498 | \n",
- " 26998 | \n",
- " 2021-12-31 | \n",
- " 0.089 | \n",
- " 南网能源 | \n",
- " 003035.XSHE | \n",
- " 公用事业I 电力II 电能综合服务III 科技推广和应用服务业 节能与资源回收 工业 | \n",
- " 公用事业 | \n",
- " NWNY | \n",
- "
\n",
- " \n",
- " 499 | \n",
- " 26999 | \n",
- " 2021-12-31 | \n",
- " 0.350 | \n",
- " 思瑞浦 | \n",
- " 688536.XSHG | \n",
- " 电子I 半导体II 模拟芯片设计III 软件和信息技术服务业 集成电路设计 信息技术 | \n",
- " 信息与通信 | \n",
- " SRP | \n",
- "
\n",
- " \n",
- "
\n",
- "
500 rows × 8 columns
\n",
- "
"
- ],
- "text/plain": [
- " index date weight display_name ticker \\\n",
- "0 26500 2021-12-31 0.530 中国宝安 000009.XSHE \n",
- "1 26501 2021-12-31 0.194 南玻A 000012.XSHE \n",
- "2 26502 2021-12-31 0.211 深科技 000021.XSHE \n",
- "3 26503 2021-12-31 0.055 招商港口 001872.XSHE \n",
- "4 26504 2021-12-31 0.219 深圳能源 000027.XSHE \n",
- ".. ... ... ... ... ... \n",
- "495 26995 2021-12-31 0.328 凯赛生物 688065.XSHG \n",
- "496 26996 2021-12-31 0.118 财达证券 600906.XSHG \n",
- "497 26997 2021-12-31 0.101 圣湘生物 688289.XSHG \n",
- "498 26998 2021-12-31 0.089 南网能源 003035.XSHE \n",
- "499 26999 2021-12-31 0.350 思瑞浦 688536.XSHG \n",
- "\n",
- " sector aggregate_sector name \n",
- "0 电气设备I 电池II 电池化学品III 综合 工业集团企业 工业 工业 ZGBA \n",
- "1 建筑材料I 玻璃制造II 玻璃制造III 非金属矿物制品业 玻璃 原材料 原料与能源 NBA \n",
- "2 电子I 电子制造II 消费电子零部件及组装III 计算机、通信和其他电子设备制造业 安防设备... 信息与通信 SKJ \n",
- "3 交通运输I 航运港口II 港口III 水上运输业 港口 工业 工业 ZSGK \n",
- "4 公用事业I 电力II 火电III 电力、热力生产和供应业 火电 公用事业 公用事业 SZNY \n",
- ".. ... ... ... \n",
- "495 化工I 化学制品II 其他化学制品III 化学纤维制造业 其他化学原料 原材料 原料与能源 KSSW \n",
- "496 非银金融I 证券II 证券III 资本市场服务 证券公司 金融 金融与地产 CDZQ \n",
- "497 医药生物I 医疗器械II 体外诊断III 医药制造业 体外诊断 医药卫生 医药卫生 SXSW \n",
- "498 公用事业I 电力II 电能综合服务III 科技推广和应用服务业 节能与资源回收 工业 公用事业 NWNY \n",
- "499 电子I 半导体II 模拟芯片设计III 软件和信息技术服务业 集成电路设计 信息技术 信息与通信 SRP \n",
- "\n",
- "[500 rows x 8 columns]"
- ]
- },
- "execution_count": 73,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "get_most_recent_profile('benchmark')"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "auth success \n"
- ]
- }
- ],
- "source": [
- "## request all stock info\n",
- "df = api.get_all_stocks_detail()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 11,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "Index(['display_name', 'name', 'start_date', 'end_date', 'type', 'ticker',\n",
- " 'sector', 'aggregate_sector'],\n",
- " dtype='object')"
- ]
- },
- "execution_count": 11,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "df.columns"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " display_name | \n",
- " name | \n",
- " start_date | \n",
- " end_date | \n",
- " type | \n",
- " ticker | \n",
- " sector | \n",
- " aggregate_sector | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 0 | \n",
- " 平安银行 | \n",
- " PAYH | \n",
- " 1991-04-03 | \n",
- " 2200-01-01 | \n",
- " stock | \n",
- " 000001.XSHE | \n",
- " 银行I 股份制银行II 股份制银行III 货币金融服务 综合性银行 金融 | \n",
- " 金融与地产 | \n",
- "
\n",
- " \n",
- " 1 | \n",
- " 万科A | \n",
- " WKA | \n",
- " 1991-01-29 | \n",
- " 2200-01-01 | \n",
- " stock | \n",
- " 000002.XSHE | \n",
- " 房地产I 房地产开发II 房地产开发III 房地产业 房地产开发 房地产 | \n",
- " 金融与地产 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 国华网安 | \n",
- " GHWA | \n",
- " 1990-12-01 | \n",
- " 2200-01-01 | \n",
- " stock | \n",
- " 000004.XSHE | \n",
- " 计算机I 软件开发II 横向通用软件III 软件和信息技术服务业 通用软件 信息技术 | \n",
- " 信息与通信 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " ST星源 | \n",
- " STXY | \n",
- " 1990-12-10 | \n",
- " 2200-01-01 | \n",
- " stock | \n",
- " 000005.XSHE | \n",
- " 环保I 环境治理II 综合环境治理III 生态保护和环境治理业 污水处理 工业 | \n",
- " 公用事业 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 深振业A | \n",
- " SZYA | \n",
- " 1992-04-27 | \n",
- " 2200-01-01 | \n",
- " stock | \n",
- " 000006.XSHE | \n",
- " 房地产I 房地产开发II 房地产开发III 房地产业 房地产开发 房地产 | \n",
- " 金融与地产 | \n",
- "
\n",
- " \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- " ... | \n",
- "
\n",
- " \n",
- " 5243 | \n",
- " 华纳药厂 | \n",
- " HNYC | \n",
- " 2021-07-13 | \n",
- " 2200-01-01 | \n",
- " stock | \n",
- " 688799.XSHG | \n",
- " 医药生物I 化学制药II 化学制剂III 医药制造业 药品制剂 医药卫生 | \n",
- " 医药卫生 | \n",
- "
\n",
- " \n",
- " 5244 | \n",
- " ���可达 | \n",
- " RKD | \n",
- " 2021-07-22 | \n",
- " 2200-01-01 | \n",
- " stock | \n",
- " 688800.XSHG | \n",
- " 电子I 其他电子II 其他电子III 计算机、通信和其他电子设备制造业 汽车电子 可选消费 | \n",
- " 信息与通信 | \n",
- "
\n",
- " \n",
- " 5245 | \n",
- " 天能股份 | \n",
- " TNGF | \n",
- " 2021-01-18 | \n",
- " 2200-01-01 | \n",
- " stock | \n",
- " 688819.XSHG | \n",
- " 电气设备I 电池II 蓄电池及其他电池III 电气机械和器材制造业 电池 工业 | \n",
- " 工业 | \n",
- "
\n",
- " \n",
- " 5246 | \n",
- " 中芯国际 | \n",
- " ZXGJ | \n",
- " 2020-07-16 | \n",
- " 2200-01-01 | \n",
- " stock | \n",
- " 688981.XSHG | \n",
- " 电子I 半导体II 集成电路制造III 计算机、通信和其他电子设备制造业 集成电路制造 信息技术 | \n",
- " 信息与通信 | \n",
- "
\n",
- " \n",
- " 5247 | \n",
- " 九号公司 | \n",
- " JHGS | \n",
- " 2020-10-29 | \n",
- " 2200-01-01 | \n",
- " stock | \n",
- " 689009.XSHG | \n",
- " 汽车I 其他交运设备II 其他交运设备III 计算机、通信和其他电子设备制造业 休闲设备与用... | \n",
- " 消费 | \n",
- "
\n",
- " \n",
- "
\n",
- "
5248 rows × 8 columns
\n",
- "
"
- ],
- "text/plain": [
- " display_name name start_date end_date type ticker \\\n",
- "0 平安银行 PAYH 1991-04-03 2200-01-01 stock 000001.XSHE \n",
- "1 万科A WKA 1991-01-29 2200-01-01 stock 000002.XSHE \n",
- "2 国华网安 GHWA 1990-12-01 2200-01-01 stock 000004.XSHE \n",
- "3 ST星源 STXY 1990-12-10 2200-01-01 stock 000005.XSHE \n",
- "4 深振业A SZYA 1992-04-27 2200-01-01 stock 000006.XSHE \n",
- "... ... ... ... ... ... ... \n",
- "5243 华纳药厂 HNYC 2021-07-13 2200-01-01 stock 688799.XSHG \n",
- "5244 瑞可达 RKD 2021-07-22 2200-01-01 stock 688800.XSHG \n",
- "5245 天能股份 TNGF 2021-01-18 2200-01-01 stock 688819.XSHG \n",
- "5246 中芯国际 ZXGJ 2020-07-16 2200-01-01 stock 688981.XSHG \n",
- "5247 九号公司 JHGS 2020-10-29 2200-01-01 stock 689009.XSHG \n",
- "\n",
- " sector aggregate_sector \n",
- "0 银行I 股份制银行II 股份制银行III 货币金融服务 综合性银行 金融 金融与地产 \n",
- "1 房地产I 房地产开发II 房地产开发III 房地产业 房地产开发 房地产 金融与地产 \n",
- "2 计算机I 软件开发II 横向通用软件III 软件和信息技术服务业 通用软件 信息技术 信息与通信 \n",
- "3 环保I 环境治理II 综合环境治理III 生态保护和环境治理业 污水处理 工业 公用事业 \n",
- "4 房地产I 房地产开发II 房地产开发III 房地产业 房地产开发 房地产 金融与地产 \n",
- "... ... ... \n",
- "5243 医药生物I 化学制药II 化学制剂III 医药制造业 药品制剂 医药卫生 医药卫生 \n",
- "5244 电子I 其他电子II 其他电子III 计算机、通信和其他电子设备制造业 汽车电子 可选消费 信息与通信 \n",
- "5245 电气设备I 电池II 蓄电池及其他电池III 电气机械和器材制造业 电池 工业 工业 \n",
- "5246 电子I 半导体II 集成电路制造III 计算机、通信和其他电子设备制造业 集成电路制造 信息技术 信息与通信 \n",
- "5247 汽车I 其他交运设备II 其他交运设备III 计算机、通信和其他电子设备制造业 休闲设备与用... 消费 \n",
- "\n",
- "[5248 rows x 8 columns]"
- ]
- },
- "execution_count": 10,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "detail_df"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "portfolio_risk_assesment",
- "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.11.4"
- },
- "orig_nbformat": 4
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}