Exemplo n.º 1
0
    def test_quote_processor(self):
        config = SimConfig()
        processor = QuoteProcessor()

        order = NewOrderRequest(cl_id='test',
                                cl_ord_id=1,
                                inst_id=1,
                                action=OrdAction.BUY,
                                type=OrdType.LIMIT,
                                qty=1000,
                                limit_price=18.5)
        quote = Quote(bid=18, ask=19, bid_size=200, ask_size=500)

        self.assertEqual(19, processor.get_price(order, quote, config))
        self.assertEqual(500, processor.get_qty(order, quote, config))

        order2 = NewOrderRequest(cl_id='test',
                                 cl_ord_id=2,
                                 inst_id=1,
                                 action=OrdAction.SELL,
                                 type=OrdType.LIMIT,
                                 qty=1000,
                                 limit_price=18.5)
        self.assertEqual(18, processor.get_price(order2, quote, config))
        self.assertEqual(200, processor.get_qty(order2, quote, config))
Exemplo n.º 2
0
    def test_stop_order_handler(self):
        handler = StopOrderHandler(self.config)

        bar1 = Bar(inst_id=1, open=20, high=21, low=19, close=20.5, vol=1000)
        bar2 = Bar(inst_id=1, open=16, high=18, low=15, close=17, vol=1000)

        # BUY
        order1 = NewOrderRequest(cl_id='test', cl_ord_id=1, inst_id=1, action=OrdAction.BUY, type=OrdType.STOP,
                                 qty=1000, stop_price=18.5)
        fill_info = handler.process_w_price_qty(order1, 18, 1000)
        self.assertFalse(handler.stop_limit_ready(order1.cl_id, order1.cl_ord_id))
        self.assertEquals(None, fill_info)

        fill_info = handler.process_w_price_qty(order1, 19, 1000)
        self.assertTrue(handler.stop_limit_ready(order1.cl_id, order1.cl_ord_id))
        self.assertEquals(19, fill_info.fill_price)
        self.assertEquals(1000, fill_info.fill_qty)

        # BUY with bar
        order2 = NewOrderRequest(cl_id='test', cl_ord_id=2, inst_id=1, action=OrdAction.BUY, type=OrdType.STOP,
                                 qty=1000, stop_price=18.5)
        fill_info = handler.process(order2, bar2)
        self.assertFalse(handler.stop_limit_ready(order2.cl_id, order2.cl_ord_id))
        self.assertEquals(None, fill_info)

        fill_info = handler.process(order2, bar1)
        self.assertTrue(handler.stop_limit_ready(order2.cl_id, order2.cl_ord_id))
        self.assertEquals(18.5, fill_info.fill_price)
        self.assertEquals(1000, fill_info.fill_qty)

        # SELL
        order3 = NewOrderRequest(cl_id='test', cl_ord_id=3, inst_id=1, action=OrdAction.SELL, type=OrdType.STOP,
                                 qty=1000, stop_price=18.5)
        fill_info = handler.process_w_price_qty(order3, 19, 1000)
        self.assertFalse(handler.stop_limit_ready(order3.cl_id, order3.cl_ord_id))
        self.assertEquals(None, fill_info)

        fill_info = handler.process_w_price_qty(order3, 18, 1000)
        self.assertTrue(handler.stop_limit_ready(order3.cl_id, order3.cl_ord_id))
        self.assertEquals(18, fill_info.fill_price)
        self.assertEquals(1000, fill_info.fill_qty)

        # SELL with bar
        order4 = NewOrderRequest(cl_id='test', cl_ord_id=4, inst_id=1, action=OrdAction.SELL, type=OrdType.STOP,
                                 qty=1000, stop_price=18.5)
        fill_info = handler.process(order4, bar1)
        self.assertFalse(handler.stop_limit_ready(order4.cl_id, order4.cl_ord_id))
        self.assertEquals(None, fill_info)

        fill_info = handler.process(order4, bar2)
        self.assertTrue(handler.stop_limit_ready(order4.cl_id, order4.cl_ord_id))
        self.assertEquals(18.5, fill_info.fill_price)
        self.assertEquals(1000, fill_info.fill_qty)
