def run_livefeed(file: str, bar_type: str, threshold: int, exchange_name: str, pair: str) -> None: hub = Hub() bar_generator = new_bar_generator(bar_type, hub, threshold) filename = 'output-live.csv' bar_writer = CSVBarWriter(hub, filename, dump_wait=False) broker = BacktestBroker(hub) strategy = read_and_run_strategy_file(file)(hub, broker) exchange = getattr(exchanges, exchange_name) trade_processor = FeedProcessor(hub, exchange, pair) trade_processor.run()
def test_mullti_strategy_on_new_bar_is_called(): hub = Hub() publisher = Publisher(hub, 'test-publisher') trade = Trade(12345, price=1.0, amount=1.0) bar = Bar(trade) exchange = 'test' market = Markets.BTCEUR broker = BacktestBroker(hub) strat = NewBarTestMultiStrategy(hub, broker) publisher.publish([f'{exchange}-{market}', 'new-bar'], bar) assert strat.on_new_bar_called
def test_multi_strategy_stores_bars(): hub = Hub() publisher = Publisher(hub, 'test-publisher') bars = [1, 2, 3] exchange = 'test' market = Markets.BTCUSD broker = BacktestBroker(hub) strat = NewBarTestMultiStrategy(hub, broker) [ publisher.publish([f'{exchange}-{market}', 'new-bar'], bar) for bar in bars ] assert strat.bars['test-BTCUSD'] == bars
def test_tick_bar_generation_after_threshold(): hub = Hub() publisher = Publisher(hub, 'test-publisher') generator = TickBarGenerator(hub, threshold=3) subscriber = Subscriber(hub, 'test-subscriber') bars = [] def new_bar_handler(key, bar): bars.append(bar) subscriber.add_sync_listener(events.AnyNewBar, new_bar_handler) assert len(bars) == 0 for i in range(5): trade = Trade(12345, price=1.0, amount=1.0) publisher.publish(['test-BTCUSD', 'new-trade'], trade) assert len(bars) == 1
def hub() -> Hub: return Hub()
def hub(): return Hub()