-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscanner.drawio
More file actions
178 lines (178 loc) · 25.8 KB
/
scanner.drawio
File metadata and controls
178 lines (178 loc) · 25.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
<mxfile host="app.diagrams.net" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36" version="24.7.16">
<diagram id="C5RBs43oDa-KdzZeNtuy" name="Page-1">
<mxGraphModel dx="2682" dy="1727" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="WIyWlLk6GJQsqaUBKTNV-0" />
<mxCell id="WIyWlLk6GJQsqaUBKTNV-1" parent="WIyWlLk6GJQsqaUBKTNV-0" />
<mxCell id="ICNRwwAA700VV8--LMKU-10" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="9YizN_n3vZFoltxltRFe-18" target="ICNRwwAA700VV8--LMKU-1" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="9YizN_n3vZFoltxltRFe-18" value="«interface»<br><div style="background-color:#1e1f22;color:#bcbec4"><pre style="font-family:'Fira Code',monospace;font-size:8,3pt;">ICriptoStock</pre></div>" style="html=1;whiteSpace=wrap;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="440" y="-370" width="110" height="40" as="geometry" />
</mxCell>
<mxCell id="9YizN_n3vZFoltxltRFe-24" value="MarketImp<div><br></div>" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="130" y="120" width="280" height="60" as="geometry">
<mxRectangle x="480" y="110" width="100" height="40" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="9YizN_n3vZFoltxltRFe-26" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="9YizN_n3vZFoltxltRFe-24" vertex="1">
<mxGeometry y="26" width="280" height="8" as="geometry" />
</mxCell>
<mxCell id="9YizN_n3vZFoltxltRFe-69" value="+ init (add available symbols into all_symbols)" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="9YizN_n3vZFoltxltRFe-24" vertex="1">
<mxGeometry y="34" width="280" height="26" as="geometry" />
</mxCell>
<mxCell id="9YizN_n3vZFoltxltRFe-30" value="Scanner" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry y="-500" width="330" height="138" as="geometry" />
</mxCell>
<mxCell id="9YizN_n3vZFoltxltRFe-31" value="vector&lt;allowed_tokens&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="9YizN_n3vZFoltxltRFe-30" vertex="1">
<mxGeometry y="26" width="330" height="26" as="geometry" />
</mxCell>
<mxCell id="9YizN_n3vZFoltxltRFe-32" value="unordered_map&lt;string, Symbol&gt; all_symbols" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="9YizN_n3vZFoltxltRFe-30" vertex="1">
<mxGeometry y="52" width="330" height="26" as="geometry" />
</mxCell>
<mxCell id="9YizN_n3vZFoltxltRFe-80" value="vector&lt;Path&gt; paths" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="9YizN_n3vZFoltxltRFe-30" vertex="1">
<mxGeometry y="78" width="330" height="26" as="geometry" />
</mxCell>
<mxCell id="9YizN_n3vZFoltxltRFe-113" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="9YizN_n3vZFoltxltRFe-30" vertex="1">
<mxGeometry y="104" width="330" height="8" as="geometry" />
</mxCell>
<mxCell id="9YizN_n3vZFoltxltRFe-33" value="updateSymbol" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="9YizN_n3vZFoltxltRFe-30" vertex="1">
<mxGeometry y="112" width="330" height="26" as="geometry" />
</mxCell>
<mxCell id="9YizN_n3vZFoltxltRFe-59" value="Symbol" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="40" y="350" width="310" height="286" as="geometry" />
</mxCell>
<mxCell id="9YizN_n3vZFoltxltRFe-60" value="symbol" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="9YizN_n3vZFoltxltRFe-59" vertex="1">
<mxGeometry y="26" width="310" height="26" as="geometry" />
</mxCell>
<mxCell id="9YizN_n3vZFoltxltRFe-79" value="comission" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="9YizN_n3vZFoltxltRFe-59" vertex="1">
<mxGeometry y="52" width="310" height="26" as="geometry" />
</mxCell>
<mxCell id="9YizN_n3vZFoltxltRFe-61" value="baseAsset" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="9YizN_n3vZFoltxltRFe-59" vertex="1">
<mxGeometry y="78" width="310" height="26" as="geometry" />
</mxCell>
<mxCell id="9YizN_n3vZFoltxltRFe-62" value="quoteAsset" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="9YizN_n3vZFoltxltRFe-59" vertex="1">
<mxGeometry y="104" width="310" height="26" as="geometry" />
</mxCell>
<mxCell id="9YizN_n3vZFoltxltRFe-68" value="bestBidPrice" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="9YizN_n3vZFoltxltRFe-59" vertex="1">
<mxGeometry y="130" width="310" height="26" as="geometry" />
</mxCell>
<mxCell id="9YizN_n3vZFoltxltRFe-67" value="bestAskPrice" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="9YizN_n3vZFoltxltRFe-59" vertex="1">
<mxGeometry y="156" width="310" height="26" as="geometry" />
</mxCell>
<mxCell id="9YizN_n3vZFoltxltRFe-66" value="bestBidQty" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="9YizN_n3vZFoltxltRFe-59" vertex="1">
<mxGeometry y="182" width="310" height="26" as="geometry" />
</mxCell>
<mxCell id="9YizN_n3vZFoltxltRFe-65" value="bestAskQty" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="9YizN_n3vZFoltxltRFe-59" vertex="1">
<mxGeometry y="208" width="310" height="26" as="geometry" />
</mxCell>
<mxCell id="9YizN_n3vZFoltxltRFe-64" value="market_object" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="9YizN_n3vZFoltxltRFe-59" vertex="1">
<mxGeometry y="234" width="310" height="26" as="geometry" />
</mxCell>
<mxCell id="9YizN_n3vZFoltxltRFe-91" value="vector&lt;PathNode*&gt; participates" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="9YizN_n3vZFoltxltRFe-59" vertex="1">
<mxGeometry y="260" width="310" height="26" as="geometry" />
</mxCell>
<mxCell id="9YizN_n3vZFoltxltRFe-81" value="Path" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="620" y="350" width="210" height="78" as="geometry" />
</mxCell>
<mxCell id="9YizN_n3vZFoltxltRFe-82" value="financial_result" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="9YizN_n3vZFoltxltRFe-81" vertex="1">
<mxGeometry y="26" width="210" height="26" as="geometry" />
</mxCell>
<mxCell id="9YizN_n3vZFoltxltRFe-93" value="<span style="text-align: center;">vector&lt;</span><span style="text-align: center;">PathNode*</span><span style="text-align: center;">&gt;</span>" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="9YizN_n3vZFoltxltRFe-81" vertex="1">
<mxGeometry y="52" width="210" height="26" as="geometry" />
</mxCell>
<mxCell id="9YizN_n3vZFoltxltRFe-94" value="PathNode" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="380" y="350" width="210" height="104" as="geometry" />
</mxCell>
<mxCell id="9YizN_n3vZFoltxltRFe-95" value="Symbol* symbol" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="9YizN_n3vZFoltxltRFe-94" vertex="1">
<mxGeometry y="26" width="210" height="26" as="geometry" />
</mxCell>
<mxCell id="9YizN_n3vZFoltxltRFe-96" value="bool is_reversed" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="9YizN_n3vZFoltxltRFe-94" vertex="1">
<mxGeometry y="52" width="210" height="26" as="geometry" />
</mxCell>
<mxCell id="9YizN_n3vZFoltxltRFe-98" value="Path* path" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="9YizN_n3vZFoltxltRFe-94" vertex="1">
<mxGeometry y="78" width="210" height="26" as="geometry" />
</mxCell>
<mxCell id="ICNRwwAA700VV8--LMKU-0" style="edgeStyle=entityRelationEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;startArrow=none;endArrow=none;segment=10;curved=1;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="9YizN_n3vZFoltxltRFe-116" target="9YizN_n3vZFoltxltRFe-30" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="9YizN_n3vZFoltxltRFe-116" value="Инициализируется самым первым.<div>После него инициализируются все реализации&nbsp;<span style="color: rgb(188, 190, 196); font-family: &quot;Fira Code&quot;, monospace; background-color: initial;">ICriptoStock, после того как все биржи проинициализированы, генерируются все возможные paths.</span><div>updateSymbol, по ключу находит указатель на Symbol.&nbsp;</div><div>Из этого symbol находит все случаи участия в path.&nbsp;</div><div>Исключает влияние старой цены на каждую из path и включает влияние новой цены на кажду path.&nbsp;</div><div>После чего меняет цену Symbol'а.&nbsp;</div></div>" style="whiteSpace=wrap;html=1;rounded=1;arcSize=50;align=center;verticalAlign=middle;strokeWidth=1;autosize=1;spacing=4;treeFolding=1;treeMoving=1;newEdgeStyle={"edgeStyle":"entityRelationEdgeStyle","startArrow":"none","endArrow":"none","segment":10,"curved":1,"sourcePerimeterSpacing":0,"targetPerimeterSpacing":0};" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="-870" y="-650" width="1000" height="100" as="geometry" />
</mxCell>
<mxCell id="9YizN_n3vZFoltxltRFe-119" style="edgeStyle=entityRelationEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;startArrow=none;endArrow=none;segment=10;curved=1;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="9YizN_n3vZFoltxltRFe-118" target="9YizN_n3vZFoltxltRFe-18" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="9YizN_n3vZFoltxltRFe-118" value="Интерфейс.&nbsp;<div>Реализации этого интерфейса зависят от Scanner.</div><div>При инициализации запрашивается информация о торговых парах, комиссиях.&nbsp;</div><div>Аггрегируется, фильтруется по allowed_tokens scanner'a/</div><div>Торговые пары добавляются в Scanner-&gt;all_symbols по ключу marketname + symbol</div><div>Подписываемся на WebScoket с обновлением состояния стакана.</div><div>При получении ивента по сокету, обрабатываем информацию и отправляем сообщение scanner-&gt;updateSymbol()</div><div><br></div>" style="whiteSpace=wrap;html=1;rounded=1;arcSize=50;align=center;verticalAlign=middle;strokeWidth=1;autosize=1;spacing=4;treeFolding=1;treeMoving=1;newEdgeStyle={"edgeStyle":"entityRelationEdgeStyle","startArrow":"none","endArrow":"none","segment":10,"curved":1,"sourcePerimeterSpacing":0,"targetPerimeterSpacing":0};" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="590" y="-560" width="680" height="130" as="geometry" />
</mxCell>
<mxCell id="9YizN_n3vZFoltxltRFe-130" value="По умолчанию если is_stopped не отправляет информацию о ценах в scanner-&gt;update().&nbsp;<div>Поле становится true после того как проинициализированы все остальные биржи и сгенерированы все path</div>" style="whiteSpace=wrap;html=1;rounded=1;arcSize=50;align=center;verticalAlign=middle;strokeWidth=1;autosize=1;spacing=4;treeFolding=1;treeMoving=1;newEdgeStyle={"edgeStyle":"entityRelationEdgeStyle","startArrow":"none","endArrow":"none","segment":10,"curved":1,"sourcePerimeterSpacing":0,"targetPerimeterSpacing":0};" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="725" y="-260" width="650" height="50" as="geometry" />
</mxCell>
<mxCell id="9YizN_n3vZFoltxltRFe-131" value="" style="edgeStyle=entityRelationEdgeStyle;startArrow=none;endArrow=none;segment=10;curved=1;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="9YizN_n3vZFoltxltRFe-18" target="9YizN_n3vZFoltxltRFe-130" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="970" y="-208" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="9YizN_n3vZFoltxltRFe-132" value="Для оптимиации:<div>1) Rolling window</div><div>2) Логарифмическая аримфетика (переход от умножения к сложению)</div><div>3) Подумать над использованием MaxHeap, что бы не приходилось каждый раз после изменения цены проходить по всем Path</div><div>4) Использование хеш-таблиц для получения нужной информации за O(1)</div>" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="-830" y="-800" width="740" height="90" as="geometry" />
</mxCell>
<mxCell id="L48UQ2oYOEbbPqkQDJhL-0" value="<div>Wallet</div>" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="890" y="40" width="280" height="60" as="geometry">
<mxRectangle x="480" y="110" width="100" height="40" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="L48UQ2oYOEbbPqkQDJhL-1" value="<div>unordered_map&lt;string, amount&gt;</div>" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="L48UQ2oYOEbbPqkQDJhL-0" vertex="1">
<mxGeometry y="26" width="280" height="26" as="geometry" />
</mxCell>
<mxCell id="L48UQ2oYOEbbPqkQDJhL-3" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="L48UQ2oYOEbbPqkQDJhL-0" vertex="1">
<mxGeometry y="52" width="280" height="8" as="geometry" />
</mxCell>
<mxCell id="yXbG8wtySiizz--aTv2x-1" value="MarketImp<div><br></div>" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="500" y="120" width="280" height="60" as="geometry">
<mxRectangle x="480" y="110" width="100" height="40" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="yXbG8wtySiizz--aTv2x-6" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="yXbG8wtySiizz--aTv2x-1" vertex="1">
<mxGeometry y="26" width="280" height="8" as="geometry" />
</mxCell>
<mxCell id="yXbG8wtySiizz--aTv2x-9" value="+ init (add available symbols into all_symbols)" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="yXbG8wtySiizz--aTv2x-1" vertex="1">
<mxGeometry y="34" width="280" height="26" as="geometry" />
</mxCell>
<mxCell id="ICNRwwAA700VV8--LMKU-11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="ICNRwwAA700VV8--LMKU-1" target="9YizN_n3vZFoltxltRFe-24" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="410" y="60" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ICNRwwAA700VV8--LMKU-13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="ICNRwwAA700VV8--LMKU-1" target="yXbG8wtySiizz--aTv2x-1" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="ICNRwwAA700VV8--LMKU-1" value="BaseImp<div><br></div>" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="330" y="-270" width="280" height="190" as="geometry">
<mxRectangle x="480" y="110" width="100" height="40" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="ICNRwwAA700VV8--LMKU-2" value="Scanner* scanner (same for all impls)" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="ICNRwwAA700VV8--LMKU-1" vertex="1">
<mxGeometry y="26" width="280" height="26" as="geometry" />
</mxCell>
<mxCell id="ICNRwwAA700VV8--LMKU-3" value="Wallet* wallet (individual)" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="ICNRwwAA700VV8--LMKU-1" vertex="1">
<mxGeometry y="52" width="280" height="26" as="geometry" />
</mxCell>
<mxCell id="ICNRwwAA700VV8--LMKU-4" value="bool is_stopped=True" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="ICNRwwAA700VV8--LMKU-1" vertex="1">
<mxGeometry y="78" width="280" height="26" as="geometry" />
</mxCell>
<mxCell id="ICNRwwAA700VV8--LMKU-5" value="string&nbsp;<span style="color: rgb(199, 125, 187); font-family: &quot;Fira Code&quot;, monospace; background-color: rgb(30, 31, 34);">stockmarket_name</span>" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="ICNRwwAA700VV8--LMKU-1" vertex="1">
<mxGeometry y="104" width="280" height="26" as="geometry" />
</mxCell>
<mxCell id="ICNRwwAA700VV8--LMKU-6" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="ICNRwwAA700VV8--LMKU-1" vertex="1">
<mxGeometry y="130" width="280" height="8" as="geometry" />
</mxCell>
<mxCell id="ICNRwwAA700VV8--LMKU-7" value="+ update(type):&nbsp;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="ICNRwwAA700VV8--LMKU-1" vertex="1">
<mxGeometry y="138" width="280" height="26" as="geometry" />
</mxCell>
<mxCell id="ICNRwwAA700VV8--LMKU-8" value="+ trade(Symbol)" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="ICNRwwAA700VV8--LMKU-1" vertex="1">
<mxGeometry y="164" width="280" height="26" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>