Exemplo n.º 3
0
    def test_is_done(self):
        order = Order(
            NewOrderRequest(cl_id='test',
                            cl_ord_id=1,
                            inst_id=1,
                            action=OrdAction.BUY,
                            type=OrdType.LIMIT,
                            qty=1000,
                            limit_price=18.5))
        self.assertFalse(order.is_done())

        status_update1 = OrderStatusUpdate(cl_id='test',
                                           cl_ord_id=1,
                                           ord_id=1,
                                           inst_id=1,
                                           status=OrdStatus.REJECTED)
        order.on_ord_upd(status_update1)
        self.assertTrue(order.is_done())

        order2 = Order(
            NewOrderRequest(cl_id='test',
                            cl_ord_id=2,
                            inst_id=1,
                            action=OrdAction.BUY,
                            type=OrdType.LIMIT,
                            qty=1000,
                            limit_price=18.5))
        status_update2 = OrderStatusUpdate(cl_id='test',
                                           cl_ord_id=2,
                                           ord_id=2,
                                           inst_id=1,
                                           status=OrdStatus.CANCELLED)
        order2.on_ord_upd(status_update2)
        self.assertTrue(order2.is_done())

        order3 = Order(
            NewOrderRequest(cl_id='test',
                            cl_ord_id=3,
                            inst_id=1,
                            action=OrdAction.BUY,
                            type=OrdType.LIMIT,
                            qty=1000,
                            limit_price=18.5))
        status_update3 = OrderStatusUpdate(cl_id='test',
                                           cl_ord_id=3,
                                           ord_id=3,
                                           inst_id=1,
                                           status=OrdStatus.FILLED)
        order3.on_ord_upd(status_update3)
        self.assertTrue(order3.is_done())
Exemplo n.º 4
0
    def test_update_status_with_diff_ord_id(self):
        order = Order(
            NewOrderRequest(cl_id='test',
                            cl_ord_id=1,
                            inst_id=1,
                            action=OrdAction.BUY,
                            type=OrdType.LIMIT,
                            qty=1000,
                            limit_price=18.5))
        self.assertEquals(OrdStatus.NEW, order.status)

        status_update = OrderStatusUpdate(cl_id='test',
                                          cl_ord_id=1,
                                          ord_id=2,
                                          inst_id=1,
                                          status=OrdStatus.SUBMITTED)
        order.on_ord_upd(status_update)

        status_update = OrderStatusUpdate(cl_id='test',
                                          cl_ord_id=1,
                                          ord_id=3,
                                          inst_id=1,
                                          status=OrdStatus.SUBMITTED)
        with self.assertRaises(Exception) as ex:
            order.on_ord_upd(status_update)
Exemplo n.º 5
0
 def new_order(self,
               inst_id=None,
               action=None,
               type=None,
               qty=0,
               limit_price=0,
               stop_price=0,
               tif=TIF.DAY,
               oca_tag=None,
               params=None):
     req = NewOrderRequest(timestamp=self.clock.now(),
                           cl_id=self.stg_id,
                           cl_ord_id=self.__get_next_ord_id(),
                           portf_id=self.portfolio.portf_id,
                           broker_id=self.app_config.broker_id,
                           inst_id=inst_id,
                           action=action,
                           type=type,
                           qty=qty,
                           limit_price=limit_price,
                           stop_price=stop_price,
                           tif=tif,
                           oca_tag=oca_tag,
                           params=params)
     self.ord_reqs[req.cl_ord_id] = req
     order = self.portfolio.send_order(req)
     self.orders[order.cl_ord_id] = order
     self.get_position(order.inst_id).add_order(order)
     return order
Exemplo n.º 6
0
    def test_leave_qty(self):
        order = Order(
            NewOrderRequest(cl_id='test',
                            cl_ord_id=1,
                            inst_id=1,
                            action=OrdAction.BUY,
                            type=OrdType.LIMIT,
                            qty=1000,
                            limit_price=18.5))
        self.assertEqual(1000, order.leave_qty())

        er1 = ExecutionReport(cl_id='test',
                              cl_ord_id=1,
                              ord_id=1,
                              er_id=1,
                              inst_id=1,
                              last_qty=800,
                              last_price=18.4,
                              status=OrdStatus.PARTIALLY_FILLED)
        order.on_exec_report(er1)
        self.assertEqual(200, order.leave_qty())

        er2 = ExecutionReport(cl_id='test',
                              cl_ord_id=1,
                              ord_id=1,
                              er_id=2,
                              inst_id=1,
                              last_qty=200,
                              last_price=18.4,
                              status=OrdStatus.FILLED)
        order.on_exec_report(er2)
        self.assertEqual(0, order.leave_qty())
        self.assertTrue(order.is_done())
        self.assertEquals(OrdStatus.FILLED, order.status)
