Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
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: