Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
wiseplat
GitHub Repository: wiseplat/python-code
Path: blob/master/ invest-robot-contest_TradingCompetition2022-main/models/ModelChecks.py
5925 views
1
from collections import defaultdict
2
3
4
class ModelChecks:
5
""" Class store all checks and link to check implement """
6
7
OPEN_LONG = 'open_long'
8
OPEN_SHORT = 'open_short'
9
CLOSE_LONG = 'close_long'
10
CLOSE_SHORT = 'close_short'
11
IS_READY = 'is_ready'
12
IMPL_METHOD = 'impl_method'
13
14
def __init__(self):
15
self._checks = dict(zip((self.OPEN_LONG, self.CLOSE_LONG, self.OPEN_SHORT, self.CLOSE_SHORT),
16
(defaultdict(dict), defaultdict(dict), defaultdict(dict), defaultdict(dict),)))
17
18
# self._check[self._OPEN_LONG]
19
# [self._LOW_POINT] = False
20
21
@property
22
def checks(self):
23
return self._checks
24
25
def add_check(self, group, name, implement_link):
26
""" Add new check
27
:param
28
group -> type of order (_OPEN_LONG, _CLOSE_LONG, etc.)
29
name -> name of check
30
implement_method -> method which was implemented for checking
31
"""
32
self._checks[group][name][self.IS_READY] = False
33
self._checks[group][name][self.IMPL_METHOD] = implement_link
34
return self
35
36
def set_ready(self, group, name):
37
self._checks[group][name][self.IS_READY] = True
38
39
def __iter__(self):
40
self._group_pos = 0
41
self._groups = list(self._checks.keys())
42
self._group_item_pos = 0
43
return self
44
45
def __get_next_no_empty_group_idx__(self, gp_idx):
46
gp_idx += 1
47
while gp_idx < len(self._groups):
48
group_items = self._checks[self._groups[gp_idx]]
49
if len(group_items) > 0:
50
return gp_idx
51
else:
52
gp_idx += 1
53
continue
54
raise StopIteration
55
56
def __next__(self):
57
group = self._checks[self._groups[self._group_pos]]
58
if self._group_item_pos >= len(group):
59
self._group_pos = self.__get_next_no_empty_group_idx__(self._group_pos)
60
self._group_item_pos = 0
61
62
if self._group_pos > len(self._groups):
63
raise StopIteration
64
65
group_name = self._groups[self._group_pos]
66
group_items = self._checks[self._groups[self._group_pos]]
67
check_key = list(group_items.keys())
68
check_name = check_key[self._group_item_pos]
69
item = group_items[check_key[self._group_item_pos]]
70
self._group_item_pos += 1
71
return group_name, check_name, item
72
73