Exemplo n.º 7
0
    def test_on_limit_order_immediate_fill(self):
        bar1 = Bar(inst_id=1, open=20, high=21, low=19, close=20.5, vol=1000)
        bar2 = Bar(inst_id=1, open=16, high=18, low=15, close=17, vol=1000)

        self.app_context.inst_data_mgr.on_bar(bar2)

        orders = self.simulator._get_orders()
        self.assertEqual(0, len(orders))

        order1 = NewOrderRequest(cl_id='test',
                                 cl_ord_id=1,
                                 inst_id=1,
                                 action=OrdAction.BUY,
                                 type=OrdType.LIMIT,
                                 qty=1000,
                                 limit_price=18.5)
        self.simulator.on_new_ord_req(order1)

        orders = self.simulator._get_orders()
        self.assertEqual(1, len(orders))
        self.assertEqual(1, len(orders[order1.inst_id]))
        self.assertEqual(0, len(orders[order1.inst_id][order1.cl_id]))

        self.assertEqual(2, len(self.exec_handler.exec_reports))

        exec_report = self.exec_handler.exec_reports[0]
        self.assert_exec_report(exec_report, order1.cl_id, order1.cl_ord_id, 0,
                                0, OrdStatus.SUBMITTED)

        exec_report = self.exec_handler.exec_reports[1]
        self.assert_exec_report(exec_report, order1.cl_id, order1.cl_ord_id,
                                1000, 18.5, OrdStatus.FILLED)
Exemplo n.º 8
0
    def test_position(self):
        ord_req = NewOrderRequest(cl_id='test',
                                  cl_ord_id=1,
                                  portf_id="test",
                                  broker_id="Dummy",
                                  inst_id=1,
                                  action=OrdAction.BUY,
                                  type=OrdType.LIMIT,
                                  qty=1000,
                                  limit_price=18.5)
        order1 = self.portfolio.send_order(ord_req)

        er1 = ExecutionReport(cl_id='test',
                              cl_ord_id=1,
                              ord_id=1,
                              er_id=1,
                              inst_id=1,
                              last_qty=500,
                              last_price=18.4,
                              status=OrdStatus.PARTIALLY_FILLED)

        self.app_context.order_mgr.on_exec_report(er1)

        self.assertEqual(500, order1.last_qty)
        self.assertEqual(18.4, order1.last_price)
        self.assertEqual(500, order1.filled_qty)
        self.assertEqual(18.4, order1.avg_price)
        self.assertEqual(OrdStatus.PARTIALLY_FILLED, order1.status)

        self.assertEquals(True,
                          self.portfolio.has_position(cl_id='test', inst_id=1))
        self.assertEquals(False,
                          self.portfolio.has_position(cl_id='test', inst_id=2))
        self.assertEquals(
            False, self.portfolio.has_position(cl_id='dummy', inst_id=2))
Exemplo n.º 9
0
 def test_new_order_request(self, name, serializer):
     item = NewOrderRequest(timestamp=datetime.datetime.now(), cl_id=1, cl_ord_id=2, portf_id=3, broker_id='IB',
                            inst_id=3,
                            action=OrdAction.BUY, type=OrdType.LIMIT,
                            qty=10, limit_price=16.01,
                            stop_price=17.5, tif=TIF.DAY, oca_tag="WTF", params=None)
     SerializerTest.ser_deser(name, serializer, item)
Exemplo n.º 10
0
def test_lmt_order_update_cancel(broker, inst_id=3, qty=1000, limit_price=100):
    print "### testing limit order"
    cl_ord_id = next_cl_ord_id()
    order = NewOrderRequest(cl_id=1,
                            cl_ord_id=1,
                            inst_id=inst_id,
                            action=OrdAction.BUY,
                            type=OrdType.LIMIT,
                            qty=qty,
                            limit_price=limit_price)
    broker.on_new_ord_req(order)
    time.sleep(5)

    print "### testing order update"
    order = OrderReplaceRequest(cl_id=1,
                                cl_ord_id=1,
                                type=OrdType.LIMIT,
                                qty=qty * 2,
                                limit_price=limit_price * 1.2)
    broker.on_ord_replace_req(order)
    time.sleep(5)

    print "### testing order cancel"
    broker.on_ord_cancel_req(order)
    time.sleep(5)
Exemplo n.º 11
0
    def test_order(self, name, serializer):
        nos = NewOrderRequest(timestamp=None, cl_id=None, cl_ord_id=None, portf_id=None, broker_id=None, inst_id=None,
                              action=None, type=None,
                              qty=0, limit_price=0,
                              stop_price=0, tif=TIF.DAY, oca_tag=None, params=None)

        item = Order(nos=nos)
        SerializerTest.ser_deser(name, serializer, item)
