Ejemplo n.º 1
0
 def test_sell_validate_selling_something_owned_but_quantity_invalid(self):
     self._buy_stock(self.stock_one)
     # can't sell because don't have the enough share
     with self.assertRaises(Exception):
         order = SellOrder(account=self.account, security=self.stock_one, price=100, share=9000)
         self.session.add(order)
         self.session.commit()
Ejemplo n.º 2
0
 def test_sell_validate_selling_more_than_owned(self):
     self._buy_stock(self.stock_one)
     # can't sell because don't have the stock
     with self.assertRaises(Exception):
         order = SellOrder(account=self.account, security=self.stock_two, price=200, share=9)
         self.session.add(order)
         self.session.commit()
Ejemplo n.º 3
0
    def test_close_position_with_more_share_raises_execption(self):
        self._buy_stock()
        # buy more to allow to sell 15
        filled_stage = FillOrderStage(executed_on=datetime.datetime.now())
        buy_order = BuyOrder(account=self.account,
                             security=self.security,
                             stage=filled_stage,
                             price=Decimal(20),
                             share=10)
        self.session.add(buy_order)
        self.session.commit()

        tomorrow = datetime.datetime.now() + datetime.timedelta(days=1)
        quote = SecurityQuote(date=tomorrow,
                              close_price=Decimal(100),
                              open_price=10.1,
                              high_price=14,
                              low_price=10.1,
                              volume=10000,
                              security=self.security)
        self.session.add(quote)
        self.session.commit()

        filled_stage = FillOrderStage(executed_on=datetime.datetime.now())
        sell_order = SellOrder(account=self.account,
                               security=self.security,
                               stage=filled_stage,
                               price=Decimal(100),
                               share=15)

        self.session.add(sell_order)
        self.session.commit()

        with self.assertRaises(Exception):
            self.account.positions[0].close(sell_order)
Ejemplo n.º 4
0
    def test_close_position_less_than_bought_opens_a_new_position(self):
        self._buy_stock()

        tomorrow = datetime.datetime.now() + datetime.timedelta(days=1)
        quote = SecurityQuote(date=tomorrow,
                              close_price=Decimal(100),
                              open_price=10.1,
                              high_price=14,
                              low_price=10.1,
                              volume=10000,
                              security=self.security)
        self.session.add(quote)
        self.session.commit()

        filled_stage = FillOrderStage(executed_on=datetime.datetime.now())
        sell_order = SellOrder(account=self.account,
                               security=self.security,
                               stage=filled_stage,
                               price=Decimal(100),
                               share=5)

        self.session.add(sell_order)
        self.session.commit()

        self.account.positions[0].close(sell_order)

        self.assertEquals(len(self.account.positions), 2)
        self.assertFalse(self.account.positions[0].is_open())
        self.assertTrue(self.account.positions[1].is_open())
Ejemplo n.º 5
0
    def test_sell_something_owned_ok_path(self):
        self._buy_stock(self.stock_one)

        tomorrow = datetime.datetime.now() + datetime.timedelta(days=1)
        quote = SecurityQuote(date=tomorrow, close_price=12, open_price=10.1, high_price=14, low_price=10.1, volume=10000)
        self.session.add(quote)
        self.session.commit()
        # sell it
        order = SellOrder(account=self.account, security=self.stock_one, price=100, share=9)

        self.session.add(order)
        self.session.commit()
Ejemplo n.º 6
0
    def test_is_order_met(self):
        now = datetime.datetime.now()
        broker = Broker(name='Broker1')
        account = Account(broker=broker)

        pesos = Currency(name='Pesos', code='ARG')
        account.deposit(Money(amount=10000, currency=pesos))
        exchange = Exchange(name='Merval', code='MERV', currency=pesos)
        stock=Stock(symbol='symbol', description='a stock', ISIN='US123456789', exchange=exchange)
        tick1=Tick(trade_date=now, price=13.20, amount=1000, volume=1000, security=stock)
        order1=BuyOrder(account=account, security=stock, price=13.25, share=10, is_market=True)
        order2=BuyOrder(account=account, security=stock, price=13.15, share=10)
        order3=SellOrder(account=account, security=stock, price=13.25, share=10)
        order4=SellOrder(account=account, security=stock, price=13.15, share=10, is_market=True)
        self.session.add(order1)
        self.session.add(order2)
        self.session.add(order3)
        self.session.add(order4)
        self.session.commit()

        self.assertTrue(order1.is_order_met(tick1))
        self.assertFalse(order2.is_order_met(tick1))
        self.assertFalse(order3.is_order_met(tick1))
        self.assertTrue(order4.is_order_met(tick1))
Ejemplo n.º 7
0
    def test_is_order_met(self):
        now = datetime.datetime.now()
        broker = Broker(name='Broker1')
        account = Account(broker=broker)

        pesos = Currency(name='Pesos', code='ARG')
        account.deposit(Money(amount=10000, currency=pesos))
        exchange = Exchange(name='Merval', code='MERV', currency=pesos)
        stock = Stock(symbol='symbol',
                      description='a stock',
                      ISIN='US123456789',
                      exchange=exchange)
        tick1 = Tick(trade_date=now,
                     price=13.20,
                     amount=1000,
                     volume=1000,
                     security=stock)
        order1 = BuyOrder(account=account,
                          security=stock,
                          price=13.25,
                          share=10,
                          is_market=True)
        order2 = BuyOrder(account=account,
                          security=stock,
                          price=13.15,
                          share=10)
        order3 = SellOrder(account=account,
                           security=stock,
                           price=13.25,
                           share=10)
        order4 = SellOrder(account=account,
                           security=stock,
                           price=13.15,
                           share=10,
                           is_market=True)
        self.session.add(order1)
        self.session.add(order2)
        self.session.add(order3)
        self.session.add(order4)
        self.session.commit()

        self.assertTrue(order1.is_order_met(tick1))
        self.assertFalse(order2.is_order_met(tick1))
        self.assertFalse(order3.is_order_met(tick1))
        self.assertTrue(order4.is_order_met(tick1))
Ejemplo n.º 8
0
 def test_sell_validate_selling_something_not_owned(self):
     # can't sell because don't have the stock
     with self.assertRaises(Exception):
         order = SellOrder(account=self.account, security=self.stock_two, price=100, share=9)
         self.session.add(order)
         self.session.commit()