def test_updated_bar_event(monkeypatch): interval = timedelta(seconds=60) bars = OHLC('exchange', 'symbol', interval) start_time = datetime( year=2012, month=1, day=1, hour=12, minute=30, second=10) with freeze_time(start_time) as time: mock_hub = Mock() monkeypatch.setattr(ohlc, 'hub', mock_hub) bars.on_tick(10) key = "{}:{}:{}:{}".format( UPDATED_BAR, 'exchange', 'symbol', interval.total_seconds()) bar = { 'open': 10, 'high': 10, 'low': 10, 'close': 10, 'start': datetime( year=2012, month=1, day=1, hour=12, minute=30, second=0) } mock_hub.publish.assert_called_once_with( key, 'exchange', 'symbol', interval, bar) time.tick(timedelta(seconds=1)) bars.on_tick(11) key = "{}:{}:{}:{}".format( UPDATED_BAR, 'exchange', 'symbol', interval.total_seconds()) bar = { 'open': 10, 'high': 11, 'low': 10, 'close': 11, 'start': datetime( year=2012, month=1, day=1, hour=12, minute=30, second=0) } assert mock_hub.publish.call_count == 2 mock_hub.publish.assert_any_call( key, 'exchange', 'symbol', interval, bar)
def test_first_bar(interval): bars = OHLC('exchange', 'symbol', interval) start = datetime.utcnow() with freeze_time(start): bars.on_tick(10) bars = bars.bars() assert 1 == len(bars) assert_bar(bars[0], 10, 10, 10, 10, start, interval)
def test_second_bar(interval): bars = OHLC('exchange', 'symbol', interval) start = datetime.utcnow() with freeze_time(start) as time: initial = datetime.utcnow() # Hack bars.on_tick(10) time.tick(delta=interval) bars.on_tick(11) bars = bars.bars() assert 2 == len(bars) assert_bar( bars[1], 10, 11, 10, 11, initial + interval, interval)
def test_max_bars(interval): bars = OHLC('exchange', 'symbol', interval, max_bars=3) start = datetime.utcnow() with freeze_time(start) as time: for _ in range(3): bars.on_tick(10) time.tick(delta=interval) assert 3 == len(bars.bars(n=100)) bars.on_tick(12) assert 3 == len(bars.bars(n=100)) bars.on_tick(12) assert 3 == len(bars.bars(n=100))
def test_no_bars(interval): bars = OHLC('exchange', 'symbol', interval) assert [] == bars.bars()