Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_order_6(self):
"""
A buy back of short-sold stock.
"""
user = User.objects.get(pk=1)
wallet = Wallet.objects.get(user=user)
wallet.shares_owned = """{"4": -9, "1": 7}"""
wallet.frozen = 9000
wallet.points = 20000
wallet.save()
future = Future.objects.get(pk=4)
# 8@600, 4@325
# I want to buy 7@615
response = process_order(7, 615, wallet, 'buy', future)
order = Order.objects.all().order_by('-pk')[0] # My buy.
order_1 = Order.objects.get(pk=9) # 4@325
order_2 = Order.objects.get(pk=3) # 8@600
self.assertEqual(order_1.filled, True)
self.assertEqual(order_2.filled, False)
self.assertEqual(order.filled, True)
self.assertEqual(order.filled_by, order_2.creator)
self.assertEqual(order_2.quantity, 5) # 3 got bought
self.assertEqual(order_1.filled_by, user)
self.assertEqual(order_2.filled_by, None)
future = Future.objects.get(pk=4)
self.assertEqual(future.last_buy, 600)
self.assertEqual(future.ask, 600) # Lowest sale order
self.assertEqual(future.bid, 275) # Highest buy order
self.assertEqual(future.volume, 7)
# History
history = FutureHistory.objects.filter(future=future)
self.assertEqual(history.count(), 2)
def test_order_1(self):
user = User.objects.get(pk=8)
# Want to buy future "Jesse Day".
# There is a sell order of 8 for 600, a buy order of 4 for 100,
# a sell order of 4 for 325, a buy order of 4 for 275 in the fixture.
response = process_order(15, 650,
Wallet.objects.get(user=user),
'buy',
Future.objects.get(pk=4))
# Now get the new orders for people.
# First, get the order that was just created by this test user.
order = Order.objects.all().order_by('-pk')[0]
self.assertEqual(order.filled, False)
self.assertEqual(order.quantity, 3) # Should be 15 - (8 + 4)
self.assertEqual(order.unit_price, 650) # Unchanged
# Get the filled orders.
order_1 = Order.objects.get(pk=9) # The 325 S
order_2 = Order.objects.get(pk=3) # The 650 S
self.assertEqual(order_1.filled, True)
self.assertEqual(order_2.filled, True)
self.assertEqual(order_1.filled_by, user)
self.assertEqual(order_2.filled_by, user)
# Fetch new updated future.
future = Future.objects.get(pk=4)
self.assertEqual(future.last_buy, 600)
self.assertEqual(future.bid, 650)
self.assertEqual(future.ask, None)
self.assertEqual(future.volume, 12)
def update_bid_ask(future_id):
"""
Update the bid and ask for a future based on open orders.
"""
future = Future.objects.get(pk=future_id)
open_orders = Order.objects.filter(filled=False, future=future)
bids = open_orders.filter(order_type=Order.ORDER_TYPE_BUY).order_by(
'-unit_price')
asks = open_orders.filter(order_type=Order.ORDER_TYPE_SELL).order_by(
'unit_price')
if bids.count() > 0:
future.bid = bids[0].unit_price
else:
future.bid = None
if asks.count() > 0:
future.ask = asks[0].unit_price
else:
future.ask = None
future.save()