Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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)