def test_moving_stddev(self): trade_history = factory.create_trade_history( 133, [10.0, 15.0, 13.0, 12.0], [100, 100, 100, 100], timedelta(days=1), self.sim_params ) stddev = MovingStandardDev( market_aware=True, window_length=3, ) self.source = SpecificEquityTrades(event_list=trade_history) transformed = list(stddev.transform(self.source)) vals = [message[stddev.get_hash()] for message in transformed] expected = [ None, np.std([10.0, 15.0], ddof=1), np.std([10.0, 15.0, 13.0], ddof=1), np.std([15.0, 13.0, 12.0], ddof=1), ] # np has odd rounding behavior, cf. # http://docs.scipy.org/doc/np/reference/generated/np.std.html for v1, v2 in zip(vals, expected): if v1 is None: self.assertIsNone(v2) continue self.assertEquals(round(v1, 5), round(v2, 5))
def test_moving_stddev(self): trade_history = factory.create_trade_history( 133, [10.0, 15.0, 13.0, 12.0], [100, 100, 100, 100], timedelta(hours=1), self.trading_environment ) stddev = MovingStandardDev( market_aware=False, delta=timedelta(minutes=150), ) self.source = SpecificEquityTrades(event_list=trade_history) transformed = list(stddev.transform(self.source)) vals = [message.tnfm_value for message in transformed] expected = [ None, np.std([10.0, 15.0], ddof=1), np.std([10.0, 15.0, 13.0], ddof=1), np.std([15.0, 13.0, 12.0], ddof=1), ] # np has odd rounding behavior, cf. # http://docs.scipy.org/doc/np/reference/generated/np.std.html for v1, v2 in zip(vals, expected): if v1 is None: assert v2 is None continue assert round(v1, 5) == round(v2, 5)
def test_moving_stddev(self): trade_history = factory.create_trade_history(133, [10.0, 15.0, 13.0, 12.0], [100, 100, 100, 100], timedelta(hours=1), self.trading_environment) stddev = MovingStandardDev( market_aware=False, delta=timedelta(minutes=150), ) self.source = SpecificEquityTrades(event_list=trade_history) transformed = list(stddev.transform(self.source)) vals = [message.tnfm_value for message in transformed] expected = [ None, np.std([10.0, 15.0], ddof=1), np.std([10.0, 15.0, 13.0], ddof=1), np.std([15.0, 13.0, 12.0], ddof=1), ] # np has odd rounding behavior, cf. # http://docs.scipy.org/doc/np/reference/generated/np.std.html for v1, v2 in zip(vals, expected): if v1 is None: assert v2 is None continue assert round(v1, 5) == round(v2, 5)
def test_moving_stddev(self): stddev = MovingStandardDev( fields=['price', 'volume'], market_aware=False, delta=timedelta(days=3), ) trade_history = factory.create_trade_history( 133, [10.0, 15.0, 13.0, 12.0], [100, 200, 100, 200], timedelta(days=1), self.trading_environment ) self.source = SpecificEquityTrades(event_list=trade_history) transformed = list(stddev.transform(self.source)) # Output values tnfm_prices = [message.tnfm_value.price for message in transformed] tnfm_volumes = [message.tnfm_value.volume for message in transformed] expected_prices = [ None, np.std([10.0, 15.0], ddof=1), np.std([10.0, 15.0, 13.0], ddof=1), np.std([15.0, 13.0, 12.0], ddof=1), ] expected_volumes = [ None, np.std([100, 200], ddof=1), np.std([100, 200, 100], ddof=1), np.std([200, 100, 200], ddof=1), ] for v1, v2 in zip(tnfm_prices, expected_prices): if v1 is None: assert v2 is None continue self.assertAlmostEqual(v1, v2) for v1, v2 in zip(tnfm_volumes, expected_volumes): if v1 is None: assert v2 is None continue self.assertAlmostEqual(v1, v2)