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 Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

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

Uploaded Python 3

File details

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

File metadata

  • Download URL: barra_risk_model-0.1.4-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.4-py3-none-any.whl
Algorithm Hash digest
SHA256 70d7267e2d0fab4f0834bdbb2bc373a04cd72924f97ee7029d1da328af258f28
MD5 4b9c81480243f62b3987535bb8a81892
BLAKE2b-256 61059118ce74aab65e995e6e18509cd206df93951f6a454e1372f8ddba0e20c0

See more details on using hashes here.

Supported by

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