Ejemplo n.º 1
0
    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())
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
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)