def test_compare_against_oneoff_calculation(self): rw = np.cumsum(np.random.normal(0, 2, 1000)) + 100 close = DataSeries("close") close.start(self.app_context) t = datetime.datetime.now() sma = SMA(close, input_key='close', length=50) sma.start(self.app_context) result = [] for x in rw: close.add({"timestamp": t, "close": x}) result.append(sma.now('value')) t = t + datetime.timedelta(0, 3) result = np.array(result) # either apply or direct call is equivalent target = close.apply('close', start=None, end=None, func=talib.SMA, timeperiod=50) # target = talib.SMA(np.array(close.get_series('close')), timeperiod=50) result[np.isnan(result)] = 0 target[np.isnan(target)] = 0 try: np.testing.assert_almost_equal(target, result, 5) except AssertionError as e: self.fail(e.message)
def test_compare_against_oneoff_calculation(self): rw = np.cumsum(np.random.normal(0, 2, 1000)) + 100 close = DataSeries(time_series=ModelFactory.build_time_series( series_id="close")) close.start(self.app_context) t = 1 sma = SMA(inputs=close, input_keys='close', length=50) sma.start(self.app_context) result = [] for x in rw: close.add(timestamp=t, data={"close": x}) result.append(sma.now('value')) t = t + 3 result = np.array(result) # either apply or direct call is equivalent target = close.apply('close', start=None, end=None, func=talib.SMA, timeperiod=50) # target = talib.SMA(np.array(close.get_series('close')), timeperiod=50) result[np.isnan(result)] = 0 target[np.isnan(target)] = 0 try: np.testing.assert_almost_equal(target, result, 5) except AssertionError as e: self.fail(e.message)
def test_empty_at_initialize(self): close = self.app_context.inst_data_mgr.get_series("bar") close.start(self.app_context) sma = SMA(inputs=close, input_keys='close', length=3) sma.start(self.app_context) self.assertEquals(0, len(sma.get_data()))
def test_empty_at_initialize(self): close = self.app_context.inst_data_mgr.get_series("bar") close.start(self.app_context) sma = SMA(close, 'close', 3) sma.start(self.app_context) self.assertEquals(0, len(sma.get_data()))
def test_name(self): bar = self.app_context.inst_data_mgr.get_series("bar") bar.start(self.app_context) sma = SMA(bar, input_key='close', length=3) sma.start(self.app_context) self.assertEquals("SMA('bar',close,3)", sma.name) sma2 = SMA(sma, input_key='value', length=10) self.assertEquals("SMA(SMA('bar',close,3),value,10)", sma2.name)
def test_name(self): bar = self.app_context.inst_data_mgr.get_series("bar") bar.start(self.app_context) sma = SMA(inputs=bar, input_keys='close', length=3) sma.start(self.app_context) self.assertEquals("SMA(bar[close],length=3)", sma.name) sma2 = SMA(inputs=sma, input_keys='value', length=10) self.assertEquals("SMA(SMA(bar[close],length=3)[value],length=10)", sma2.name)
def test_with_multi_bar_multi_indicator_with_tail_start(self): bar0 = self.app_context.inst_data_mgr.get_series("bar0") bar1 = self.app_context.inst_data_mgr.get_series("bar1") bar0.start(self.app_context) bar1.start(self.app_context) # sma_2_bar0 = SMA(bar0, "close", 2) # sma_4_bar0 = SMA(bar0, "close", 4) # sma_3_bar1 = SMA(bar1, "close", 3) # # sma_2_bar0.start(self.app_context) # sma_4_bar0.start(self.app_context) # sma_3_bar1.start(self.app_context) # rank = Rank([sma_2_bar0, sma_3_bar1, sma_4_bar0], input_key=Indicator.VALUE) rank = Rank([ SMA(bar0, "close", 2), SMA(bar1, "close", 3), SMA(bar0, "close", 4) ], input_key=Indicator.VALUE) rank.start(self.app_context) # only start at the tail is enough t = datetime.datetime.now() bar0.add({"timestamp": t, "close": 80.0, "open": 0}) bar1.add({"timestamp": t, "close": 95.0, "open": 0}) nan_arr = np.empty([1, 3]) nan_arr[:] = np.nan # self.assertListEqual(nan_arr.tolist(), rank.now()["value"]) self.__np_assert_almost_equal(nan_arr, np.array(rank.now()["value"])) t = t + datetime.timedelta(0, 3) bar0.add({"timestamp": t, "close": 85.0, "open": 0}) bar1.add({"timestamp": t, "close": 93.0, "open": 0}) target = nan_arr target[0, 0] = 0. self.__np_assert_almost_equal(target, np.array(rank.now()["value"])) t = t + datetime.timedelta(0, 3) bar0.add({"timestamp": t, "close": 86.0, "open": 0}) bar1.add({"timestamp": t, "close": 91.0, "open": 0}) target[0, 1] = 0.5 self.__np_assert_almost_equal(target, np.array(rank.now()["value"])) t = t + datetime.timedelta(0, 3) bar0.add({"timestamp": t, "close": 90.0, "open": 0}) bar1.add({"timestamp": t, "close": 95.0, "open": 0}) target = np.array([[0.5, 1.0, 0.]]) # self.assertAlmostEqual(target.tolist(), rank.now()["value"]) self.__np_assert_almost_equal(target, np.array(rank.now()["value"]))
def test_empty_at_initialize(self): close = self.app_context.inst_data_mgr.get_series("bar") close.start(self.app_context) sma3 = SMA(inputs=close, input_keys='close', length=3) sma20 = SMA(inputs=close, input_keys='close', length=20) sma50 = SMA(inputs=close, input_keys='close', length=50) sma3.start(self.app_context) sma20.start(self.app_context) rank = Rank(inputs=[sma3, sma20, sma50], input_keys='close') rank.start(self.app_context) self.assertEquals(0, len(rank.get_data()))
def test_nan_before_size(self): bar = self.app_context.inst_data_mgr.get_series("bar") bar.start(self.app_context) sma = SMA(inputs=bar, input_keys='close', length=3) sma.start(self.app_context) t1 = 1 t2 = t1 + 3 t3 = t2 + 3 bar.add(timestamp=t1, data={"close": 2.0, "open": 0}) self.assertEquals([{'value': np.nan}], sma.get_data()) bar.add(timestamp=t2, data={"close": 2.4, "open": 1.4}) self.assertEquals([{ 'value': np.nan }, { 'value': np.nan }], sma.get_data()) bar.add(timestamp=t3, data={"close": 2.8, "open": 1.8}) self.assertEquals([{ 'value': np.nan }, { 'value': np.nan }, { 'value': 2.4 }], sma.get_data())
def test_nan_before_size(self): bar = self.app_context.inst_data_mgr.get_series("bar") bar.start(self.app_context) sma = SMA(bar, 'close', 3) sma.start(self.app_context) t1 = datetime.datetime.now() t2 = t1 + datetime.timedelta(0, 3) t3 = t2 + datetime.timedelta(0, 3) bar.add({"timestamp": t1, "close": 2.0, "open": 0}) self.assertEquals([{"timestamp": t1, 'value': np.nan, "name": "'SMA('bar',close,3)'"}], sma.get_data()) bar.add({"timestamp": t2, "close": 2.4, "open": 1.4}) self.assertEquals([{"timestamp": t1, 'value':np.nan, "name": "'SMA('bar',close,3)'"}, {"timestamp": t2, 'value':np.nan, "name": "'SMA('bar',close,3)'"}], sma.get_data()) bar.add({"timestamp": t3, "close": 2.8, "open": 1.8}) self.assertEquals([{"timestamp": t1, 'value':np.nan, "name": "'SMA('bar',close,3)'"}, {"timestamp": t2, 'value':np.nan, "name": "'SMA('bar',close,3)'"}, {"timestamp": t3, 'value': 2.4, "name": "'SMA('bar',close,3)'"}], sma.get_data())
def test_with_multi_bar_multi_indicator(self): bar0 = self.app_context.inst_data_mgr.get_series("bar0") bar1 = self.app_context.inst_data_mgr.get_series("bar1") bar0.start(self.app_context) bar1.start(self.app_context) sma_2_bar0 = SMA(bar0, "close", 2) sma_4_bar0 = SMA(bar0, "close", 4) sma_3_bar1 = SMA(bar1, "close", 3) sma_2_bar0.start(self.app_context) sma_4_bar0.start(self.app_context) sma_3_bar1.start(self.app_context) rank = Rank([sma_2_bar0, sma_3_bar1, sma_4_bar0], input_key=Indicator.VALUE) rank.start(self.app_context) t = datetime.datetime.now() bar0.add({"timestamp": t, "close": 80.0, "open": 0}) bar1.add({"timestamp": t, "close": 95.0, "open": 0}) nan_arr = np.empty([1,3]) nan_arr[:] = np.nan # self.assertListEqual(nan_arr.tolist(), rank.now()["value"]) self.__np_assert_almost_equal(nan_arr, np.array(rank.now()["value"])) t = t + datetime.timedelta(0, 3) bar0.add({"timestamp": t, "close": 85.0, "open": 0}) bar1.add({"timestamp": t, "close": 93.0, "open": 0}) target = nan_arr target[0, 0] = 0. self.__np_assert_almost_equal(target, np.array(rank.now()["value"])) t = t + datetime.timedelta(0, 3) bar0.add({"timestamp": t, "close": 86.0, "open": 0}) bar1.add({"timestamp": t, "close": 91.0, "open": 0}) target[0, 1] = 0.5 self.__np_assert_almost_equal(target.tolist(), rank.now()["value"]) # self.__np_assert_almost_equal(target, rank.now()["value"]) t = t + datetime.timedelta(0, 3) bar0.add({"timestamp": t, "close": 90.0, "open": 0}) bar1.add({"timestamp": t, "close": 95.0, "open": 0}) target = np.array([[0.5, 1.0, 0.]]) # self.assertAlmostEqual(target.tolist(), rank.now()["value"]) self.__np_assert_almost_equal(target, np.array(rank.now()["value"]))
def test_shape(self): close = self.app_context.inst_data_mgr.get_series("bar") close.start(self.app_context) sma3 = SMA(close, input_key='close', length=3) sma20 = SMA(close, input_key='close', length=20) sma50 = SMA(close, input_key='close', length=50) sma3.start(self.app_context) sma20.start(self.app_context) sma50.start(self.app_context) rank = Rank([sma3, sma20, sma50], input_key='close') rank.start(self.app_context) self.assertAlmostEqual([1, 3], rank.shape(), 5)
def test_shape(self): close = self.app_context.inst_data_mgr.get_series("bar") close.start(self.app_context) sma3 = SMA(close, input_key="close", length=3) sma20 = SMA(close, input_key="close", length=20) sma50 = SMA(close, input_key="close", length=50) sma3.start(self.app_context) sma20.start(self.app_context) sma50.start(self.app_context) rank = Rank([sma3, sma20, sma50], input_key="close") rank.start(self.app_context) try: np.testing.assert_almost_equal(np.array([1, 3]), rank.shape(), 5) except AssertionError as e: self.fail(e.message)
def test_name(self): bar = self.app_context.inst_data_mgr.get_series("bar") bar.start(self.app_context) sma3 = SMA(bar, input_key='close', length=3) sma20 = SMA(bar, input_key='close', length=20) sma50 = SMA(bar, input_key='close', length=50) sma3.start(self.app_context) sma20.start(self.app_context) sma50.start(self.app_context) rank = Rank([sma3, sma20, sma50], input_key='close') rank.start(self.app_context) self.assertEquals("Rank(SMA('bar',close,3),SMA('bar',close,20),SMA('bar',close,50),close)", rank.name) bar0 = self.app_context.inst_data_mgr.get_series("bar0") bar1 = self.app_context.inst_data_mgr.get_series("bar1") bar2 = self.app_context.inst_data_mgr.get_series("bar2") bar3 = self.app_context.inst_data_mgr.get_series("bar3") bar0.start(self.app_context) bar1.start(self.app_context) bar2.start(self.app_context) bar3.start(self.app_context) barlist = [bar0, bar1, bar2, bar3] avg = Average([bar0, bar1, bar2, bar3], input_key='close') gssum = GSSum([bar0, bar1, bar2, bar3], input_key='close') basket = MakeVector([bar0, bar1, bar2, bar3], input_key='close') # TODO: the name printed by pipeline now break the "parse" machnism so we have to review it self.assertEquals("Average('bar0','bar1','bar2','bar3',close)", avg.name) self.assertEquals("Sum('bar0','bar1','bar2','bar3',close)", gssum.name) self.assertEquals("MakeVector('bar0','bar1','bar2','bar3',close)", basket.name) bar4 = self.app_context.inst_data_mgr.get_series("bar4") bar5 = self.app_context.inst_data_mgr.get_series("bar5") bar6 = self.app_context.inst_data_mgr.get_series("bar6") bar7 = self.app_context.inst_data_mgr.get_series("bar7") basket2 = MakeVector([bar4, bar5, bar6, bar7], input_key='close') cross_basket_spread = Minus(basket2, basket)
def test_empty_at_initialize(self): close = self.app_context.inst_data_mgr.get_series("bar") close.start(self.app_context) sma3 = SMA(close, input_key='close', length=3) sma20 = SMA(close, input_key='close', length=20) sma50 = SMA(close, input_key='close', length=50) sma3.start(self.app_context) sma20.start(self.app_context) rank = Rank([sma3, sma20, sma50], input_key='close') rank.start(self.app_context) self.assertEquals(0, len(rank.get_data()))
def _start(self, app_context: Context) -> None: self.qty = self._get_stg_config("qty", 1) self.threshold = self._get_stg_config("threshold", 1) self.xiv = app_context.ref_data_mgr.get_inst('XIV', 'SMART') self.vxx = app_context.ref_data_mgr.get_inst('VXX', 'SMART') self.vxv = app_context.ref_data_mgr.get_inst('VXV', 'SMART') self.vxmt = app_context.ref_data_mgr.get_inst('VXMT', 'SMART') instruments = [self.vxx, self.xiv, self.vxmt] self.vix_close = app_context.inst_data_mgr.get_series( "Bar.%s.Time.86400" % self.vix.get_symbol()) self.xiv_close = app_context.inst_data_mgr.get_series( "Bar.%s.Time.86400" % self.xiv.get_symbol()) self.vxv_close = app_context.inst_data_mgr.get_series( "Bar.%s.Time.86400" % self.vxv.get_symbol()) self.vxmt_close = app_context.inst_data_mgr.get_series( "Bar.%s.Time.86400" % self.vxmt.get_symbol()) self.ema_60 = EMA() self.sma_fast = SMA(self.bar, 'close', 10) super(VxvVxmtRatio, self)._start(app_context)
def test_moving_average_calculation(self): bar = self.app_context.inst_data_mgr.get_series("bar") bar.start(self.app_context) sma = SMA(inputs=bar, input_keys='close', length=3) sma.start(self.app_context) t1 = 1 t2 = t1 + 3 t3 = t2 + 3 t4 = t3 + 3 t5 = t4 + 3 bar.add(timestamp=t1, data={"close": 2.0, "open": 0}) self.assertTrue(math.isnan(sma.now('value'))) bar.add(timestamp=t2, data={"close": 2.4, "open": 1.4}) self.assertTrue(math.isnan(sma.now('value'))) bar.add(timestamp=t3, data={"close": 2.8, "open": 1.8}) self.assertEquals(2.4, sma.now('value')) bar.add(timestamp=t4, data={"close": 3.2, "open": 2.2}) # self.assertEquals(2.8, sma.now('value')) self.assertAlmostEqual(2.8, sma.now('value'), places=3) bar.add(timestamp=t5, data={"close": 3.6, "open": 2.6}) self.assertAlmostEqual(3.2, sma.now('value'), places=3) # self.assertEquals(3.2, sma.now('value')) self.assertTrue(math.isnan(sma.get_by_idx(0, 'value'))) self.assertTrue(math.isnan(sma.get_by_idx(1, 'value'))) self.assertAlmostEqual(2.4, sma.get_by_idx(2, 'value'), places=3) self.assertAlmostEquals(2.8, sma.get_by_idx(3, 'value'), places=3) self.assertAlmostEquals(3.2, sma.get_by_idx(4, 'value'), places=3) self.assertTrue(math.isnan(sma.get_by_time(t1, 'value'))) self.assertTrue(math.isnan(sma.get_by_time(t2, 'value'))) self.assertAlmostEquals(2.4, sma.get_by_time(t3, 'value'), places=3) self.assertAlmostEquals(2.8, sma.get_by_time(t4, 'value'), places=3) self.assertAlmostEquals(3.2, sma.get_by_time(t5, 'value'), places=3)
def test_moving_average_calculation(self): bar = self.app_context.inst_data_mgr.get_series("bar") bar.start(self.app_context) sma = SMA(bar, input_key='close', length=3) sma.start(self.app_context) t1 = datetime.datetime.now() t2 = t1 + datetime.timedelta(0, 3) t3 = t2 + datetime.timedelta(0, 3) t4 = t3 + datetime.timedelta(0, 3) t5 = t4 + datetime.timedelta(0, 3) bar.add({"timestamp": t1, "close": 2.0, "open": 0}) self.assertTrue(math.isnan(sma.now('value'))) bar.add({"timestamp": t2, "close": 2.4, "open": 1.4}) self.assertTrue(math.isnan(sma.now('value'))) bar.add({"timestamp": t3, "close": 2.8, "open": 1.8}) self.assertEquals(2.4, sma.now('value')) bar.add({"timestamp": t4, "close": 3.2, "open": 2.2}) # self.assertEquals(2.8, sma.now('value')) self.assertAlmostEqual(2.8, sma.now('value'), places=3) bar.add({"timestamp": t5, "close": 3.6, "open": 2.6}) self.assertAlmostEqual(3.2, sma.now('value'), places=3) # self.assertEquals(3.2, sma.now('value')) self.assertTrue(math.isnan(sma.get_by_idx(0, 'value'))) self.assertTrue(math.isnan(sma.get_by_idx(1, 'value'))) self.assertAlmostEqual(2.4, sma.get_by_idx(2, 'value'), places=3) self.assertAlmostEquals(2.8, sma.get_by_idx(3, 'value'), places=3) self.assertAlmostEquals(3.2, sma.get_by_idx(4, 'value'), places=3) self.assertTrue(math.isnan(sma.get_by_time(t1, 'value'))) self.assertTrue(math.isnan(sma.get_by_time(t2, 'value'))) self.assertAlmostEquals(2.4, sma.get_by_time(t3, 'value'), places=3) self.assertAlmostEquals(2.8, sma.get_by_time(t4, 'value'), places=3) self.assertAlmostEquals(3.2, sma.get_by_time(t5, 'value'), places=3)
def test_with_multi_bar_multi_indicator(self): bar0 = self.app_context.inst_data_mgr.get_series("bar0") bar1 = self.app_context.inst_data_mgr.get_series("bar1") bar0.start(self.app_context) bar1.start(self.app_context) sma_2_bar0 = SMA(bar0, "close", 2) sma_4_bar0 = SMA(bar0, "close", 4) sma_3_bar1 = SMA(bar1, "close", 3) sma_2_bar0.start(self.app_context) sma_4_bar0.start(self.app_context) sma_3_bar1.start(self.app_context) rank = Rank([sma_2_bar0, sma_3_bar1, sma_4_bar0], input_key=Indicator.VALUE) rank.start(self.app_context) t = datetime.datetime.now() bar0.add({"timestamp": t, "close": 80.0, "open": 0}) bar1.add({"timestamp": t, "close": 95.0, "open": 0}) nan_arr = np.empty([1,3]) nan_arr[:] = np.nan self.__np_assert_almost_equal(nan_arr, rank.now()["value"]) t = t + datetime.timedelta(0, 3) bar0.add({"timestamp": t, "close": 85.0, "open": 0}) bar1.add({"timestamp": t, "close": 93.0, "open": 0}) target = nan_arr target[0, 0] = 0. self.__np_assert_almost_equal(target, rank.now()["value"]) t = t + datetime.timedelta(0, 3) bar0.add({"timestamp": t, "close": 86.0, "open": 0}) bar1.add({"timestamp": t, "close": 91.0, "open": 0}) target[0, 1] = 0.5 self.__np_assert_almost_equal(target, rank.now()["value"]) t = t + datetime.timedelta(0, 3) bar0.add({"timestamp": t, "close": 90.0, "open": 0}) bar1.add({"timestamp": t, "close": 95.0, "open": 0}) target = np.array([[0.5, 1.0, 0.]]) self.__np_assert_almost_equal(target, rank.now()["value"])
def test_shape(self): close = self.app_context.inst_data_mgr.get_series("bar") close.start(self.app_context) sma3 = SMA(inputs=close, input_keys='close', length=3) sma20 = SMA(inputs=close, input_keys='close', length=20) sma50 = SMA(inputs=close, input_keys='close', length=50) sma3.start(self.app_context) sma20.start(self.app_context) sma50.start(self.app_context) rank = Rank(inputs=[sma3, sma20, sma50], input_keys='close') rank.start(self.app_context) try: np.testing.assert_almost_equal(np.array([1, 3]), rank.shape(), 5) except AssertionError as e: self.fail(e.message)
def test_name(self): bar = self.app_context.inst_data_mgr.get_series("bar") bar.start(self.app_context) sma3 = SMA(inputs=bar, input_keys='close', length=3) sma20 = SMA(inputs=bar, input_keys='close', length=20) sma50 = SMA(inputs=bar, input_keys='close', length=50) sma3.start(self.app_context) sma20.start(self.app_context) sma50.start(self.app_context) rank = Rank(inputs=[sma3, sma20, sma50], input_keys='close') rank.start(self.app_context) self.assertEquals( "Rank(SMA(bar[close],length=3)[close],SMA(bar[close],length=20)[close],SMA(bar[close],length=50)[close],ascending=True)", rank.name) bar0 = self.app_context.inst_data_mgr.get_series("bar0") bar1 = self.app_context.inst_data_mgr.get_series("bar1") bar2 = self.app_context.inst_data_mgr.get_series("bar2") bar3 = self.app_context.inst_data_mgr.get_series("bar3") bar0.start(self.app_context) bar1.start(self.app_context) bar2.start(self.app_context) bar3.start(self.app_context) barlist = [bar0, bar1, bar2, bar3] avg = Average(inputs=barlist, input_keys='close') gssum = GSSum(inputs=barlist, input_keys='close') basket = MakeVector(inputs=barlist, input_keys='close') # TODO: the name printed by pipeline now break the "parse" machnism so we have to review it self.assertEquals( "Average(bar0[close],bar1[close],bar2[close],bar3[close],length=1)", avg.name) self.assertEquals( "Sum(bar0[close],bar1[close],bar2[close],bar3[close],length=1)", gssum.name) self.assertEquals( "MakeVector(bar0[close],bar1[close],bar2[close],bar3[close],length=1)", basket.name) bar4 = self.app_context.inst_data_mgr.get_series("bar4") bar5 = self.app_context.inst_data_mgr.get_series("bar5") bar6 = self.app_context.inst_data_mgr.get_series("bar6") bar7 = self.app_context.inst_data_mgr.get_series("bar7") basket2 = MakeVector(inputs=[bar4, bar5, bar6, bar7], input_keys='close') self.assertEquals( "MakeVector(bar4[close],bar5[close],bar6[close],bar7[close],length=1)", basket2.name) cross_basket_spread = Minus(inputs=[basket2, basket]) self.assertEquals( "Minus(MakeVector(bar4[close],bar5[close],bar6[close],bar7[close],length=1)[close],MakeVector(bar0[close],bar1[close],bar2[close],bar3[close],length=1)[close],length=1)", cross_basket_spread.name)
def test_with_multi_bar_multi_indicator(self): bar0 = self.app_context.inst_data_mgr.get_series("bar0") bar1 = self.app_context.inst_data_mgr.get_series("bar1") bar0.start(self.app_context) bar1.start(self.app_context) sma_2_bar0 = SMA(inputs=bar0, input_keys="close", length=2) sma_4_bar0 = SMA(inputs=bar0, input_keys="close", length=4) sma_3_bar1 = SMA(inputs=bar1, input_keys="close", length=3) sma_2_bar0.start(self.app_context) sma_4_bar0.start(self.app_context) sma_3_bar1.start(self.app_context) rank = Rank(inputs=[sma_2_bar0, sma_3_bar1, sma_4_bar0], input_keys=Indicator.VALUE) rank.start(self.app_context) t = 1 bar0.add(data={"timestamp": t, "close": 80.0, "open": 0}) bar1.add(data={"timestamp": t, "close": 95.0, "open": 0}) print(rank.now(keys=PipeLine.VALUE)) t = t + 3 bar0.add(data={"timestamp": t, "close": 85.0, "open": 0}) bar1.add(data={"timestamp": t, "close": 93.0, "open": 0}) print(rank.now(keys=PipeLine.VALUE)) t = t + 3 bar0.add(data={"timestamp": t, "close": 86.0, "open": 0}) bar1.add(data={"timestamp": t, "close": 91.0, "open": 0}) print(rank.now(keys=PipeLine.VALUE)) t = t + 3 bar0.add(data={"timestamp": t, "close": 90.0, "open": 0}) bar1.add(data={"timestamp": t, "close": 95.0, "open": 0}) print(rank.now(keys=PipeLine.VALUE))