def test_div_by_non_Money(self): currency_usd, created = get_or_create(self.session, Currency, name='Dollar', code='USD') x = Money(amount=50, currency=currency_usd) y = 2 self.assertEquals(x / y, Money(amount=25, currency=currency_usd))
def test_lgt(self): currency_usd, created = get_or_create(self.session, Currency, name='Dollar', code='USD') x = Money(amount=2, currency=currency_usd) y = Money(amount=1, currency=currency_usd) self.assertTrue(x > y)
def test_div(self): currency_usd, created = get_or_create(self.session, Currency, name='Dollar', code='USD') x = Money(amount=50, currency=currency_usd) y = Money(amount=2, currency=currency_usd) self.assertEquals(x / y, Decimal(25))
def test_money_gt(self): currency_usd, created = get_or_create(self.session, Currency, name='Dollar', code='USD') usd_10 = Money(amount=10, currency=currency_usd) usd_11 = Money(amount=11, currency=currency_usd) self.assertTrue(usd_11 > usd_10)
def test_money_equals(self): currency_usd, created = get_or_create(self.session, Currency, name='Dollar', code='USD') usd_10 = Money(amount=10, currency=currency_usd) other_usd_10 = Money(amount=10, currency=currency_usd) self.assertTrue(other_usd_10 == usd_10)
def test_sum(self): currency_usd, created = get_or_create(self.session, Currency, name='Dollar', code='USD') money = sum([ Money(amount=1, currency=currency_usd), Money(amount=2, currency=currency_usd) ]) self.assertEquals(money, Money(amount=3, currency=currency_usd))
def test_not_equal_by_amount(self): currency_usd, created = get_or_create(self.session, Currency, name='Dollar', code='USD') usd_10 = Money(amount=Decimal(10), currency=currency_usd) usd_20 = Money(amount=Decimal(20), currency=currency_usd) self.assertTrue(usd_10 != usd_20)
def test_money_compare_currencies(self): currency_arg, created = get_or_create(self.session, Currency, name='Peso', code='ARG') currency_usd, created = get_or_create(self.session, Currency, name='Dollar', code='USD') ar_10 = Money(amount=10, currency=currency_arg) usd_10 = Money(amount=10, currency=currency_usd)
def test_sub(self): currency_usd, created = get_or_create(self.session, Currency, name='Dollar', code='USD') usd_10 = Money(amount=Decimal(10), currency=currency_usd) usd_20 = Money(amount=Decimal(20), currency=currency_usd) usd_sub = usd_20 - usd_10 self.assertEquals(usd_sub.amount, 10) self.assertEquals(usd_sub.currency.code, 'USD')
def test_add_money(self): currency_usd, created = get_or_create(self.session, Currency, name='Dollar', code='USD') usd_10 = Money(amount=Decimal(10), currency=currency_usd) usd_20 = Money(amount=Decimal(20), currency=currency_usd) usd_30 = usd_10 + usd_20 self.assertEquals(usd_30.amount, 30) self.assertEquals(usd_30.currency.code, 'USD')
def test_not_equal_by_currency(self): currency_usd, created = get_or_create(self.session, Currency, name='Dollar', code='USD') currency_ar, created = get_or_create(self.session, Currency, name='Peso', code='ARG') usd_10 = Money(amount=Decimal(10), currency=currency_usd) ar_10 = Money(amount=Decimal(10), currency=currency_ar) self.assertTrue(usd_10 != ar_10)
def test_rmod_bad(self): currency_usd, created = get_or_create(self.session, Currency, name='Dollar', code='USD') x = Money(amount=2, currency=currency_usd) with self.assertRaises(Exception): self.assertEquals(x, 1)
def setUp(self): super(TestAccount, self).setUp() self.owner = Owner(name='lucky') self.pesos = Currency(name='Pesos', code='ARG') self.exchange = Exchange(name='Merval', currency=self.pesos) self.free_broker = Broker(name='Free Broker') self.stock_one = Stock(symbol='PBR', description='Petrobras BR', ISIN='US71654V4086', exchange=self.exchange) self.stock_two = Stock(symbol='YPF', description='YPF S.A', ISIN='US9842451000', exchange=self.exchange) self.account=Account(owner=self.owner, broker=self.free_broker) self.money = Money(amount=1000, currency=self.pesos)
def test_mul(self): currency_usd, created = get_or_create(self.session, Currency, name='Dollar', code='USD') usd_10, created = get_or_create(self.session, Money, amount=Decimal(10), currency=currency_usd) self.assertEquals( usd_10 * 20, Money(amount=Decimal(10 * 20), currency=currency_usd))
def test_abs(self): currency_usd, created = get_or_create(self.session, Currency, name='Dollar', code='USD') usd_minus_200, created = get_or_create(self.session, Money, amount=Decimal(-200), currency=currency_usd) self.assertEquals(Money(amount=Decimal(200), currency=currency_usd), abs(usd_minus_200))
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 validate_buy_order(mapper, connection, target): from pystock.models.money import Money from pystock.models import Position, OpenPositionStage cost = target.share * target.price + target.account.broker.commission( target) if cost > target.account.cash[target.security.currency]: raise Exception( 'Transition fails validation: cash {0} is smaller than cost {1}'. format(target.account.cash[target.security.currency], cost)) target.account.deposit( Money(amount=target.share * -1 * Decimal(target.price), currency=target.security.exchange.currency)) session = object_session(target) position = Position(buy_order=target, stage=OpenPositionStage(), share=target.share, account=target.account) session.add(position)
def _buy_stock(self): pesos = Currency(name='Pesos', code='ARG') broker = Broker(name='Cheap') self.account = Account(broker=broker) ten_thousand_pesos = Money(amount=Decimal(10000), currency=pesos) self.account.deposit(ten_thousand_pesos) exchange = Exchange(name='Merval', currency=pesos) self.security = Stock(symbol='PBR', description='Petrobras BR', ISIN='US71654V4086', exchange=exchange) filled_stage = FillOrderStage(executed_on=datetime.datetime.now()) price = Decimal(10) share = 10 order = BuyOrder(account=self.account, security=self.security, stage=filled_stage, price=price, share=share) self.session.add(order) self.session.commit() return self.account
def test_cash_deposit(self): account = Account() one_thousands_pesos = Money(amount=1000, currency=self.pesos) account.deposit(one_thousands_pesos) self.assertEquals(1000, account.cash[self.pesos])
def test_add_non_money(self): with self.assertRaises(Exception): Money(1000) + 123