Exemplo n.º 12
0
def test_mkt_order(broker, inst_id=3, action=OrdAction.BUY, qty=1000):
    print "### testing market order"
    cl_ord_id = next_cl_ord_id()
    order = NewOrderRequest(cl_ord_id=cl_ord_id,
                            inst_id=inst_id,
                            action=action,
                            type=OrdType.MARKET,
                            qty=1000)
    broker.on_new_ord_req(order)
    time.sleep(10)
Exemplo n.º 13
0
    def test_add_order(self):
        position = Position(1)
        self.assertEquals(0, position.filled_qty())
        self.assertEquals(0, len(position.all_orders()))

        order1 = Order(
            NewOrderRequest(cl_id='test',
                            cl_ord_id=1,
                            inst_id=1,
                            action=OrdAction.BUY,
                            type=OrdType.LIMIT,
                            qty=1000,
                            limit_price=18.5))
        position.add_order(order1)

        self.assertEquals(1000, position.ordered_qty())
        self.assertEquals(1, len(position.all_orders()))

        order2 = Order(
            NewOrderRequest(cl_id='test',
                            cl_ord_id=2,
                            inst_id=1,
                            action=OrdAction.BUY,
                            type=OrdType.LIMIT,
                            qty=1000,
                            limit_price=18.5))
        position.add_order(order2)

        self.assertEquals(2000, position.ordered_qty())
        self.assertEquals(2, len(position.all_orders()))

        order3 = Order(
            NewOrderRequest(cl_id='test',
                            cl_ord_id=3,
                            inst_id=1,
                            action=OrdAction.SELL,
                            type=OrdType.LIMIT,
                            qty=1200,
                            limit_price=18.5))
        position.add_order(order3)

        self.assertEquals(800, position.ordered_qty())
        self.assertEquals(3, len(position.all_orders()))
Exemplo n.º 14
0
 def test_is_active(self):
     order = Order(
         NewOrderRequest(cl_id='test',
                         cl_ord_id=1,
                         inst_id=1,
                         action=OrdAction.BUY,
                         type=OrdType.LIMIT,
                         qty=1000,
                         limit_price=18.5))
     self.assertTrue(order.is_active())
Exemplo n.º 15
0
def test_save_orders():
    context = get_default_app_context()

    store = context.provider_mgr.get(DataStore.Mongo)
    store.start()

    ord_mrg = context.order_mgr
    ord_mrg.start()

    order = ord_mrg.send_order(
        NewOrderRequest(cl_id='test_stg',
                        cl_ord_id=1,
                        inst_id=1,
                        portf_id='test_porf',
                        action=OrdAction.BUY,
                        type=OrdType.LIMIT,
                        qty=1000,
                        limit_price=18.5))
    order = ord_mrg.send_order(
        NewOrderRequest(cl_id='test_stg',
                        cl_ord_id=2,
                        inst_id=1,
                        portf_id='test_porf',
                        action=OrdAction.BUY,
                        type=OrdType.LIMIT,
                        qty=1000,
                        limit_price=18.5))

    before = ord_mrg.all_items()

    ord_mrg.stop()
    ord_mrg.start()

    after = ord_mrg.all_items()

    print before
    print after

    p1 = Portfolio(portf_id='test_porf', cash=1000, app_context=context)
    p1.start()

    print "all"
    print p1.all_orders()
Exemplo n.º 16
0
    def test_limit_order_handler(self):
        handler = LimitOrderHandler(self.config)

        bar1 = Bar(inst_id=1, open=20, high=21, low=19, close=20.5, vol=1000)
        bar2 = Bar(inst_id=1, open=16, high=18, low=15, close=17, vol=1000)

        # BUY
        order = NewOrderRequest(cl_id='test', cl_ord_id=1, inst_id=1, action=OrdAction.BUY, type=OrdType.LIMIT,
                                qty=1000, limit_price=18.5)
        fill_info = handler.process_w_price_qty(order, 20, 1000)
        self.assertEquals(None, fill_info)

        fill_info = handler.process_w_price_qty(order, 18, 1000)
        self.assertEquals(18.5, fill_info.fill_price)
        self.assertEquals(1000, fill_info.fill_qty)

        # BUY with bar
        fill_info = handler.process(order, bar1)
        self.assertEquals(None, fill_info)

        fill_info = handler.process(order, bar2)
        self.assertEquals(18.5, fill_info.fill_price)
        self.assertEquals(1000, fill_info.fill_qty)

        # SELL
        order2 = NewOrderRequest(cl_id='test', cl_ord_id=2, inst_id=1, action=OrdAction.SELL, type=OrdType.LIMIT,
                                 qty=1000,
                                 limit_price=18.5)
        fill_info = handler.process_w_price_qty(order2, 18, 1000)
        self.assertEquals(None, fill_info)

        fill_info = handler.process_w_price_qty(order2, 20, 1000)
        self.assertEquals(18.5, fill_info.fill_price)
        self.assertEquals(1000, fill_info.fill_qty)

        # SELL with bar
        fill_info = handler.process(order2, bar2)
        self.assertEquals(None, fill_info)

        fill_info = handler.process(order2, bar1)
        self.assertEquals(18.5, fill_info.fill_price)
        self.assertEquals(1000, fill_info.fill_qty)
