def get_alt_price_daily(): univ_ib_op = cr_cret.retrieve(univ_ib_eqidx_ext + "Open") univ_ib_cl = cr_cret.retrieve(univ_ib_eqidx_ext + "Close") tick_cols = univ_ib_cl.tick_cols() univ_ib_gd = cr_cret.retrieve(univ_ib_eqidx_ext + "ExchOpen") univ_ib_ap1 = univ_ib_cl.copy() univ_ib_ap2 = univ_ib_cl.copy() univ_ib_ap3 = univ_ib_cl.copy() for i in tick_cols: z = np.where(univ_ib_gd[i].values.astype("int") == 1)[0] if z.shape[0] > 0: univ_ib_cl_ = univ_ib_cl[i].values[z] univ_ib_op_ = univ_ib_op[i].values[z] univ_ib_ap1_ = filt.smth_price(univ_ib_op_, univ_ib_cl_, 120, 10, 10, 6, 1, 13) # eats up 159 data points univ_ib_ap2_ = filt.smth_price(univ_ib_op_, univ_ib_cl_, 180, 15, 10, 8, 1, 13) # eats up 226 data points univ_ib_ap3_ = filt.smth_price(univ_ib_op_, univ_ib_cl_, 140, 30, 10, 8, 1, 16) # eats up 204 data points univ_ib_ap1[i] = np.nan univ_ib_ap2[i] = np.nan univ_ib_ap3[i] = np.nan univ_ib_ap1[list(z), i] = univ_ib_ap1_ univ_ib_ap2[list(z), i] = univ_ib_ap2_ univ_ib_ap3[list(z), i] = univ_ib_ap3_ univ_ib_ap1[i] = filt.fill(univ_ib_ap1[i].values) univ_ib_ap2[i] = filt.fill(univ_ib_ap2[i].values) univ_ib_ap3[i] = filt.fill(univ_ib_ap3[i].values) else: univ_ib_ap1[i] = np.nan univ_ib_ap2[i] = np.nan univ_ib_ap3[i] = np.nan cr_cret.store(univ_ib_eqidx_ext + "AdjSer20D", univ_ib_ap1) cr_cret.store(univ_ib_eqidx_ext + "AdjSer30D", univ_ib_ap2) cr_cret.store(univ_ib_eqidx_ext + "AdjSer40D", univ_ib_ap3) return None
def get_alt_price_weekly(): univ_ib_op = cr_cret.retrieve(univ_ib_eqidx_ext + "Open") univ_ib_cl = cr_cret.retrieve(univ_ib_eqidx_ext + "Close") tick_cols = univ_ib_cl.tick_cols() univ_ib_gd = cr_cret.retrieve(univ_ib_eqidx_ext + "ExchOpen") univ_ib_ap1 = univ_ib_cl.copy() univ_ib_ap2 = univ_ib_cl.copy() univ_ib_ap3 = univ_ib_cl.copy() for i in tick_cols: # i = 'SP500' z = np.where(univ_ib_gd[i].values.astype("int") == 1)[0] if z.shape[0] > 0: univ_ib_cl_ = univ_ib_cl[i].values[z] univ_ib_op_ = univ_ib_op[i].values[z] # univ_ib_dt_ = univ_ib_cl['Date'].values[z] # temp # convert to weekly nb = filt.fst_nan(univ_ib_cl_) ne = len(univ_ib_cl_) univ_ib_ord = np.ones(ne) * 99 univ_ib_ap1_ = np.zeros(ne) * np.nan univ_ib_ap2_ = np.zeros(ne) * np.nan univ_ib_ap3_ = np.zeros(ne) * np.nan for k in range(0, 5): univ_ib_ord[nb + 4 + k : ne : 5] = k univ_ib_ord = univ_ib_ord.astype("int") for k in range(0, 5): # k = 0 zk = np.where(univ_ib_ord == k)[0] univ_ib_cl__ = univ_ib_cl_[list(zk)] univ_ib_op__ = univ_ib_op_[list(zk - 4)] univ_ib_ap1__ = filt.smth_price(univ_ib_op__, univ_ib_cl__, 120, 10, 10, 6, 1, 13) univ_ib_ap2__ = filt.smth_price(univ_ib_op__, univ_ib_cl__, 180, 15, 10, 8, 1, 13) univ_ib_ap3__ = filt.smth_price(univ_ib_op__, univ_ib_cl__, 140, 30, 10, 8, 1, 16) univ_ib_ap1_[list(zk)] = univ_ib_ap1__ univ_ib_ap2_[list(zk)] = univ_ib_ap2__ univ_ib_ap3_[list(zk)] = univ_ib_ap3__ univ_ib_ap1_ = filt.sma(univ_ib_ap1_, 5) univ_ib_ap2_ = filt.sma(univ_ib_ap2_, 5) univ_ib_ap3_ = filt.sma(univ_ib_ap3_, 5) univ_ib_ap1[list(z), i] = univ_ib_ap1_ univ_ib_ap2[list(z), i] = univ_ib_ap2_ univ_ib_ap3[list(z), i] = univ_ib_ap3_ else: univ_ib_ap1[i] = np.nan univ_ib_ap2[i] = np.nan univ_ib_ap3[i] = np.nan cr_cret.store(univ_ib_eqidx_ext + "AdjSer20W", univ_ib_ap1) cr_cret.store(univ_ib_eqidx_ext + "AdjSer30W", univ_ib_ap2) cr_cret.store(univ_ib_eqidx_ext + "AdjSer40W", univ_ib_ap3)
def _get_alt_price(i): print('Calculating alternating prices for %s ' % i) univ_ib_ret = mkt_retrieve(i, 'Stats', 'Returns') univ_ib_op = univ_ib_ret['Open'].values univ_ib_cl = univ_ib_ret['Close'].values univ_ib_sprc = univ_ib_ret[['Contract', 'Date']] for smth in _smth: # range(6, _smth + 1, 3) _sp = smth_param(smth) for days in range(1, _days+1): nb = filt.fst_nan(univ_ib_cl) ne = len(univ_ib_cl) univ_ib_ord = np.ones(ne, dtype=int) * 99 univ_ib_ap = np.zeros(ne) * np.nan for k in range(0, days): univ_ib_ord[nb + days + k - 1:ne:days] = k for k in range(0, days): zk = np.where(univ_ib_ord == k)[0] cl_ = univ_ib_cl[list(zk)] op_ = univ_ib_op[list(zk - days + 1)] univ_ib_ap[list(zk)] = filt.smth_price(op_, cl_, _sp[0], _sp[1], _sp[2], _sp[3], 0, _sp[4]) univ_ib_ap = filt.sma(univ_ib_ap, days) univ_ib_ap = filt.fill(univ_ib_ap) if (days < 10) and (smth < 10): univ_ib_sprc['D0'+str(days)+'S0'+str(smth)] = univ_ib_ap elif (days >= 10) and (smth < 10): univ_ib_sprc['D'+str(days)+'S0'+str(smth)] = univ_ib_ap elif (days < 10) and (smth >= 10): univ_ib_sprc['D0'+str(days)+'S'+str(smth)] = univ_ib_ap else: univ_ib_sprc['D'+str(days)+'S'+str(smth)] = univ_ib_ap del univ_ib_sprc['Contract'] mkt_store(i, 'Stats', 'AltReturns', univ_ib_sprc)
def get_best_fit(k): # for k in range(5, 16): good1k = (k - 1) / (k + 1) good1k_ = k / (k + 2) print('Looking for EMA %s equivalent with autocorr = %s' % (str(k), str(good1k))) # metric = [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan] good2b = np.nan for n1 in range(10, 40, 5): # range(20, 160, 20): # n1 = 160 # print('Processing n1 = %s' % str(n1)) for n2 in range(5, 50, 5): # n2 = 100 for f1 in range(10, 60, 5): #range(10, 300, 10): # range(2, 100, 2): # f1 = 200 for f2 in range(6, 48, 2): # range(2, 36, 2): # f2 = 28 for lthresh in range(0, 1, 1): # (0, 12, 1) # lthresh = 1 for oshpr in range(7, 30, 1): # oshpr = 28 _loss = n1 + n2 + f1 + f2 + oshpr if _loss <= 250: # 150 if np.isnan(good2b) | (~np.isnan(good2b) & (good2b > 0.0001)): # print(n1, n2, f1, f2, lthresh, oshpr) test1p = filt.smth_price(test3p_, test2p_, n1, n2, f1, f2, lthresh, oshpr) test1p, test2p, test3p = reduce_nonnan(test1p, test2p_, test3p_) # test1r = good1 = autocorr(filt.ret(test1p)[-7000:]) if (good1 >= good1k) & (good1 < good1k_): # get the overshoot measure xoc_mx = test1p-np.maximum(test2p, test3p) xoc_mn = test1p-np.minimum(test2p, test3p) good2_ = np.abs(200*((xoc_mx>0)*xoc_mx+(xoc_mn<0)*xoc_mn)/(test2p+test3p)) good2 = np.mean(good2_[-7000:])*2/(k+1)+np.median(good2_[-7000:])*(k-1)/(k+1) good3 = good2 good2 = good2*np.sqrt(_loss) if np.isnan(good2b): metric = [k, n1, n2, f1, f2, lthresh, oshpr, good1, good3, _loss, good2] good2b = good2 print(metric) elif good2 < good2b: metric = [k, n1, n2, f1, f2, lthresh, oshpr, good1, good3, _loss, good2] good2b = good2 print(metric) return None
x_ = [] for i in range(b1, e1): for j in range(i, e2): x_.append((i, j)) return x_ n_range = get_permut(5, 50, 50) f_range = get_permut(5, 70, 70) results = {} for n in n_range: for f in f_range: for oshpr in range(4, 40, 1): _loss = n[0]+n[1]+f[0]+f[1]+oshpr if _loss <= 250: test1p = filt.smth_price(test3p_, test2p_, n[0], n[1], f[0], f[1], 0, oshpr) test1p, test2p, test3p = reduce_nonnan(test1p, test2p_, test3p_) g1 = autocorr(filt.ret(test1p)[-7000:]) k = int((1+g1)/(1-g1)) if k > 5: xoc_mx = test1p - np.maximum(test2p, test3p) xoc_mn = test1p - np.minimum(test2p, test3p) good2_ = np.abs(200 * ((xoc_mx > 0) * xoc_mx + (xoc_mn < 0) * xoc_mn) / (test2p + test3p)) good2 = np.mean(good2_[-7000:]) * 2 / (k + 1) + np.median(good2_[-7000:]) * (k - 1) / (k + 1) good2 *= np.sqrt(_loss) if k in results.keys(): tmp = results[k] if tmp[5] > good2: results[k] = [n[0], n[1], f[0], f[1], oshpr, good2] print([k]+results[k]) else: