Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
wiseplat
GitHub Repository: wiseplat/python-code
Path: blob/master/ invest-robot-contest_TradingCompetition2022-main/order/OrderStorage.py
5929 views
1
from collections import defaultdict
2
from order.Orders import Order
3
from stock.Stock import Stock
4
5
6
class OrderStorage:
7
# Instance for storage all orders
8
_orders = None
9
_orders_archive = []
10
11
@classmethod
12
def get_order_storage(cls):
13
if cls._orders is None:
14
cls._orders = OrderStorage()
15
return cls._orders
16
17
def __init__(self):
18
self._orders = defaultdict(set)
19
20
def add_order(self, order_id, lots_requested, stock: Stock, order_type):
21
self._orders[stock.ticker].add(Order(order_id, lots_requested, order_type))
22
self._orders_archive.append(self._orders[stock.ticker])
23
return self
24
25
def free_stock_orders(self,stock):
26
if stock.ticker in self._orders:
27
del self._orders[stock.ticker]
28
return self
29
30
def get_order_by_ticker(self, ticker):
31
return self._orders[ticker]
32
33
@property
34
def orders(self):
35
return self._orders
36
37
def __iter__(self):
38
self.__storage_keys = list(self._orders.keys())
39
self.__iter_pos = 0
40
return self
41
42
def __next__(self):
43
if self.__iter_pos < len(self.__storage_keys):
44
key = self.__storage_keys[self.__iter_pos]
45
self.__iter_pos += 1
46
return self._orders[key]
47
else:
48
raise StopIteration
49
50