Exemplo n.º 1
0
def test_direction_feature():
    df = pd.DataFrame([{
        'open': 1,
        'high': 9,
        'low': 1,
        'close': 1,
        'volume': 100
    }, {
        'open': 1,
        'high': 8,
        'low': 2,
        'close': 2,
        'volume': 100
    }, {
        'open': 1,
        'high': 7,
        'low': 3,
        'close': 3,
        'volume': 100
    }, {
        'open': 1,
        'high': 6,
        'low': 2,
        'close': 4,
        'volume': 100
    }, {
        'open': 1,
        'high': 5,
        'low': 1,
        'close': 5,
        'volume': 100
    }, {
        'open': 1,
        'high': 4,
        'low': 0,
        'close': 6,
        'volume': 100
    }, {
        'open': 1,
        'high': 3,
        'low': 0,
        'close': 7,
        'volume': 100
    }])
    direction_close_producer = DirectionFeatureProducer()
    close_direction_result = direction_close_producer.produce(
        df)['Y_close_direction_1']
    expected_close_direction = [1] * len(df)
    expected_close_direction[-1] = np.nan
    array_equal(close_direction_result, expected_close_direction)

    direction_low_producer = DirectionFeatureProducer(feature='low', lags=2)
    low_2_direction_result = direction_low_producer.produce(
        df)['Y_low_direction_2']
    expected_low_direction = [1, 1, 0, 0, 0, np.nan, np.nan]
    array_equal(low_2_direction_result, expected_low_direction)
Exemplo n.º 2
0
def test_fi_feature():
    ohlc_df = pd.DataFrame([{
        'open': 1,
        'high': 9,
        'low': 1,
        'close': 1,
        'volume': 100
    }, {
        'open': 1,
        'high': 8,
        'low': 1,
        'close': 2,
        'volume': 100
    }, {
        'open': 1,
        'high': 7,
        'low': 1,
        'close': 4,
        'volume': 100
    }, {
        'open': 1,
        'high': 6,
        'low': 1,
        'close': 8,
        'volume': 100
    }, {
        'open': 1,
        'high': 5,
        'low': 1,
        'close': 16,
        'volume': 100
    }, {
        'open': 1,
        'high': 4,
        'low': 1,
        'close': 32,
        'volume': 100
    }, {
        'open': 1,
        'high': 3,
        'low': 1,
        'close': 64,
        'volume': 100
    }])

    fi_producer = ForceIndexFeatureProducer(period=3)
    fi_result = fi_producer.produce(ohlc_df)

    assert 'fi_1' in fi_result
    assert 'fi_3' in fi_result

    expect_fi_1 = [np.nan, 200, 400, 800, 1600, 3200]
    array_equal(fi_result['fi_1'].values, expect_fi_1)
Exemplo n.º 3
0
def test_typical_price():
    ohlc_df = pd.DataFrame([{
        'open': 1,
        'high': 1,
        'low': 1,
        'close': 1,
        'volume': 100
    }, {
        'open': 1,
        'high': 3,
        'low': 1,
        'close': 2,
        'volume': 100
    }, {
        'open': 1,
        'high': 7,
        'low': 1,
        'close': 4,
        'volume': 100
    }])

    typical_price_producer = TypicalPriceFeatureProducer()
    typical_price_result = typical_price_producer.produce(ohlc_df)['tp'].values
    expected_typical_price = [1, 2, 4]

    assert array_equal(typical_price_result, expected_typical_price)
Exemplo n.º 4
0
def test_pct_change_producer():
    ohlc_df = pd.DataFrame([
        {'open': 1, 'high': 9, 'low': 1, 'close': 1, 'volume': 100},
        {'open': 1, 'high': 8, 'low': 1, 'close': 2, 'volume': 100},
        {'open': 1, 'high': 7, 'low': 1, 'close': 4, 'volume': 100},
        {'open': 1, 'high': 6, 'low': 1, 'close': 8, 'volume': 100},
        {'open': 1, 'high': 5, 'low': 1, 'close': 16, 'volume': 100},
        {'open': 1, 'high': 4, 'low': 1, 'close': 32, 'volume': 100},
        {'open': 1, 'high': 3, 'low': 1, 'close': 64, 'volume': 100}
    ])

    close_pct_change_producer = PercentChangeFeatureProducer()
    result_close_pct_change = close_pct_change_producer.produce(ohlc_df)['close_pct_change'].values
    expected_close_pct_change = [1] * len(result_close_pct_change)
    expected_close_pct_change[0] = np.nan
    assert array_equal(result_close_pct_change, expected_close_pct_change)

    volume_pct_change_producer = PercentChangeFeatureProducer(feature='volume')
    result_vol_pct_change = volume_pct_change_producer.produce(ohlc_df)['volume_pct_change'].values
    expected_vol_pct_change = [0] * len(result_vol_pct_change)
    expected_vol_pct_change[0] = np.nan
    assert array_equal(result_vol_pct_change, expected_vol_pct_change)
