Skip to main content

Barra Risk Model CN version

Project description

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()

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

barra_risk_model-0.1.5.tar.gz (25.1 kB view details)

Uploaded Source

Built Distribution

barra_risk_model-0.1.5-py3-none-any.whl (40.5 kB view details)

Uploaded Python 3

File details

Details for the file barra_risk_model-0.1.5.tar.gz.

File metadata

  • Download URL: barra_risk_model-0.1.5.tar.gz
  • Upload date:
  • Size: 25.1 kB
  • Tags: Source
  • Uploaded using 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

File hashes

Hashes for barra_risk_model-0.1.5.tar.gz
Algorithm Hash digest
SHA256 5ba26ccf4789b4b9f34d5891a86ba06f59417f12b4b66ea29800d831bdd811c3
MD5 555e680ebb51ffe7360955b5a41e5059
BLAKE2b-256 dbf49ecfadf968762693fc670160c48b76606eb5d3af3ae2f217ee72c768154f

See more details on using hashes here.

File details

Details for the file barra_risk_model-0.1.5-py3-none-any.whl.

File metadata

  • Download URL: barra_risk_model-0.1.5-py3-none-any.whl
  • Upload date:
  • Size: 40.5 kB
  • Tags: Python 3
  • Uploaded using 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

File hashes

Hashes for barra_risk_model-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 3ea41fa95fd26caca4b74c1b03a9c4c2b95c831c7f5125c14ac229ba43f8490d
MD5 685c8ed75e2c2f2cd169fb7372184252
BLAKE2b-256 bb074036154f91cc152f0beb3b1cc38c171efa46fc8e887be35ed050bf54c6cc

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page