def _refresh_fast_backtest(x): _d_bt_bs, _d_bt_ft, _d_bt_fw = x _d_bt_bs_dt = _d_bt_bs.listdir() # _d_bt_bs_dt = _d_bt_bs_dt[:-2] # _d_bt_bs_dt = _d_bt_bs_dt[-2:] ndt = len(_d_bt_bs_dt) # ri1_ = np.empty(ndt)*np.nan # ri2_ = np.empty(ndt)*np.nan # ri3_ = np.empty(ndt)*np.nan # ri4_ = np.empty(ndt)*np.nan for j, i in enumerate(_d_bt_bs_dt): # j = 0 # i = _d_bt_bs_dt[j] xi_all = _d_bt_bs.load(i) xi = np.ascontiguousarray(xi_all["arr_0"]).astype("float64") ci1 = np.ascontiguousarray(xi_all["arr_1"]).astype("float64") ci2 = np.ascontiguousarray(xi_all["arr_2"]).astype("float64") # sci1 = np.linalg.inv(np.ascontiguousarray(xi_all['arr_3']).astype('float64')) # for testing, inverted # sci2 = np.linalg.inv(np.ascontiguousarray(xi_all['arr_4']).astype('float64')) # for testing, inverted tci = xi_all["arr_5"] n = xi.shape[1] yi = _d_bt_ft.load(i) # unpack xi fvol, fadv = xi[0, :], xi[1, :] fpc0_dy, fpc0_st = xi[2, :], xi[3, :] fpc1_dy, fpc1_st = xi[4, :], xi[5, :] fpc2_dy, fpc2_st = xi[6, :], xi[7, :] fpc3_dy, fpc3_st = xi[8, :], xi[9, :] fpc4_dy, fpc4_st = xi[10, :], xi[11, :] fpc5_dy, fpc5_st = xi[12, :], xi[13, :] fsp03, fsp06, fsp09, fsp12 = xi[14, :], xi[15, :], xi[16, :], xi[17, :] fmd03, fmd06, fmd09, fmd12 = xi[18, :], xi[19, :], xi[20, :], xi[21, :] fmom03, fmom06, fmom09, fmom12 = xi[22, :], xi[23, :], xi[24, :], xi[25, :] flvl03, flvl06, flvl09, flvl12 = xi[26, :], xi[27, :], xi[28, :], xi[29, :] fsig = xi[30, :] fb1 = xi[31, :] fb2 = xi[32, :] # create the portfolio fvol_ = np.diag(fvol) * 16 fcov2_ = np.linalg.inv(np.dot(fvol_, np.dot((ci1 + np.identity(n)) / 2, fvol_))) # try ci2 instead of ci1 # liquidity measures # fliq_ = (cap/(liqg*fadv))**2 # fliq_ = np.diag(fliq_) ei = np.ones(n) tmp = 0.5 * np.dot(crts.neut_corr_mat(fcov2_, np.vstack((fpc0_st, fpc1_st, fpc4_st, ei, fpc5_st))), fsig) _d_bt_fw.save(i, tci, tmp)
def test_returns(): r_all = [] _d_bt_bs_dt_com = None for k in range(0, 8): _d_bt_bs = d_bt_bs[k] _d_bt_ft = d_bt_ft[k] _d_bt_bs_dt = _d_bt_bs.listdir() _d_bt_bs_dt = _d_bt_bs_dt[:-2] # ndt = len(_d_bt_bs_dt) if k == 0: _d_bt_bs_dt_com = _d_bt_bs_dt else: _d_bt_bs_dt_com = list(set(_d_bt_bs_dt_com).intersection(set(_d_bt_bs_dt))) _d_bt_bs_dt_com = sorted(_d_bt_bs_dt_com) ndt = len(_d_bt_bs_dt_com) for k in range(0, 8): _d_bt_bs = d_bt_bs[k] _d_bt_ft = d_bt_ft[k] ri1_ = np.empty(ndt) * np.nan for j, i in enumerate(_d_bt_bs_dt_com): xi_all = _d_bt_bs.load(i) xi = np.ascontiguousarray(xi_all["arr_0"]).astype("float64") ci1 = np.ascontiguousarray(xi_all["arr_1"]).astype("float64") tci = xi_all["arr_5"] n = xi.shape[1] yi = _d_bt_ft.load(i) # unpack xi fvol, fadv = xi[0, :], xi[1, :] fpc0_dy, fpc0_st = xi[2, :], xi[3, :] fpc1_dy, fpc1_st = xi[4, :], xi[5, :] fpc4_dy, fpc4_st = xi[10, :], xi[11, :] fpc5_dy, fpc5_st = xi[12, :], xi[13, :] fsig = xi[30, :] # create the portfolio fvol_ = np.diag(fvol) * 16 fcov2_ = np.linalg.inv(np.dot(fvol_, np.dot((ci1 + np.identity(n)) / 2, fvol_))) # try ci2 instead of ci1 ei = np.ones(n) tmp = 0.5 * np.dot(crts.neut_corr_mat(fcov2_, np.vstack((fpc0_st, fpc1_st, fpc4_st, ei, fpc5_st))), fsig) ri1_[j] = np.dot(yi, tmp) r_all.append(ri1_) clus_wgt = np.array([0.15, 0.075, 0.21, 0.075, 0.15, 0.06, 0.14, 0.14]) for i in range(0, 8): if i == 0: r_all_ = r_all[0] * clus_wgt[0] else: r_all_ += r_all[i] * clus_wgt[i] backtest_ret = cruf.DataFrame({"Date": crup.str_to_pd_dt(_d_bt_bs_dt_com), "Returns": r_all_}) # save returns d_un.store("Backtest_Returns", backtest_ret)