Exemple #1
0
def mean_reversion_signal(data, hl, window):
    if 'mid_price' not in data.columns:
        add_mid_price(data)
    ema = pd.ewma(data['mid_price'], halflife=hl)
    std = pd.rolling_std(data['mid_price'], window=window, min_periods=0)
    data['mean_reversion_signal_{}_{}'.format(hl, window)] = (data['mid_price'] - ema) / std
    return ['mean_reversion_signal_{}_{}'.format(hl, window)]
Exemple #2
0
def dema(data, window, do_raise=True):
    if 'mid_price' not in data.columns:
        add_mid_price(data)
    colname = 'dema_{}'.format(window)
    ma = pd.ewma(data['mid_price'], halflife=window)
    data[colname] = np.concatenate([[0], np.diff(ma)])
    return [colname]
Exemple #3
0
def dma(data, window, do_raise=True):
    if 'mid_price' not in data.columns:
        add_mid_price(data)
    colname = 'dma_{}'.format(window)
    ma = pd.rolling_mean(data['mid_price'], window=window, min_periods=0)
    data[colname] = np.concatenate([[0], np.diff(ma)])
    return [colname]
Exemple #4
0
def future_profit_std(data, window, do_raise=True):
    if 'mid_price' not in data.columns:
        add_mid_price(data)
    dprice = np.concatenate([[0], np.diff(data['mid_price'].values)])
    data['profit_std_{}w+'.format(window)] = np.concatenate([
        pd.rolling_std(dprice[::-1], window=window, min_periods=0)[:0:-1], [0]
    ])
    return ['profit_std_{}w+'.format(window)]
Exemple #5
0
def dema_diffs(data, windows, do_raise=True):
    names = []
    if 'mid_price' not in data.columns:
        add_mid_price(data)
    for window in windows:
        ma = pd.ewma(data['mid_price'], halflife=window)
        data['dema_{}'.format(window)] = np.concatenate([[0], np.diff(ma)])
    for w1 in windows:
        for w2 in windows:
            if w1 > w2:
                feat_name = 'dema_diff_{}-{}'.format(w1, w2)
                data[feat_name] = data['dema_{}'.format(w1)] - data['dema_{}'.format(w2)]
                names.append(feat_name)
    return names
Exemple #6
0
def dma_diffs(data, windows, do_raise=True):
    names = []
    if 'mid_price' not in data.columns:
        add_mid_price(data)
    for window in windows:
        ma = pd.rolling_mean(data['mid_price'], window=window, min_periods=0)
        data['dma_{}'.format(window)] = np.concatenate([[0], np.diff(ma)])
    for w1 in windows:
        for w2 in windows:
            if w1 > w2:
                feat_name = 'dma_diff_{}-{}'.format(w1, w2)
                data[feat_name] = data['dma_{}'.format(w1)] - data['dma_{}'.format(w2)]
                names.append(feat_name)
    return names
Exemple #7
0
def ema_diff(data, hl):
    if 'mid_price' not in data.columns:
        add_mid_price(data)
    ema = pd.ewma(data['mid_price'], halflife=hl)
    data['ema_diff_{}'.format(hl)] = data['mid_price'] - ema
    return ['ema_diff_{}'.format(hl)]