Exemplo n.º 5
0
def test_bb_feature():
    ohlc_df = pd.DataFrame([
        {'open': 1, 'high': 9, 'low': 1, 'close': 1, 'volume': 100},
        {'open': 1, 'high': 8, 'low': 1, 'close': 2, 'volume': 100},
        {'open': 1, 'high': 7, 'low': 1, 'close': 4, 'volume': 100},
        {'open': 1, 'high': 6, 'low': 1, 'close': 8, 'volume': 100},
        {'open': 1, 'high': 5, 'low': 1, 'close': 16, 'volume': 100},
        {'open': 1, 'high': 4, 'low': 1, 'close': 32, 'volume': 100},
        {'open': 1, 'high': 3, 'low': 1, 'close': 64, 'volume': 100}
    ])

    bb_producer = BollingerBandsFeatureProducer(period=3)
    bb_result = bb_producer.produce(ohlc_df)

    sma_producer = SimpleMovingAverageFeatureProducer(period=3)
    sma_result = sma_producer.produce(ohlc_df)

    assert 'bb_3_middle' in bb_result
    assert 'bb_3_upper' in bb_result
    assert 'bb_3_lower' in bb_result

    array_equal(bb_result['bb_3_middle'].values, sma_result['close_sma_3'].values)
Exemplo n.º 6
0
def test_simple_moving_average():
    ohlc_df = pd.DataFrame([{
        'open': 1,
        'high': 9,
        'low': 1,
        'close': 1,
        'volume': 100
    }, {
        'open': 1,
        'high': 8,
        'low': 1,
        'close': 2,
        'volume': 100
    }, {
        'open': 1,
        'high': 7,
        'low': 1,
        'close': 3,
        'volume': 100
    }, {
        'open': 1,
        'high': 6,
        'low': 1,
        'close': 4,
        'volume': 100
    }, {
        'open': 1,
        'high': 5,
        'low': 1,
        'close': 5,
        'volume': 100
    }, {
        'open': 1,
        'high': 4,
        'low': 1,
        'close': 6,
        'volume': 100
    }, {
        'open': 1,
        'high': 3,
        'low': 1,
        'close': 7,
        'volume': 100
    }])

    close_2_sma_provider = SimpleMovingAverageFeatureProducer(period=2)
    close_2_sma_result = close_2_sma_provider.produce(
        ohlc_df)['close_sma_2'].values
    expect_close_2_sma = [np.nan, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5]
    assert array_equal(close_2_sma_result, expect_close_2_sma)
Exemplo n.º 7
0
def test_exponential_moving_average():
    ohlc_df = pd.DataFrame([{
        'open': 1,
        'high': 9,
        'low': 1,
        'close': 1,
        'volume': 100
    }, {
        'open': 1,
        'high': 8,
        'low': 1,
        'close': 2,
        'volume': 100
    }, {
        'open': 1,
        'high': 7,
        'low': 1,
        'close': 3,
        'volume': 100
    }, {
        'open': 1,
        'high': 6,
        'low': 1,
        'close': 4,
        'volume': 100
    }, {
        'open': 1,
        'high': 5,
        'low': 1,
        'close': 5,
        'volume': 100
    }, {
        'open': 1,
        'high': 4,
        'low': 1,
        'close': 6,
        'volume': 100
    }, {
        'open': 1,
        'high': 3,
        'low': 1,
        'close': 7,
        'volume': 100
    }])
    volume_2_ema_provider = ExponentialMovingAverageFeatureProducer(
        period=2, feature='volume')
    volume_2_ema_result = volume_2_ema_provider.produce(
        ohlc_df)['volume_ema_2'].values
    expect_volume_2_ema = [100] * len(volume_2_ema_result)
    assert array_equal(volume_2_ema_result, expect_volume_2_ema)
Exemplo n.º 8
0
def test_time_lags_producer():
    ohlc_df = pd.DataFrame([
        {'open': 1, 'high': 9, 'low': 1, 'close': 1, 'volume': 100},
        {'open': 1, 'high': 8, 'low': 1, 'close': 2, 'volume': 100},
        {'open': 1, 'high': 7, 'low': 1, 'close': 3, 'volume': 100},
        {'open': 1, 'high': 6, 'low': 1, 'close': 4, 'volume': 100},
        {'open': 1, 'high': 5, 'low': 1, 'close': 5, 'volume': 100},
        {'open': 1, 'high': 4, 'low': 1, 'close': 6, 'volume': 100},
        {'open': 1, 'high': 3, 'low': 1, 'close': 7, 'volume': 100}
    ])

    close_3_producer = TimeLagsFeatureProducer(lags=3, feature='close')
    close_3_result = close_3_producer.produce(ohlc_df)['close_tlag_3'].values
    expect_result_close_3 = np.asarray([np.nan, np.nan, np.nan, 1., 2., 3., 4.])
    assert array_equal(close_3_result, expect_result_close_3)