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