Пример #1
0
def generate_final_tl():
    clus_wgt = np.array([0.15, 0.075, 0.21, 0.075, 0.15, 0.06, 0.14, 0.14])
    # calculate the latest
    last_dt = d_bt_fw[0].listdir()
    last_dt = last_dt[-5:]
    for i in last_dt:
        # i = last_dt[1]
        tic = None
        wgt = None
        shr = None
        for k in range(0, 8):
            # k = 0
            last_dt_pos = d_bt_fw[k].load(i)
            tic_ = last_dt_pos["arr_0"]
            wgt_ = last_dt_pos["arr_1"]
            wgt_ = wgt_ * clus_wgt[k]
            cl_ = d_comb[k].retrieve("Close")
            cl_ = cl_[["Date"] + list(tic_)]
            cl_idx = [ii for ii, jj in enumerate(crup.pd_dt_to_str(cl_["Date", list])) if jj == i][0]
            cl_ = cl_[cl_idx, list(tic_)].values.astype("float64")
            sh_ = wgt_ * cap * 1000 / cl_
            if k == 0:
                tic = tic_
                wgt = wgt_
                shr = sh_
            else:
                tic = np.concatenate((tic, tic_))
                wgt = np.concatenate((wgt, wgt_))
                shr = np.concatenate((shr, sh_))
        wgt_chk = np.sum(np.abs(wgt))
        print(wgt_chk)
        if wgt_chk > 8:
            wgt = wgt * 8 / wgt_chk
            shr = shr * 8 / wgt_chk
        if wgt_chk < 1:
            wgt = wgt * 1 / wgt_chk
            shr = shr * 1 / wgt_chk
        shr = np.round(shr).astype("int64")
        # remove zero shr values
        shr_not_zero = np.where(shr != 0)[0]
        if shr_not_zero.shape[0] > 0:
            tic = tic[shr_not_zero]
            wgt = wgt[shr_not_zero]
            shr = shr[shr_not_zero]
        tl = cruf.DataFrame({"Tick": tic, "Shares": shr, "Weight": wgt})
        tl.sort("Weight")
        del tl["Weight"]
        tl = tl[["Tick", "Shares"]]
        if i > last_dt[0]:
            tl_comb = cruf.DataFrame.merge(tl, tl_old, on="Tick", how="outer")
            tl_comb["Shares_x"] = crtf.fill1(tl_comb["Shares_x"].values, 0)
            tl_comb["Shares_y"] = crtf.fill1(tl_comb["Shares_y"].values, 0)
            tl_comb["Trade"] = tl_comb["Shares_x"] - tl_comb["Shares_y"]
            tl_comb = tl_comb[["Tick", "Trade"]]
            tl_comb.to_csv(crsf.cr_tl.name + "\\Tradelist_" + i + ".csv", index_label=None, index=False)
        if i < last_dt[-1]:
            tl_old = tl
        tl.to_csv(crsf.cr_tl.name + "\\Portfolio_" + i + ".csv", index_label=None, index=False)
Пример #2
0
def _create_combined_data(x):
    _clus, _d_comb = x
    tick_sym_all = d_un.retrieve(_clus)['Ticker'].values.astype('str')
    for i in tick_sym_all:
        if i == tick_sym_all[0]:
            comb_data_hor = d_cl.retrieve(i)
            comb_data_hor = comb_data_hor[comb_data_hor['Date'] >= dt.datetime(1999, 12, 31), :]
            comb_data_op = comb_data_hor[['Date', 'Open']]
            comb_data_hi = comb_data_hor[['Date', 'High']]
            comb_data_lo = comb_data_hor[['Date', 'Low']]
            comb_data_cl = comb_data_hor[['Date', 'Close']]
            comb_data_vl = comb_data_hor[['Date', 'Volume']]
            comb_data_tr = comb_data_hor[['Date', 'Turnover']]
            comb_data_op.rename({'Open': i})
            comb_data_hi.rename({'High': i})
            comb_data_lo.rename({'Low': i})
            comb_data_cl.rename({'Close': i})
            comb_data_vl.rename({'Volume': i})
            comb_data_tr.rename({'Turnover': i})
        else:
            comb_data_hor_new = d_cl.retrieve(i)
            comb_data_hor_new = comb_data_hor_new[comb_data_hor_new['Date'] >= dt.datetime(1999, 12, 31), :]
            comb_data_op_new = comb_data_hor_new[['Date', 'Open']]
            comb_data_hi_new = comb_data_hor_new[['Date', 'High']]
            comb_data_lo_new = comb_data_hor_new[['Date', 'Low']]
            comb_data_cl_new = comb_data_hor_new[['Date', 'Close']]
            comb_data_vl_new = comb_data_hor_new[['Date', 'Volume']]
            comb_data_tr_new = comb_data_hor_new[['Date', 'Turnover']]
            comb_data_op_new.rename({'Open': i})
            comb_data_hi_new.rename({'High': i})
            comb_data_lo_new.rename({'Low': i})
            comb_data_cl_new.rename({'Close': i})
            comb_data_vl_new.rename({'Volume': i})
            comb_data_tr_new.rename({'Turnover': i})
            # merge them
            comb_data_op = cruf.DataFrame.merge(comb_data_op, comb_data_op_new, on='Date')
            comb_data_hi = cruf.DataFrame.merge(comb_data_hi, comb_data_hi_new, on='Date')
            comb_data_lo = cruf.DataFrame.merge(comb_data_lo, comb_data_lo_new, on='Date')
            comb_data_cl = cruf.DataFrame.merge(comb_data_cl, comb_data_cl_new, on='Date')
            comb_data_vl = cruf.DataFrame.merge(comb_data_vl, comb_data_vl_new, on='Date')
            comb_data_tr = cruf.DataFrame.merge(comb_data_tr, comb_data_tr_new, on='Date')
            comb_data_op.sort('Date')
            comb_data_hi.sort('Date')
            comb_data_lo.sort('Date')
            comb_data_cl.sort('Date')
            comb_data_vl.sort('Date')
            comb_data_tr.sort('Date')
    tick_cols = comb_data_cl.tick_cols()
    for i in tick_cols:
        comb_data_cl[i] = crtf.fill(comb_data_cl[i].values)
        comb_data_op[i] = crtf.fill2(comb_data_op[i].values, comb_data_cl[i].values)
        comb_data_hi[i] = crtf.fill2(comb_data_hi[i].values, comb_data_cl[i].values)
        comb_data_lo[i] = crtf.fill2(comb_data_lo[i].values, comb_data_cl[i].values)
        comb_data_vl[i] = crtf.fill1(comb_data_vl[i].values, 0)
        comb_data_tr[i] = crtf.fill1(comb_data_tr[i].values, 0)
    # save the data
    _d_comb.store('Open', comb_data_op)
    _d_comb.store('High', comb_data_hi)
    _d_comb.store('Low', comb_data_lo)
    _d_comb.store('Close', comb_data_cl)
    _d_comb.store('Volume', comb_data_vl)
    _d_comb.store('Turnover', comb_data_tr)
    return None