1 file was added to this release more than 14 days after its initial publication. Inspect the release files before installing.
This is a self-build project for studying purpose only. Any commercial usage of this project is banned.
Dependencies
python 3.5
pandas 0.23.0
spyder 3.2.8
Sample
Download descriptors from Wind API and make factors
path='your_source_file'
#########################
## step1 wind update ##
#########################
from barra_risk_model.Wind_update.get_wind import update_wind
dt_range_dict={
# 'dt':(None,20181231)
'rf':(None,20181019)
,'totalA':(None,20181019)
,'descriptor_annually':None
,'index':(None,20181019)
,'descriptor_daily':(20181011,20181019)
,'descriptor_seasonal':20180930
}
update_wind(path,dt_range_dict)
#####################
## step1.5 growth ##
#####################
# only at the beginning of each year when new growth is downloaded
from barra_risk_model.Factor_manufacture.make_growth import make_growth
# example for update growth_r of 20111231
year_range=(2011,2012)
make_growth(year_range,path)
########################
## step2 integration ##
########################
from barra_risk_model.Factor_manufacture.descriptor_integration import descriptor_integration
dt_range=(20181008,20181019)
warm_start_quarterly=20170930 # warm start should be 1 seasons before for annual reporting and 1 seasons before for quaterly reporting
warm_start_yearly=20161231 # 2 years before
descriptor_integration(path,dt_range,warm_start_quarterly,warm_start_yearly)
########################
## step3 make factors ##
########################
from barra_risk_model.Factor_manufacture.make_factor import manufacture
dt_range_dict={
# 'exr':(20181008,20181019) #should cover one more day before to create return from price
# ,'srcap':(20181008,20181019)
# ,'ind':(20181008,20181019)
'styl':(20120101,20181019)
}
history_start_date=20120101 #525 before styl starting date
manufacture(path,dt_range_dict,history_start_date,mapping=True,ind_mapping_exists=True)
Make prediction of index volatility
#########################
## step4 factor return ##
#########################
from barra_risk_model.Factor_return.Factor_return_core import factor_return_manufacture
## start
#dt_range=(20120101,20181019)
#factor_return_manufacture(path,dt_range,pool='ZZ800',filter_stock_flag=True,filter_dt_flag=True)
# renewal (use more days to keep more stocks,suggest)
dt_range=(20180901,20181019)
factor_return_manufacture(path,dt_range,pool='ZZ800',filter_stock_flag=True,filter_dt_flag=False)
#######################################
## step5 factor cov and specfic risk ##
#######################################
import numpy as np
from RNWS import read,write
from barra_risk_model.Factor_matrix_core import cov_matrix_gen_range
from barra_risk_model.Specific_matrix_core import spc_matrix_gen_range
start=20140312
end=20181019
Fct_return= read.read_df(path+'/factor_return_data',file_pattern='Fct_return',start=start,end=end)
F_all= cov_matrix_gen_range(Fct_return)
Spc_return=read.read_df(path+'/factor_return_data',file_pattern='Spc_return',start=start,end=end)
SRCap=read.read_df(path+'/srcap','srcap',start=start,end=end)
stock_pool=read.read_srs(path+'/index/ZZ800','Stk_ZZ800',start=start,end=end)
X_all= read.read_dict(path+'/factor_return_data',file_pattern='X1',start=start,end=end)
S_all=spc_matrix_gen_range(Spc_return=Spc_return,X_all=X_all,stock_pool=stock_pool,cap=np.square(SRCap))
renewal_dt=20140312
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)]}
S_all_tmp=S_all.loc[renewal_dt:]
write.write_dict(F_all_tmp,path=path+'/factor_cov_matrix',file_pattern='factor_cov')
write.write_df(S_all_tmp,path=path+'/specific_volatility',file_pattern='specofoc_vol')
#############################
# step6 one day prediction ##
#############################
import numpy as np
from RNWS import read,write
from barra_risk_model.Factor_matrix_core import cov_matrix_oneday
from barra_risk_model.Specific_matrix_core import spc_matrix_oneday
start=20170508
end=20180508
Fct_return= read.read_df(path+'/factor_return_data',file_pattern='Fct_return',start=start,end=end)
F_one=cov_matrix_oneday(Fct_return,dt=20180508)
Spc_return=read.read_df(path+'/factor_return_data',file_pattern='Spc_return',start=start,end=end)
X_all= read.read_dict(path+'/factor_return_data',file_pattern='X1',start=start,end=end)
stock_pool=read.read_srs(path+'/index/ZZ800','Stk_ZZ800',start=start,end=end)
SRCap=read.read_df(path+'/srcap','srcap',start=start,end=end)
S_one=spc_matrix_oneday(Spc_return=Spc_return,dt=20180508,X_all=X_all,stock_pool=stock_pool,cap=np.square(SRCap))
# S_one predict one day specific volatility, requiring 128 days to preoduce.
###############################
## step7 evaluate prediction ##
###############################
from barra_risk_model.Bias_stats import bs_F,bs,bs_window,bs_f_window,real_std,predicted_std
import datetime
import matplotlib.pyplot as plt
start=20140312
end=20181019
F_all= read.read_dict(path+'/factor_cov_matrix',file_pattern='factor_cov',start=start,end=end)
R_all= read.read_df(path+'/factor_return_data',file_pattern='R',start=start,end=end)
X_all= read.read_dict(path+'/factor_return_data',file_pattern='X1',start=start,end=end)
S_all= read.read_df(path+'/specific_volatility',file_pattern='specofoc_vol',start=start,end=end)
W= read.read_df(path+'/index/HS300',file_pattern='Stk_HS300',start=start,end=end,dat_col=3,inx_col=1)
W=W.replace('None',np.nan).astype(float)
W2=W.fillna(0)
#W2=W2.where(W2==0)
def plot_bs(R_all,F_all,X_all,S_all,W):
bs_f=bs_F(R_all,F_all,X_all,W)
bs_fw=bs_f_window(R_all,F_all,X_all,W)
bs_=bs(R_all,F_all,X_all,S_all,W)
bs_w=bs_window(R_all,F_all,X_all,S_all,W)
bs_fw.index=[datetime.datetime.strptime(str(i),'%Y%m%d') for i in bs_fw.index]
bs_w.index=[datetime.datetime.strptime(str(i),'%Y%m%d') for i in bs_w.index]
plt.figure(figsize=(10,6))
plt.plot(bs_w,label='bs')
plt.plot(bs_fw,label='bs_f')
plt.gcf().autofmt_xdate()
plt.legend()
plt.show()
print(bs_f,bs_)
def plot_vol(R_all,F_all,X_all,S_all,W):
rv=real_std(R_all,W)
pv=predicted_std(F_all,S_all,X_all,W)
rv.index=[datetime.datetime.strptime(str(i),'%Y%m%d') for i in rv.index]
pv.index=[datetime.datetime.strptime(str(i),'%Y%m%d') for i in pv.index]
plt.figure(figsize=(10,6))
plt.plot(rv,label='real volatility')
plt.plot(pv,label='predicted volatility')
plt.gcf().autofmt_xdate()
plt.legend()
plt.show()
plot_vol(R_all,F_all,X_all,S_all,W2)
rv=real_std(R_all,W2)
pv=predicted_std(F_all,S_all,X_all,W2)
pv2=pv.reset_index()
rv2=rv.reset_index()
pv3=pv.iloc[np.where((pv2['index']//100).pct_change()!=0)]
rv3=rv.iloc[np.where((rv2['index']//100).pct_change()!=0)]
rv3.index=[datetime.datetime.strptime(str(i),'%Y%m%d') for i in rv3.index]
pv3.index=[datetime.datetime.strptime(str(i),'%Y%m%d') for i in pv3.index]
plt.figure(figsize=(10,6))
plt.plot(rv3,label='real volatility')
plt.plot(pv3,label='predicted volatility')
plt.gcf().autofmt_xdate()
plt.legend()
plt.show()
Metadata
Release files for barra-risk-model 0.1.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
File added late
1 file was uploaded more than 14 days after the first file in this release.
While project maintainers occasionally add legitimate files to an existing release, late additions can also indicate a security compromise.
We recommend inspecting the release files before installing.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| barra_risk_model-0.1.5.tar.gz | 25.1 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| barra_risk_model-0.1.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 65.5 kB
Release files / barra_risk_model-0.1.5.tar.gz
File added late
This file was uploaded more than 14 days after the first file in this release.
While project maintainers occasionally add legitimate files to an existing release, late additions can also indicate a security compromise.
We recommend inspecting the release file before installing.
| Download URL | barra_risk_model-0.1.5.tar.gz |
|---|---|
| Size | 25.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5ba26ccf4789b4b9f34d5891a86ba06f59417f12b4b66ea29800d831bdd811c3
|
|
BLAKE2b-256 checksum How to use checksums |
dbf49ecfadf968762693fc670160c48b76606eb5d3af3ae2f217ee72c768154f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.11.0 pkginfo/1.4.2 requests/2.14.2 setuptools/40.2.0 requests-toolbelt/0.8.0 tqdm/4.23.4 CPython/3.5.5
|
Release files / barra_risk_model-0.1.5-py3-none-any.whl
| Download URL | barra_risk_model-0.1.5-py3-none-any.whl |
|---|---|
| Size | 40.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3ea41fa95fd26caca4b74c1b03a9c4c2b95c831c7f5125c14ac229ba43f8490d
|
|
BLAKE2b-256 checksum How to use checksums |
bb074036154f91cc152f0beb3b1cc38c171efa46fc8e887be35ed050bf54c6cc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.11.0 pkginfo/1.4.2 requests/2.14.2 setuptools/40.2.0 requests-toolbelt/0.8.0 tqdm/4.23.4 CPython/3.5.5
|
Security for barra-risk-model 0.1.5
Upload timing
File added late
1 file was uploaded more than 14 days after the first file in this release.
While project maintainers occasionally add legitimate files to an existing release, late additions can also indicate a security compromise.
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.