Exemplo n.º 17
0
    def test_position(self):

        ord_req1 = NewOrderRequest(cl_id='test', cl_ord_id=1, portf_id="test", broker_id="Dummy", inst_id=1,
                                   action=OrdAction.BUY, type=OrdType.LIMIT, qty=1000, limit_price=18.5)
        ord_req2 = NewOrderRequest(cl_id='test', cl_ord_id=2, portf_id="test", broker_id="Dummy", inst_id=1,
                                   action=OrdAction.BUY, type=OrdType.LIMIT, qty=1800, limit_price=18.2)

        self.assertEqual(0, len(self.portfolio.positions))
        self.assertEqual(100000, self.portfolio.cash)
        self.assertEqual(0, (self.portfolio.performance_series.now("total_equity")))

        order1 = self.portfolio.send_order(ord_req1)
        self.check_order(self.portfolio, [order1], {1: (1000, 0)})
        self.assertEqual(100000, self.portfolio.cash)
        self.assertEqual(0, (self.portfolio.performance_series.now("total_equity")))

        order2 = self.portfolio.send_order(ord_req2)
        self.check_order(self.portfolio, [order1, order2], {1: (2800, 0)})
        self.assertEqual(100000, self.portfolio.cash)
        self.assertEqual(0, (self.portfolio.performance_series.now("total_equity")))
Exemplo n.º 18
0
    def test_market_order_handler(self):
        handler = MarketOrderHandler(self.config)

        order = NewOrderRequest(cl_id='test', cl_ord_id=1, inst_id=1, action=OrdAction.BUY, type=OrdType.LIMIT,
                                qty=1000, limit_price=18.5)

        quote = Quote(inst_id=1, bid=18, ask=19, bid_size=200, ask_size=500)
        trade = Trade(inst_id=1, price=20, size=200)

        fill_info = handler.process_w_price_qty(order, 18, 500)
        self.assertEquals(18, fill_info.fill_price)
        self.assertEquals(500, fill_info.fill_qty)
Exemplo n.º 19
0
    def test_is_sell(self):
        order = Order(
            NewOrderRequest(cl_id='test',
                            cl_ord_id=1,
                            inst_id=1,
                            action=OrdAction.SELL,
                            type=OrdType.LIMIT,
                            qty=1000,
                            limit_price=18.5))
        self.assertFalse(order.is_buy())
        self.assertTrue(order.is_sell())

        order = Order(
            NewOrderRequest(cl_id='test',
                            cl_ord_id=1,
                            inst_id=1,
                            action=OrdAction.SSHORT,
                            type=OrdType.LIMIT,
                            qty=1000,
                            limit_price=18.5))
        self.assertFalse(order.is_buy())
        self.assertTrue(order.is_sell())
Exemplo n.º 20
0
    def test_exec_report(self):
        order = Order(
            NewOrderRequest(cl_id='test',
                            cl_ord_id=1,
                            inst_id=1,
                            action=OrdAction.BUY,
                            type=OrdType.LIMIT,
                            qty=1000,
                            limit_price=18.5))
        self.assertEqual(1000, order.leave_qty())
        self.assertEqual(0, len(order.get_events(ExecutionReport)))

        er1 = ExecutionReport(cl_id='test',
                              cl_ord_id=1,
                              ord_id=1,
                              er_id=1,
                              inst_id=1,
                              last_qty=800,
                              last_price=18.4,
                              status=OrdStatus.PARTIALLY_FILLED)
        order.on_exec_report(er1)
        self.assertEqual(1, len(order.get_events(ExecutionReport)))
        self.assertTrue(er1 in order.get_events(ExecutionReport))

        self.assertEqual(er1.ord_id, order.broker_ord_id)
        self.assertEqual(800, order.last_qty)
        self.assertAlmostEqual(18.4, order.last_price)
        self.assertEqual(800, order.filled_qty)
        self.assertAlmostEqual(18.4, order.avg_price)
        self.assertEqual(OrdStatus.PARTIALLY_FILLED, order.status)

        er2 = ExecutionReport(cl_id='test',
                              cl_ord_id=1,
                              ord_id=1,
                              er_id=2,
                              inst_id=1,
                              last_qty=200,
                              last_price=18.4,
                              status=OrdStatus.FILLED)
        order.on_exec_report(er2)
        self.assertEqual(2, len(order.get_events(ExecutionReport)))
        self.assertTrue(er1 in order.get_events(ExecutionReport))
        self.assertTrue(er2 in order.get_events(ExecutionReport))

        self.assertEqual(er2.ord_id, order.broker_ord_id)
        self.assertEqual(200, order.last_qty)
        self.assertAlmostEqual(18.4, order.last_price)
        self.assertEqual(1000, order.filled_qty)
        self.assertAlmostEqual(18.4, order.avg_price)
        self.assertEqual(OrdStatus.FILLED, order.status)
