def testAlgoStopEntryOrder(self): symbol = Symbol.get('TEST') start_time = datetime.datetime(2015, 7, 7, 12) # symbol = algo.analysis_symbols()[0] ticks = [] ticks.append(Tick(start_time.timestamp(), 10.0, 10.1)) start_time = start_time + MarketDataPeriod.MIN_1 ticks.append(Tick(start_time.timestamp(), 11.0, 11.1)) start_time = start_time + MarketDataPeriod.MIN_1 ticks.append(Tick(start_time.timestamp(), 12.0, 12.1)) start_time = start_time + MarketDataPeriod.MIN_1 ticks.append(Tick(start_time.timestamp(), 12.3, 12.4)) start_time = start_time + MarketDataPeriod.MIN_1 ticks.append(Tick(start_time.timestamp(), 12.8, 12.9)) dataProvider = SimulatedDataProvider(symbol, ticks) order_manager = Broker(dataProvider) order_manager.subscribeSymbol(symbol) order = Order(symbol, 1, Entry(Entry.Type.STOP_ENTRY, 11.3), Direction.LONG) order_creator = OrderCreator(order_manager, symbol, order) order_manager.addPriceObserver(order_creator.handle_data) order_manager.start() self.assertEqual(0, len(order_manager.orders)) self.assertEqual(1, len(order_manager.positions)) self.assertEqual(State.FILLED, order.status) position = order_manager.positions[0] self.assertEqual(Position.PositionStatus.OPEN, position.status) self.assertEqual(12.1, position.entry_price)
def testTakeProfitMarketOrder(self): symbol = Symbol.get('TEST') symbol.lot_size = 1 start_time = datetime.datetime(2015, 7, 7, 12) # symbol = algo.analysis_symbols()[0] ticks = [] ticks.append(Tick(start_time.timestamp(), 10.0, 10.1)) start_time = start_time + MarketDataPeriod.MIN_1 ticks.append(Tick(start_time.timestamp(), 11.0, 11.1)) start_time = start_time + MarketDataPeriod.MIN_1 ticks.append(Tick(start_time.timestamp(), 13.0, 13.1)) dataProvider = SimulatedDataProvider(symbol, ticks) order_manager = Broker(dataProvider) order_manager.subscribeSymbol(symbol) order = Order(symbol, 1, Entry(Entry.Type.MARKET), Direction.LONG, take_profit=2) order_creator = OrderCreator(order_manager, symbol, order) order_manager.addPriceObserver(order_creator.handle_data) order_manager.addPositionObserver(lambda position, state: self.setPosition(position)) order_manager.start() self.assertEqual(0, len(order_manager.orders)) self.assertEqual(0, len(order_manager.positions)) self.assertEqual(State.FILLED, order.status) self.assertIsNotNone(self.position) self.assertEqual(Position.PositionStatus.TAKE_PROFIT, self.position.status) self.assertEqual(12.1, self.position.exit_price) self.assertAlmostEquals(2.0, self.position.points_delta())
def testAlgoExpiredOrder(self): symbol = Symbol.get('TEST') start_time = datetime.datetime(2015, 7, 7, 12) order = Order(symbol, 1, Entry(Entry.Type.STOP_ENTRY, 12.5), Direction.LONG, expire_time=datetime.timedelta(seconds=90), entry_time=start_time) # symbol = algo.analysis_symbols()[0] ticks = [] ticks.append(Tick(start_time.timestamp(), 10.0, 10.1)) start_time = start_time + MarketDataPeriod.MIN_1 ticks.append(Tick(start_time.timestamp(), 11.0, 11.1)) start_time = start_time + MarketDataPeriod.MIN_1 ticks.append(Tick(start_time.timestamp(), 12.0, 12.1)) start_time = start_time + MarketDataPeriod.MIN_1 ticks.append(Tick(start_time.timestamp(), 12.3, 12.4)) start_time = start_time + MarketDataPeriod.MIN_1 ticks.append(Tick(start_time.timestamp(), 12.8, 12.9)) dataProvider = SimulatedDataProvider(symbol, ticks) order_manager = Broker(dataProvider) order_manager.subscribeSymbol(symbol) order_creator = OrderCreator(order_manager, symbol, order) order_manager.addPriceObserver(order_creator.handle_data) order_manager.start() self.assertEqual(0, len(order_manager.orders)) self.assertEqual(0, len(order_manager.positions)) self.assertEqual(State.EXPIRED, order.status)
def main(): parser = argparse.ArgumentParser(description='Backtest an algorithm.') # parser.add_argument("-a", "--algo", dest="algo", required=True, help="algorithm identifier") parser.add_argument("-l", "--log-level", dest="log_level", choices=['DEBUG', 'INFO', 'WARN'], default="INFO", help="logging level") parser.add_argument("-p", "--show-progress", dest="show_progress", action='store_true', help="log progress") global args args = parser.parse_args() level = logging.INFO if args.log_level == 'DEBUG': level = logging.DEBUG elif args.log_level == 'INFO': level = logging.INFO elif args.log_level == 'WARN': level = logging.WARN logging.basicConfig(level=level) config = Config("config.conf") data_provider = config.data_provider venue_connection = Broker(data_provider) orderbook_persist = BacktestOrderbookPersist() order_book = OrderBook(venue_connection, orderbook_persist) market_data = MarketData(venue_connection) containers = [] # containers.append(Container(Algo(25, 10, 10), 10000, order_book, market_data)) containers.append(Container(NakedBigShadow(7, 10, 50, MarketDataPeriod.HOUR_4), 10000, order_book, market_data)) containers.append(Container(NakedBigShadow(7, 10, 50, MarketDataPeriod.DAY), 10000, order_book, market_data)) containers.append(Container(NakedBigShadow(7, 10, 60, MarketDataPeriod.DAY), 10000, order_book, market_data)) containers.append(Container(NakedBigShadow(7, 10, 70, MarketDataPeriod.DAY), 10000, order_book, market_data)) containers.append(Container(NakedBigShadow(7, 10, 80, MarketDataPeriod.DAY), 10000, order_book, market_data)) containers.append(Container(NakedBigShadow(7, 10, 90, MarketDataPeriod.DAY), 10000, order_book, market_data)) containers.append(Container(NakedBigShadow(7, 10, 100, MarketDataPeriod.DAY), 10000, order_book, market_data)) # containers.append(Container(Algo(15, 50, 100), 100000, order_book, market_data)) if args.show_progress is True: progress_bar = ProgressBar(data_provider.expected_result_count, label='Backtest') data_provider.set_progress_callback(lambda x: progress_bar.set(x)) venue_connection.start() progress_bar.complete() else: venue_connection.start() for container in containers: display_results(container)
def main(): parser = argparse.ArgumentParser(description='Backtest an algorithm.') # parser.add_argument("-a", "--algo", dest="algo", required=True, help="algorithm identifier") parser.add_argument("-l", "--log-level", dest="log_level", choices=['DEBUG', 'INFO', 'WARN'], default="INFO", help="logging level") parser.add_argument("-p", "--show-progress", dest="show_progress", action='store_true', help="log progress") global args args = parser.parse_args() level = logging.INFO if args.log_level == 'DEBUG': level = logging.DEBUG elif args.log_level == 'INFO': level = logging.INFO elif args.log_level == 'WARN': level = logging.WARN logging.basicConfig(level=level) config = Config("config.conf") data_provider = config.data_provider venue_connection = Broker(data_provider) orderbook_persist = BacktestOrderbookPersist() order_book = OrderBook(venue_connection, orderbook_persist) market_data = MarketData(venue_connection) containers = [] # containers.append(Container(Algo(25, 10, 10), 10000, order_book, market_data)) containers.append( Container(NakedBigShadow(7, 10, 50, MarketDataPeriod.HOUR_4), 10000, order_book, market_data)) containers.append( Container(NakedBigShadow(7, 10, 50, MarketDataPeriod.DAY), 10000, order_book, market_data)) containers.append( Container(NakedBigShadow(7, 10, 60, MarketDataPeriod.DAY), 10000, order_book, market_data)) containers.append( Container(NakedBigShadow(7, 10, 70, MarketDataPeriod.DAY), 10000, order_book, market_data)) containers.append( Container(NakedBigShadow(7, 10, 80, MarketDataPeriod.DAY), 10000, order_book, market_data)) containers.append( Container(NakedBigShadow(7, 10, 90, MarketDataPeriod.DAY), 10000, order_book, market_data)) containers.append( Container(NakedBigShadow(7, 10, 100, MarketDataPeriod.DAY), 10000, order_book, market_data)) # containers.append(Container(Algo(15, 50, 100), 100000, order_book, market_data)) if args.show_progress is True: progress_bar = ProgressBar(data_provider.expected_result_count, label='Backtest') data_provider.set_progress_callback(lambda x: progress_bar.set(x)) venue_connection.start() progress_bar.complete() else: venue_connection.start() for container in containers: display_results(container)