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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
tickersharesdatesectoraggregate_sectordisplay_namename
0002709.XSHE1002021-01-05电气设备I 电池II 电池化学品III 化学原料和化学制品制造业 电池部件及材料 工业工业天赐材料TCCL
1002920.XSHE1002021-01-05计算机I 软件开发II 垂直应用软件III 汽车制造业 汽车电子 可选消费信息与通信德赛西威DSXW
2300274.XSHE1002021-01-05电气设备I 光伏设备II 逆变器III 电气机械和器材制造业 光伏设备 工业工业阳光电源YGDY
3600409.XSHG1002021-01-05化工I 化学原料II 纯碱III 化学原料和化学制品制造业 粘胶 原材料原料与能源三友化工SYHG
4600415.XSHG1002021-01-05商业贸易I 一般零售II 商业物业经营III 商务服务业 市场服务 工业消费小商品城XSPC
5603882.XSHG1002021-01-05医药生物I 医疗服务II 诊断服务III 卫生 体外诊断 医药卫生医药卫生金域医学JYYX
\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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
tickersharesdatesectoraggregate_sectordisplay_namename
0002709.XSHE2002022-01-10电气设备I 电池II 电池化学品III 化学原料和化学制品制造业 电池部件及材料 工业工业天赐材料TCCL
1002920.XSHE2002022-01-10计算机I 软件开发II 垂直应用软件III 汽车制造业 汽车电子 可选消费信息与通信德赛西威DSXW
2300274.XSHE2002022-01-10电气设备I 光伏设备II 逆变器III 电气机械和器材制造业 光伏设备 工业工业阳光电源YGDY
3600409.XSHG2002022-01-10化工I 化学原料II 纯碱III 化学原料和化学制品制造业 粘胶 原材料原料与能源三友化工SYHG
4600415.XSHG2002022-01-10商业贸易I 一般零售II 商业物业经营III 商务服务业 市场服务 工业消费小商品城XSPC
5603882.XSHG2002022-01-10医药生物I 医疗服务II 诊断服务III 卫生 体外诊断 医药卫生医药卫生金域医学JYYX
6002709.XSHE1002021-01-05电气设备I 电池II 电池化学品III 化学原料和化学制品制造业 电池部件及材料 工业工业天赐材料TCCL
7002920.XSHE1002021-01-05计算机I 软件开发II 垂直应用软件III 汽车制造业 汽车电子 可选消费信息与通信德赛西威DSXW
8300274.XSHE1002021-01-05电气设备I 光伏设备II 逆变器III 电气机械和器材制造业 光伏设备 工业工业阳光电源YGDY
9600409.XSHG1002021-01-05化工I 化学原料II 纯碱III 化学原料和化学制品制造业 粘胶 原材料原料与能源三友化工SYHG
10600415.XSHG1002021-01-05商业贸易I 一般零售II 商业物业经营III 商务服务业 市场服务 工业消费小商品城XSPC
11603882.XSHG1002021-01-05医药生物I 医疗服务II 诊断服务III 卫生 体外诊断 医药卫生医药卫生金域医学JYYX
\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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
dateweightdisplay_nametickersectoraggregate_sectorname
02020-12-310.088神州高铁000008.XSHE机械设备I 运输设备II 铁路设备III 铁路、船舶、航空航天和其他运输设备制造业 城轨铁路 工业工业SZGT
12020-12-310.344中国宝安000009.XSHE电气设备I 电池II 电池化学品III 综合 工业集团企业 工业工业ZGBA
22020-12-310.180南玻A000012.XSHE建筑材料I 玻璃制造II 玻璃制造III 非金属矿物制品业 玻璃 原材料原料与能源NBA
32020-12-310.297深科技000021.XSHE电子I 电子制造II 消费电子零部件及组装III 计算机、通信和其他电子设备制造业 安防设备...信息与通信SKJ
42020-12-310.030招商港口001872.XSHE交通运输I 航运港口II 港口III 水上运输业 港口 工业工业ZSGK
........................
4952020-12-310.438睿创微纳688002.XSHG国防军工I 军工电子II 军工电子III 计算机、通信和其他电子设备制造业 集成电路设计 信息技术工业RCWN
4962020-12-310.287晶晨股份688099.XSHG电子I 半导体II 数字芯片设计III 软件和信息技术服务业 集成电路设计 信息技术信息与通信JCGF
4972020-12-310.252虹软科技688088.XSHG计算机I IT服务II IT服务III 软件和信息技术服务业 通用软件 信息技术信息与通信HRKJ
4982020-12-310.134微芯生物688321.XSHG医药生物I 化学制药II 化学制剂III 医药制造业 药品制剂 医药卫生医药卫生WXSW
4992020-12-310.130南微医学688029.XSHG医药生物I 医疗器械II 医疗耗材III 专用设备制造业 医疗耗材 医药卫生医药卫生NWYX
\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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
dateweightdisplay_nametickersectoraggregate_sectorname
15002020-12-310.088神州高铁000008.XSHE机械设备I 运输设备II 铁路设备III 铁路、船舶、航空航天和其他运输设备制造业 城轨铁路 工业工业SZGT
15012020-12-310.344中国宝安000009.XSHE电气设备I 电池II 电池化学品III 综合 工业集团企业 工业工业ZGBA
15022020-12-310.180南玻A000012.XSHE建筑材料I 玻璃制造II 玻璃制造III 非金属矿物制品业 玻璃 原材料原料与能源NBA
15032020-12-310.297深科技000021.XSHE电子I 电子制造II 消费电子零部件及组装III 计算机、通信和其他电子设备制造业 安防设备...信息与通信SKJ
15042020-12-310.030招商港口001872.XSHE交通运输I 航运港口II 港口III 水上运输业 港口 工业工业ZSGK
........................
269952021-12-310.328凯赛生物688065.XSHG化工I 化学制品II 其他化学制品III 化学纤维制造业 其他化学原料 原材料原料与能源KSSW
269962021-12-310.118财达证券600906.XSHG非银金融I 证券II 证券III 资本市场服务 证券公司 金融金融与地产CDZQ
269972021-12-310.101圣湘生物688289.XSHG医药生物I 医疗器械II 体外诊断III 医药制造业 体外诊断 医药卫生医药卫生SXSW
269982021-12-310.089南网能源003035.XSHE公用事业I 电力II 电能综合服务III 科技推广和应用服务业 节能与资源回收 工业公用事业NWNY
269992021-12-310.350思瑞浦688536.XSHG电子I 半导体II 模拟芯片设计III 软件和信息技术服务业 集成电路设计 信息技术信息与通信SRP
\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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
datetickeropenclosehighlowvolumemoney
02021-01-05600409.XSHG9.239.579.669.0882669289.07.803391e+08
12021-01-06600409.XSHG9.409.739.789.3476413825.07.351438e+08
22021-01-07600409.XSHG9.7410.1410.279.7461932917.06.235711e+08
32021-01-08600409.XSHG10.1510.1310.309.7049727039.04.964196e+08
42021-01-11600409.XSHG10.1010.2910.369.7664022975.06.439525e+08
...........................
14772022-01-04600415.XSHG4.804.894.904.7858291943.02.832956e+08
14782022-01-05600415.XSHG4.954.804.954.7843227038.02.095315e+08
14792022-01-06600415.XSHG4.814.734.824.7130542883.01.450018e+08
14802022-01-07600415.XSHG4.744.704.794.6824902567.01.178837e+08
14812022-01-10600415.XSHG4.704.754.854.6739278041.01.859827e+08
\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", - "
\n", - "
\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", - "
\n", - "
\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", - "
\n", - "
\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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexdateweightdisplay_nametickersectoraggregate_sectorname
0265002021-12-310.530中国宝安000009.XSHE电气设备I 电池II 电池化学品III 综合 工业集团企业 工业工业ZGBA
1265012021-12-310.194南玻A000012.XSHE建筑材料I 玻璃制造II 玻璃制造III 非金属矿物制品业 玻璃 原材料原料与能源NBA
2265022021-12-310.211深科技000021.XSHE电子I 电子制造II 消费电子零部件及组装III 计算机、通信和其他电子设备制造业 安防设备...信息与通信SKJ
3265032021-12-310.055招商港口001872.XSHE交通运输I 航运港口II 港口III 水上运输业 港口 工业工业ZSGK
4265042021-12-310.219深圳能源000027.XSHE公用事业I 电力II 火电III 电力、热力生产和供应业 火电 公用事业公用事业SZNY
...........................
495269952021-12-310.328凯赛生物688065.XSHG化工I 化学制品II 其他化学制品III 化学纤维制造业 其他化学原料 原材料原料与能源KSSW
496269962021-12-310.118财达证券600906.XSHG非银金融I 证券II 证券III 资本市场服务 证券公司 金融金融与地产CDZQ
497269972021-12-310.101圣湘生物688289.XSHG医药生物I 医疗器械II 体外诊断III 医药制造业 体外诊断 医药卫生医药卫生SXSW
498269982021-12-310.089南网能源003035.XSHE公用事业I 电力II 电能综合服务III 科技推广和应用服务业 节能与资源回收 工业公用事业NWNY
499269992021-12-310.350思瑞浦688536.XSHG电子I 半导体II 模拟芯片设计III 软件和信息技术服务业 集成电路设计 信息技术信息与通信SRP
\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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
display_namenamestart_dateend_datetypetickersectoraggregate_sector
0平安银行PAYH1991-04-032200-01-01stock000001.XSHE银行I 股份制银行II 股份制银行III 货币金融服务 综合性银行 金融金融与地产
1万科AWKA1991-01-292200-01-01stock000002.XSHE房地产I 房地产开发II 房地产开发III 房地产业 房地产开发 房地产金融与地产
2国华网安GHWA1990-12-012200-01-01stock000004.XSHE计算机I 软件开发II 横向通用软件III 软件和信息技术服务业 通用软件 信息技术信息与通信
3ST星源STXY1990-12-102200-01-01stock000005.XSHE环保I 环境治理II 综合环境治理III 生态保护和环境治理业 污水处理 工业公用事业
4深振业ASZYA1992-04-272200-01-01stock000006.XSHE房地产I 房地产开发II 房地产开发III 房地产业 房地产开发 房地产金融与地产
...........................
5243华纳药厂HNYC2021-07-132200-01-01stock688799.XSHG医药生物I 化学制药II 化学制剂III 医药制造业 药品制剂 医药卫生医药卫生
5244���可达RKD2021-07-222200-01-01stock688800.XSHG电子I 其他电子II 其他电子III 计算机、通信和其他电子设备制造业 汽车电子 可选消费信息与通信
5245天能股份TNGF2021-01-182200-01-01stock688819.XSHG电气设备I 电池II 蓄电池及其他电池III 电气机械和器材制造业 电池 工业工业
5246中芯国际ZXGJ2020-07-162200-01-01stock688981.XSHG电子I 半导体II 集成电路制造III 计算机、通信和其他电子设备制造业 集成电路制造 信息技术信息与通信
5247九号公司JHGS2020-10-292200-01-01stock689009.XSHG汽车I 其他交运设备II 其他交运设备III 计算机、通信和其他电子设备制造业 休闲设备与用...消费
\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 -}