Exemplo n.º 21
0
    def test_add_order_with_diff_inst(self):
        position = Position(1)
        order1 = Order(
            NewOrderRequest(cl_id='test',
                            cl_ord_id=1,
                            inst_id=1,
                            action=OrdAction.BUY,
                            type=OrdType.LIMIT,
                            qty=1000,
                            limit_price=18.5))
        order2 = Order(
            NewOrderRequest(cl_id='test',
                            cl_ord_id=2,
                            inst_id=2,
                            action=OrdAction.BUY,
                            type=OrdType.LIMIT,
                            qty=1000,
                            limit_price=18.5))

        position.add_order(order1)

        with self.assertRaises(RuntimeError) as ex:
            position.add_order(order2)
Exemplo n.º 22
0
def test_save():
    context = get_default_app_context()

    store = context.provider_mgr.get(DataStore.Mongo)
    store.start(app_context=context)

    stg_mgr = context.stg_mgr
    stg_mgr.start(app_context=context)

    portf_mgr = context.portf_mgr
    portf_mgr.start(app_context=context)

    ord_mrg = context.order_mgr
    ord_mrg.start(app_context=context)

    p1 = portf_mgr.new_portfolio(portf_id=1, cash=1000)
    p2 = portf_mgr.new_portfolio(portf_id=2, cash=1000)
    p1.start(app_context=context)
    p2.start(app_context=context)

    stg1 = stg_mgr.new_stg(
        stg_id='test1', stg_cls='algotrader.strategy.ema_strategy.EMAStrategy')
    stg2 = stg_mgr.new_stg(
        stg_id='test2', stg_cls='algotrader.strategy.ema_strategy.EMAStrategy')
    stg1.start(app_context=context)
    stg2.start(app_context=context)

    nos = NewOrderRequest(cl_id='test1',
                          cl_ord_id='1',
                          inst_id=1,
                          portf_id='test_porf',
                          action=OrdAction.BUY,
                          type=OrdType.LIMIT,
                          qty=1000,
                          limit_price=18.5)
    order = ord_mrg.send_order(nos)

    stg1.ord_reqs[nos.cl_ord_id] = nos
    stg1.orders[order.cl_ord_id] = order
    stg1.add_position(nos.inst_id, nos.cl_id, nos.cl_ord_id, nos.qty)
    stg1.update_position_price(time=0, inst_id=nos.inst_id, price=100)

    print portf_mgr.get(1)
    print portf_mgr.get(2)

    print stg_mgr.get('test1')
    print stg_mgr.get('test2')

    print ord_mrg.all_orders()
Exemplo n.º 23
0
def test_save_strategies():
    print "test_save_strategies"
    context = get_default_app_context()

    store = context.provider_mgr.get(DataStore.Mongo)
    store.start(app_context=context)

    stg_mgr = context.stg_mgr
    stg_mgr.start(app_context=context)
    stg_mgr.reset()

    stg1 = stg_mgr.new_stg(trading_config=BacktestingConfig(
        id='1',
        stg_id='test1',
        stg_cls='algotrader.strategy.ema_strategy.EMAStrategy'))

    ord_mrg = context.order_mgr
    ord_mrg.start(app_context=context)

    nos = NewOrderRequest(cl_id='test1',
                          cl_ord_id='1',
                          inst_id=1,
                          portf_id='test_porf',
                          action=OrdAction.BUY,
                          type=OrdType.LIMIT,
                          qty=1000,
                          limit_price=18.5)
    order = ord_mrg.send_order(nos)

    stg1.ord_reqs[nos.cl_ord_id] = nos
    stg1.orders[order.cl_ord_id] = order
    stg1.add_position(nos.inst_id, nos.cl_id, nos.cl_ord_id, nos.qty)
    stg1.update_position_price(time=0, inst_id=nos.inst_id, price=100)

    stg2 = stg_mgr.new_stg(trading_config=BacktestingConfig(
        id='2',
        stg_id='test2',
        stg_cls='algotrader.strategy.ema_strategy.EMAStrategy'))

    before = stg_mgr.get('test1')

    stg_mgr.stop()

    stg_mgr.start(app_context=context)
    after = stg_mgr.get('test1')
    after.start(app_context=context)

    print "before %s" % MapSerializer.serialize(before)
    print "after %s" % MapSerializer.serialize(after)
