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()
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()
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)
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())
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()
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))
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))
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()