{ "info": { "author": "Yili Peng", "author_email": "yili_peng@outlook.com", "bugtrack_url": null, "classifiers": [], "description": "Barra Risk Model for China A market\n===================================\n\nThis is a self-build project for studying purpose only. Any commercial\nusage of this project is banned.\n\nDependencies\n------------\n\n- python 3.5\n- pandas 0.23.0\n- spyder 3.2.8\n\nSample\n------\n\nDownload descriptors from Wind API and make factors\n\n.. code:: bash\n\n path='your_source_file'\n\n #########################\n ## step1 wind update ##\n #########################\n from barra_risk_model.Wind_update.get_wind import update_wind\n dt_range_dict={\n # 'dt':(None,20181231)\n 'rf':(None,20181019)\n ,'totalA':(None,20181019)\n ,'descriptor_annually':None \n ,'index':(None,20181019)\n ,'descriptor_daily':(20181011,20181019)\n ,'descriptor_seasonal':20180930\n }\n\n update_wind(path,dt_range_dict)\n\n\n #####################\n ## step1.5 growth ##\n #####################\n\n # only at the beginning of each year when new growth is downloaded\n from barra_risk_model.Factor_manufacture.make_growth import make_growth\n\n # example for update growth_r of 20111231\n year_range=(2011,2012)\n make_growth(year_range,path)\n\n\n ########################\n ## step2 integration ##\n ########################\n from barra_risk_model.Factor_manufacture.descriptor_integration import descriptor_integration\n\n dt_range=(20181008,20181019)\n warm_start_quarterly=20170930 # warm start should be 1 seasons before for annual reporting and 1 seasons before for quaterly reporting\n warm_start_yearly=20161231 # 2 years before\n descriptor_integration(path,dt_range,warm_start_quarterly,warm_start_yearly)\n\n\n ########################\n ## step3 make factors ##\n ########################\n from barra_risk_model.Factor_manufacture.make_factor import manufacture\n\n dt_range_dict={\n # 'exr':(20181008,20181019) #should cover one more day before to create return from price\n # ,'srcap':(20181008,20181019)\n # ,'ind':(20181008,20181019)\n 'styl':(20120101,20181019)\n }\n history_start_date=20120101 #525 before styl starting date\n manufacture(path,dt_range_dict,history_start_date,mapping=True,ind_mapping_exists=True)\n\nMake prediction of index volatility\n\n.. code:: bash\n\n #########################\n ## step4 factor return ##\n #########################\n from barra_risk_model.Factor_return.Factor_return_core import factor_return_manufacture\n\n ## start\n #dt_range=(20120101,20181019)\n #factor_return_manufacture(path,dt_range,pool='ZZ800',filter_stock_flag=True,filter_dt_flag=True)\n\n # renewal (use more days to keep more stocks,suggest)\n dt_range=(20180901,20181019)\n factor_return_manufacture(path,dt_range,pool='ZZ800',filter_stock_flag=True,filter_dt_flag=False)\n\n\n #######################################\n ## step5 factor cov and specfic risk ##\n #######################################\n import numpy as np\n from RNWS import read,write\n from barra_risk_model.Factor_matrix_core import cov_matrix_gen_range\n from barra_risk_model.Specific_matrix_core import spc_matrix_gen_range\n\n\n start=20140312\n end=20181019\n\n Fct_return= read.read_df(path+'/factor_return_data',file_pattern='Fct_return',start=start,end=end)\n F_all= cov_matrix_gen_range(Fct_return)\n\n Spc_return=read.read_df(path+'/factor_return_data',file_pattern='Spc_return',start=start,end=end)\n SRCap=read.read_df(path+'/srcap','srcap',start=start,end=end)\n stock_pool=read.read_srs(path+'/index/ZZ800','Stk_ZZ800',start=start,end=end)\n X_all= read.read_dict(path+'/factor_return_data',file_pattern='X1',start=start,end=end)\n S_all=spc_matrix_gen_range(Spc_return=Spc_return,X_all=X_all,stock_pool=stock_pool,cap=np.square(SRCap))\n\n renewal_dt=20140312\n F_all_tmp={dt:F_all[dt] for dt in read.reading_data.trading_dt[(read.reading_data.trading_dt>=renewal_dt)&(read.reading_data.trading_dt<=end)]}\n S_all_tmp=S_all.loc[renewal_dt:]\n\n write.write_dict(F_all_tmp,path=path+'/factor_cov_matrix',file_pattern='factor_cov')\n write.write_df(S_all_tmp,path=path+'/specific_volatility',file_pattern='specofoc_vol')\n\n #############################\n # step6 one day prediction ##\n #############################\n import numpy as np\n from RNWS import read,write\n from barra_risk_model.Factor_matrix_core import cov_matrix_oneday\n from barra_risk_model.Specific_matrix_core import spc_matrix_oneday\n\n start=20170508\n end=20180508\n\n Fct_return= read.read_df(path+'/factor_return_data',file_pattern='Fct_return',start=start,end=end)\n F_one=cov_matrix_oneday(Fct_return,dt=20180508)\n\n Spc_return=read.read_df(path+'/factor_return_data',file_pattern='Spc_return',start=start,end=end)\n X_all= read.read_dict(path+'/factor_return_data',file_pattern='X1',start=start,end=end)\n stock_pool=read.read_srs(path+'/index/ZZ800','Stk_ZZ800',start=start,end=end)\n SRCap=read.read_df(path+'/srcap','srcap',start=start,end=end)\n S_one=spc_matrix_oneday(Spc_return=Spc_return,dt=20180508,X_all=X_all,stock_pool=stock_pool,cap=np.square(SRCap))\n # S_one predict one day specific volatility, requiring 128 days to preoduce.\n\n ###############################\n ## step7 evaluate prediction ##\n ###############################\n from barra_risk_model.Bias_stats import bs_F,bs,bs_window,bs_f_window,real_std,predicted_std\n\n import datetime\n import matplotlib.pyplot as plt\n\n\n start=20140312\n end=20181019\n\n F_all= read.read_dict(path+'/factor_cov_matrix',file_pattern='factor_cov',start=start,end=end)\n R_all= read.read_df(path+'/factor_return_data',file_pattern='R',start=start,end=end)\n X_all= read.read_dict(path+'/factor_return_data',file_pattern='X1',start=start,end=end)\n S_all= read.read_df(path+'/specific_volatility',file_pattern='specofoc_vol',start=start,end=end)\n W= read.read_df(path+'/index/HS300',file_pattern='Stk_HS300',start=start,end=end,dat_col=3,inx_col=1)\n W=W.replace('None',np.nan).astype(float)\n W2=W.fillna(0)\n #W2=W2.where(W2==0)\n\n def plot_bs(R_all,F_all,X_all,S_all,W):\n bs_f=bs_F(R_all,F_all,X_all,W) \n bs_fw=bs_f_window(R_all,F_all,X_all,W)\n bs_=bs(R_all,F_all,X_all,S_all,W) \n bs_w=bs_window(R_all,F_all,X_all,S_all,W)\n\n bs_fw.index=[datetime.datetime.strptime(str(i),'%Y%m%d') for i in bs_fw.index]\n bs_w.index=[datetime.datetime.strptime(str(i),'%Y%m%d') for i in bs_w.index]\n\n plt.figure(figsize=(10,6))\n plt.plot(bs_w,label='bs')\n plt.plot(bs_fw,label='bs_f')\n plt.gcf().autofmt_xdate()\n plt.legend()\n plt.show()\n print(bs_f,bs_)\n\n def plot_vol(R_all,F_all,X_all,S_all,W):\n rv=real_std(R_all,W)\n pv=predicted_std(F_all,S_all,X_all,W)\n\n rv.index=[datetime.datetime.strptime(str(i),'%Y%m%d') for i in rv.index]\n pv.index=[datetime.datetime.strptime(str(i),'%Y%m%d') for i in pv.index]\n\n plt.figure(figsize=(10,6))\n plt.plot(rv,label='real volatility')\n plt.plot(pv,label='predicted volatility')\n plt.gcf().autofmt_xdate()\n plt.legend()\n plt.show()\n\n plot_vol(R_all,F_all,X_all,S_all,W2)\n\n rv=real_std(R_all,W2)\n pv=predicted_std(F_all,S_all,X_all,W2)\n pv2=pv.reset_index()\n rv2=rv.reset_index()\n pv3=pv.iloc[np.where((pv2['index']//100).pct_change()!=0)]\n rv3=rv.iloc[np.where((rv2['index']//100).pct_change()!=0)]\n rv3.index=[datetime.datetime.strptime(str(i),'%Y%m%d') for i in rv3.index]\n pv3.index=[datetime.datetime.strptime(str(i),'%Y%m%d') for i in pv3.index]\n plt.figure(figsize=(10,6))\n plt.plot(rv3,label='real volatility')\n plt.plot(pv3,label='predicted volatility')\n plt.gcf().autofmt_xdate()\n plt.legend()\n plt.show()\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "barra-risk-model", "package_url": "https://pypi.org/project/barra-risk-model/", "platform": "", "project_url": "https://pypi.org/project/barra-risk-model/", "project_urls": null, "release_url": "https://pypi.org/project/barra-risk-model/0.1.5/", "requires_dist": [ "RNWS (>=0.1.0)" ], "requires_python": "", "summary": "Barra Risk Model CN version", "version": "0.1.5" }, "last_serial": 4908202, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "f4964c703cb793005226d86ae7981e1a", "sha256": "fd08aa3835afc43f8f25c4a38a1a537fc97b2ae1f1b4bc5d4f9e7c2d4d43cb6d" }, "downloads": -1, "filename": "barra_risk_model-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "f4964c703cb793005226d86ae7981e1a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 32847, "upload_time": "2018-10-09T05:31:57", "url": "https://files.pythonhosted.org/packages/9d/30/00b98f4a233d876fc811db392f82dd1073169df17f6851cf106a77099fa5/barra_risk_model-0.1.0-py3-none-any.whl" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "ed668eb93b2ec3a32794211a33d24507", "sha256": "2982c510d89b949d08ee36d143b5f9a9c4a358d1eee3c8d5c4aae51ee4daa0d3" }, "downloads": -1, "filename": "barra_risk_model-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "ed668eb93b2ec3a32794211a33d24507", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 36555, "upload_time": "2018-10-12T03:34:49", "url": "https://files.pythonhosted.org/packages/67/af/bb2595a2432536c8f313171df841352aece98728003319af2f332886afda/barra_risk_model-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "82190615ceb68ae1998e9274437cf46c", "sha256": "2b8ca4432c5188030dbaad9a9edeed038315b0626ee704dcf6e6b546d630d051" }, "downloads": -1, "filename": "barra_risk_model-0.1.1.tar.gz", "has_sig": false, "md5_digest": "82190615ceb68ae1998e9274437cf46c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22367, "upload_time": "2018-10-12T03:34:51", "url": "https://files.pythonhosted.org/packages/aa/e1/95112f3e061987fc046b1c30bb9f16165e15be019f56824ca9cf60149546/barra_risk_model-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "29e52ad870730b089a37567cd2281de8", "sha256": "0057246585de60c960625091101675f96680573d12028ed16511777953e85f1c" }, "downloads": -1, "filename": "barra_risk_model-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "29e52ad870730b089a37567cd2281de8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 36578, "upload_time": "2018-10-15T10:09:01", "url": "https://files.pythonhosted.org/packages/60/5f/b70d2362238d996448204c46a2d6181aa94d32e220e6ef58db3bd53e3c9d/barra_risk_model-0.1.2-py3-none-any.whl" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "7c8ded69b6d7c1b43d0f7f4a1729c271", "sha256": "48153644a3bef777d71a2ce8939e4e8b41e8cca40ff8a54df49d3dc806ad87e9" }, "downloads": -1, "filename": "barra_risk_model-0.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "7c8ded69b6d7c1b43d0f7f4a1729c271", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 40529, "upload_time": "2018-11-22T09:58:51", "url": "https://files.pythonhosted.org/packages/50/2a/b446a6680b10ecfe02254020e17e2a2c49733c8344e501610e9967658077/barra_risk_model-0.1.3-py3-none-any.whl" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "4b9c81480243f62b3987535bb8a81892", "sha256": "70d7267e2d0fab4f0834bdbb2bc373a04cd72924f97ee7029d1da328af258f28" }, "downloads": -1, "filename": "barra_risk_model-0.1.4-py3-none-any.whl", "has_sig": false, "md5_digest": "4b9c81480243f62b3987535bb8a81892", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 40529, "upload_time": "2018-12-10T01:33:32", "url": "https://files.pythonhosted.org/packages/61/05/9118ce74aab65e995e6e18509cd206df93951f6a454e1372f8ddba0e20c0/barra_risk_model-0.1.4-py3-none-any.whl" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "685c8ed75e2c2f2cd169fb7372184252", "sha256": "3ea41fa95fd26caca4b74c1b03a9c4c2b95c831c7f5125c14ac229ba43f8490d" }, "downloads": -1, "filename": "barra_risk_model-0.1.5-py3-none-any.whl", "has_sig": false, "md5_digest": "685c8ed75e2c2f2cd169fb7372184252", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 40491, "upload_time": "2018-12-26T09:45:29", "url": "https://files.pythonhosted.org/packages/bb/07/4036154f91cc152f0beb3b1cc38c171efa46fc8e887be35ed050bf54c6cc/barra_risk_model-0.1.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "555e680ebb51ffe7360955b5a41e5059", "sha256": "5ba26ccf4789b4b9f34d5891a86ba06f59417f12b4b66ea29800d831bdd811c3" }, "downloads": -1, "filename": "barra_risk_model-0.1.5.tar.gz", "has_sig": false, "md5_digest": "555e680ebb51ffe7360955b5a41e5059", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25051, "upload_time": "2019-03-07T03:15:55", "url": "https://files.pythonhosted.org/packages/db/f4/9ecfadf968762693fc670160c48b76606eb5d3af3ae2f217ee72c768154f/barra_risk_model-0.1.5.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "685c8ed75e2c2f2cd169fb7372184252", "sha256": "3ea41fa95fd26caca4b74c1b03a9c4c2b95c831c7f5125c14ac229ba43f8490d" }, "downloads": -1, "filename": "barra_risk_model-0.1.5-py3-none-any.whl", "has_sig": false, "md5_digest": "685c8ed75e2c2f2cd169fb7372184252", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 40491, "upload_time": "2018-12-26T09:45:29", "url": "https://files.pythonhosted.org/packages/bb/07/4036154f91cc152f0beb3b1cc38c171efa46fc8e887be35ed050bf54c6cc/barra_risk_model-0.1.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "555e680ebb51ffe7360955b5a41e5059", "sha256": "5ba26ccf4789b4b9f34d5891a86ba06f59417f12b4b66ea29800d831bdd811c3" }, "downloads": -1, "filename": "barra_risk_model-0.1.5.tar.gz", "has_sig": false, "md5_digest": "555e680ebb51ffe7360955b5a41e5059", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25051, "upload_time": "2019-03-07T03:15:55", "url": "https://files.pythonhosted.org/packages/db/f4/9ecfadf968762693fc670160c48b76606eb5d3af3ae2f217ee72c768154f/barra_risk_model-0.1.5.tar.gz" } ] }