Exemplo n.º 24
0
    def test_trader_processor(self):
        config = SimConfig()
        processor = TradeProcessor()

        order = NewOrderRequest(cl_id='test',
                                cl_ord_id=1,
                                inst_id=1,
                                action=OrdAction.BUY,
                                type=OrdType.LIMIT,
                                qty=1000,
                                limit_price=18.5)
        trade = Trade(price=20, size=200)

        self.assertEqual(20, processor.get_price(order, trade, config))
        self.assertEqual(200, processor.get_qty(order, trade, config))
Exemplo n.º 25
0
 def test_new_order_request(self, name, datastore):
     persistable = NewOrderRequest(timestamp=clock.now(),
                                   cl_id=1,
                                   cl_ord_id=2,
                                   portf_id=3,
                                   broker_id='IB',
                                   inst_id=3,
                                   action=OrdAction.BUY,
                                   type=OrdType.LIMIT,
                                   qty=10,
                                   limit_price=16.01,
                                   stop_price=17.5,
                                   tif=TIF.DAY,
                                   oca_tag="WTF",
                                   params=None)
     DataStoreTest.save_load(name, persistable, datastore,
                             datastore.save_new_order_req, 'new_order_reqs')
Exemplo n.º 26
0
    def test_on_exec_report(self):

        ord_req = NewOrderRequest(cl_id='test', cl_ord_id=1, portf_id="test", broker_id="Dummy", inst_id=1,
                                  action=OrdAction.BUY, type=OrdType.LIMIT, qty=1000, limit_price=18.5)
        order1 = self.portfolio.send_order(ord_req)

        er1 = ExecutionReport(cl_id='test', cl_ord_id=1, ord_id=1, er_id=1, inst_id=1, last_qty=500, last_price=18.4,
                              status=OrdStatus.PARTIALLY_FILLED)

        self.app_context.order_mgr.on_exec_report(er1)

        self.assertEqual(500, order1.last_qty)
        self.assertEqual(18.4, order1.last_price)
        self.assertEqual(500, order1.filled_qty)
        self.assertEqual(18.4, order1.avg_price)
        self.assertEqual(OrdStatus.PARTIALLY_FILLED, order1.status)

        self.check_order(self.portfolio, [order1], {1: (1000, 500)})

        expected_cash = 100000 - 500 * 18.4
        expected_stock_value = 500 * 18.4
        expected_total_equity = expected_cash + expected_stock_value

        self.assertEqual(expected_cash, self.portfolio.cash)
        self.assertEqual(expected_stock_value, self.portfolio.performance_series.now('stock_value'))
        self.assertEqual(expected_total_equity, self.portfolio.performance_series.now('total_equity'))

        er2 = ExecutionReport(cl_id='test', cl_ord_id=1, ord_id=1, er_id=2, inst_id=1, last_qty=500, last_price=18.2,
                              status=OrdStatus.FILLED)
        self.app_context.order_mgr.on_exec_report(er2)
        self.assertEqual(500, order1.last_qty)
        self.assertEqual(18.2, order1.last_price)
        self.assertEqual(1000, order1.filled_qty)
        self.assertEqual(18.3, order1.avg_price)
        self.assertEqual(OrdStatus.FILLED, order1.status)

        self.check_order(self.portfolio, [order1], {1: (1000, 1000)})

        expected_cash = 100000 - 500 * 18.4 - 500 * 18.2
        expected_stock_value = 1000 * 18.2
        expected_total_equity = expected_cash + expected_stock_value

        self.assertEqual(expected_cash, self.portfolio.cash)
        self.assertEqual(expected_stock_value, self.portfolio.performance_series.now('stock_value'))
        self.assertEqual(expected_total_equity, self.portfolio.performance_series.now('total_equity'))
Exemplo n.º 27
0
 def test_order(self, name, datastore):
     nos = NewOrderRequest(timestamp=None,
                           cl_id=None,
                           cl_ord_id=None,
                           portf_id=None,
                           broker_id=None,
                           inst_id=None,
                           action=None,
                           type=None,
                           qty=0,
                           limit_price=0,
                           stop_price=0,
                           tif=TIF.DAY,
                           oca_tag=None,
                           params=None)
     persistable = Order(nos=nos)
     DataStoreTest.save_load(name, persistable, datastore,
                             datastore.save_order, 'orders')
Exemplo n.º 28
0
    def test_bar_processor(self):
        config = SimConfig()
        processor = BarProcessor()

        order = NewOrderRequest(cl_id='test',
                                cl_ord_id=1,
                                inst_id=1,
                                action=OrdAction.BUY,
                                type=OrdType.LIMIT,
                                qty=1000,
                                limit_price=18.5)
        bar = Bar(open=18, high=19, low=17, close=17.5, vol=1000)

        self.assertEqual(17.5, processor.get_price(order, bar, config))
        self.assertEqual(1000, processor.get_qty(order, bar, config))

        config2 = SimConfig(fill_on_bar_mode=SimConfig.FillMode.NEXT_OPEN)
        self.assertEqual(18, processor.get_price(order, bar, config2))
        self.assertEqual(1000, processor.get_qty(order, bar, config2))
Exemplo n.º 29
0
    def test_on_market_date_update(self):

        ord_req = NewOrderRequest(cl_id='test', cl_ord_id=1, portf_id="test", broker_id="Dummy", inst_id=1,
                                  action=OrdAction.BUY, type=OrdType.LIMIT, qty=1000, limit_price=18.5,
                                  timestamp=0)
        order1 = self.portfolio.on_new_ord_req(ord_req)

        er1 = ExecutionReport(cl_id='test', cl_ord_id=1, ord_id=1, er_id=1, inst_id=1, last_qty=500, last_price=18.4,
                              status=OrdStatus.PARTIALLY_FILLED, timestamp=1)
        self.app_context.order_mgr.on_exec_report(er1)

        expected_cash = 100000 - 500 * 18.4
        expected_stock_value = 500 * 18.4
        expected_total_equity = expected_cash + expected_stock_value

        self.assertEqual(expected_cash, self.portfolio.cash)
        self.assertEqual(expected_stock_value, self.portfolio.performance_series.get_by_idx(0, 'stock_value'))
        self.assertEqual(expected_total_equity, self.portfolio.performance_series.get_by_idx(0, 'total_equity'))

        self.portfolio.on_trade(Trade(inst_id=1, price=20, size=1000, timestamp=2))
        expected_cash = 100000 - 500 * 18.4
        expected_stock_value = 500 * 20
        expected_total_equity = expected_cash + expected_stock_value
        self.assertEqual(expected_cash, self.portfolio.cash)
        self.assertEqual(expected_stock_value, self.portfolio.performance_series.get_by_idx(1, 'stock_value'))
        self.assertEqual(expected_total_equity, self.portfolio.performance_series.get_by_idx(1, 'total_equity'))

        self.portfolio.on_bar(Bar(inst_id=1, close=16, adj_close=16, vol=1000, timestamp=3))
        expected_cash = 100000 - 500 * 18.4
        expected_stock_value = 500 * 16
        expected_total_equity = expected_cash + expected_stock_value
        self.assertEqual(expected_cash, self.portfolio.cash)
        self.assertEqual(expected_stock_value, self.portfolio.performance_series.get_by_idx(2, 'stock_value'))
        self.assertEqual(expected_total_equity, self.portfolio.performance_series.get_by_idx(2, 'total_equity'))

        self.portfolio.on_quote(Quote(inst_id=1, bid=16, ask=18, timestamp=4))
        expected_cash = 100000 - 500 * 18.4
        expected_stock_value = 500 * 17
        expected_total_equity = expected_cash + expected_stock_value
        self.assertEqual(expected_cash, self.portfolio.cash)
        self.assertEqual(expected_stock_value, self.portfolio.performance_series.get_by_idx(3, 'stock_value'))
        self.assertEqual(expected_total_equity, self.portfolio.performance_series.get_by_idx(3, 'total_equity'))
Exemplo n.º 30
0
    def test_on_ord_upd(self):
        order = Order(
            NewOrderRequest(cl_id='test',
                            cl_ord_id=1,
                            inst_id=1,
                            action=OrdAction.BUY,
                            type=OrdType.LIMIT,
                            qty=1000,
                            limit_price=18.5))
        self.assertEquals(OrdStatus.NEW, order.status)

        status_update = OrderStatusUpdate(cl_id='test',
                                          cl_ord_id=1,
                                          ord_id=1,
                                          inst_id=1,
                                          status=OrdStatus.SUBMITTED)
        order.on_ord_upd(status_update)

        self.assertEqual(status_update.ord_id, order.broker_ord_id)
        self.assertEquals(OrdStatus.SUBMITTED, order.status)