@vuu-ui/vuu-data-test 2.1.19-beta.1 → 2.1.19-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +8 -9
- package/src/ArrayProxy.js +38 -0
- package/src/RuntimeVisualLink.js +45 -0
- package/src/SessionTable.js +49 -0
- package/src/Table.js +96 -0
- package/src/TickingArrayDataSource.js +208 -0
- package/src/UpdateGenerator.js +72 -0
- package/src/basket/BasketModule.js +272 -0
- package/src/basket/basket-schemas.js +355 -0
- package/src/basket/index.js +2 -0
- package/src/basket/reference-data/constituents.js +76 -0
- package/src/basket/reference-data/ftse100.js +686 -0
- package/src/basket/reference-data/hsi.js +1047 -0
- package/src/basket/reference-data/nasdaq100.js +812 -0
- package/src/basket/reference-data/prices.js +43 -0
- package/src/basket/reference-data/sp500.js +315 -0
- package/src/core/module/ModuleContainer.js +21 -0
- package/src/core/module/VuuModule.js +476 -0
- package/src/core/table/TableContainer.js +97 -0
- package/src/data-utils.js +53 -0
- package/src/index.js +13 -0
- package/src/local-datasource-provider/LocalDatasourceProvider.js +44 -0
- package/src/makeSuggestions.js +20 -0
- package/src/rowUpdates.js +0 -0
- package/src/schemas.js +19 -0
- package/src/session-table-utils.js +16 -0
- package/src/simul/SimulModule.js +175 -0
- package/src/simul/index.js +2 -0
- package/src/simul/reference-data/accounts.js +23 -0
- package/src/simul/reference-data/algos.js +9 -0
- package/src/simul/reference-data/currencies.js +8 -0
- package/src/simul/reference-data/index.js +5 -0
- package/src/simul/reference-data/instrument-prices.js +48 -0
- package/src/simul/reference-data/instruments-extended.js +12 -0
- package/src/simul/reference-data/instruments.js +67 -0
- package/src/simul/reference-data/isin-generator/convert-string-to-base-ten-number.js +2 -0
- package/src/simul/reference-data/isin-generator/fixtures/alphabet.js +27 -0
- package/src/simul/reference-data/isin-generator/fixtures/alphanumeric-values.js +7 -0
- package/src/simul/reference-data/isin-generator/fixtures/base-ten-numbers.js +13 -0
- package/src/simul/reference-data/isin-generator/generate-cusip-check-code.js +17 -0
- package/src/simul/reference-data/isin-generator/generate-cusip-without-check-code.js +8 -0
- package/src/simul/reference-data/isin-generator/generate-cusip.js +8 -0
- package/src/simul/reference-data/isin-generator/generate-random-alphanumeric.js +3 -0
- package/src/simul/reference-data/isin-generator/generate-random-base-ten-number.js +2 -0
- package/src/simul/reference-data/isin-generator/generate-random-string-of-alphanumeric-chars.js +7 -0
- package/src/simul/reference-data/isin-generator/generate-random-string-of-base-ten-chars.js +7 -0
- package/src/simul/reference-data/isin-generator/index.js +280 -0
- package/src/simul/reference-data/isin-generator/is-odd.js +2 -0
- package/src/simul/reference-data/locations.js +45 -0
- package/src/simul/reference-data/lotsizes.js +24 -0
- package/src/simul/reference-data/orderStatus.js +6 -0
- package/src/simul/reference-data/orders.js +64 -0
- package/src/simul/reference-data/parent-child-orders.js +117 -0
- package/src/simul/reference-data/priceStrategies.js +8 -0
- package/src/simul/reference-data/prices.js +78 -0
- package/src/simul/reference-data/sides.js +5 -0
- package/src/simul/simul-schemas.js +428 -0
- package/src/test/TestModule.js +95 -0
- package/src/test/index.js +1 -0
- package/src/test/test-schemas.js +74 -0
- package/src/vuu-row-generator.js +71 -0
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
import { generateCusip } from "./generate-cusip.js";
|
|
2
|
+
const countryCodes = [
|
|
3
|
+
"AD",
|
|
4
|
+
"AE",
|
|
5
|
+
"AF",
|
|
6
|
+
"AG",
|
|
7
|
+
"AI",
|
|
8
|
+
"AL",
|
|
9
|
+
"AM",
|
|
10
|
+
"AO",
|
|
11
|
+
"AQ",
|
|
12
|
+
"AR",
|
|
13
|
+
"AS",
|
|
14
|
+
"AT",
|
|
15
|
+
"AU",
|
|
16
|
+
"AW",
|
|
17
|
+
"AX",
|
|
18
|
+
"AZ",
|
|
19
|
+
"BA",
|
|
20
|
+
"BB",
|
|
21
|
+
"BD",
|
|
22
|
+
"BE",
|
|
23
|
+
"BF",
|
|
24
|
+
"BG",
|
|
25
|
+
"BH",
|
|
26
|
+
"BI",
|
|
27
|
+
"BJ",
|
|
28
|
+
"BL",
|
|
29
|
+
"BM",
|
|
30
|
+
"BN",
|
|
31
|
+
"BO",
|
|
32
|
+
"BQ",
|
|
33
|
+
"BR",
|
|
34
|
+
"BS",
|
|
35
|
+
"BT",
|
|
36
|
+
"BV",
|
|
37
|
+
"BW",
|
|
38
|
+
"BY",
|
|
39
|
+
"BZ",
|
|
40
|
+
"CA",
|
|
41
|
+
"CC",
|
|
42
|
+
"CD",
|
|
43
|
+
"CF",
|
|
44
|
+
"CG",
|
|
45
|
+
"CH",
|
|
46
|
+
"CI",
|
|
47
|
+
"CK",
|
|
48
|
+
"CL",
|
|
49
|
+
"CM",
|
|
50
|
+
"CN",
|
|
51
|
+
"CO",
|
|
52
|
+
"CR",
|
|
53
|
+
"CU",
|
|
54
|
+
"CV",
|
|
55
|
+
"CW",
|
|
56
|
+
"CX",
|
|
57
|
+
"CY",
|
|
58
|
+
"CZ",
|
|
59
|
+
"DE",
|
|
60
|
+
"DJ",
|
|
61
|
+
"DK",
|
|
62
|
+
"DM",
|
|
63
|
+
"DO",
|
|
64
|
+
"DZ",
|
|
65
|
+
"EC",
|
|
66
|
+
"EE",
|
|
67
|
+
"EG",
|
|
68
|
+
"EH",
|
|
69
|
+
"ER",
|
|
70
|
+
"ES",
|
|
71
|
+
"ET",
|
|
72
|
+
"FI",
|
|
73
|
+
"FJ",
|
|
74
|
+
"FK",
|
|
75
|
+
"FM",
|
|
76
|
+
"FO",
|
|
77
|
+
"FR",
|
|
78
|
+
"GA",
|
|
79
|
+
"GB",
|
|
80
|
+
"GD",
|
|
81
|
+
"GE",
|
|
82
|
+
"GF",
|
|
83
|
+
"GG",
|
|
84
|
+
"GH",
|
|
85
|
+
"GI",
|
|
86
|
+
"GL",
|
|
87
|
+
"GM",
|
|
88
|
+
"GN",
|
|
89
|
+
"GP",
|
|
90
|
+
"GQ",
|
|
91
|
+
"GR",
|
|
92
|
+
"GS",
|
|
93
|
+
"GT",
|
|
94
|
+
"GU",
|
|
95
|
+
"GW",
|
|
96
|
+
"GY",
|
|
97
|
+
"HK",
|
|
98
|
+
"HM",
|
|
99
|
+
"HN",
|
|
100
|
+
"HR",
|
|
101
|
+
"HT",
|
|
102
|
+
"HU",
|
|
103
|
+
"ID",
|
|
104
|
+
"IE",
|
|
105
|
+
"IL",
|
|
106
|
+
"IM",
|
|
107
|
+
"IN",
|
|
108
|
+
"IO",
|
|
109
|
+
"IQ",
|
|
110
|
+
"IR",
|
|
111
|
+
"IS",
|
|
112
|
+
"IT",
|
|
113
|
+
"JE",
|
|
114
|
+
"JM",
|
|
115
|
+
"JO",
|
|
116
|
+
"JP",
|
|
117
|
+
"KE",
|
|
118
|
+
"KG",
|
|
119
|
+
"KH",
|
|
120
|
+
"KI",
|
|
121
|
+
"KM",
|
|
122
|
+
"KN",
|
|
123
|
+
"KP",
|
|
124
|
+
"KR",
|
|
125
|
+
"KW",
|
|
126
|
+
"KY",
|
|
127
|
+
"KZ",
|
|
128
|
+
"LA",
|
|
129
|
+
"LB",
|
|
130
|
+
"LC",
|
|
131
|
+
"LI",
|
|
132
|
+
"LK",
|
|
133
|
+
"LR",
|
|
134
|
+
"LS",
|
|
135
|
+
"LT",
|
|
136
|
+
"LU",
|
|
137
|
+
"LV",
|
|
138
|
+
"LY",
|
|
139
|
+
"MA",
|
|
140
|
+
"MC",
|
|
141
|
+
"MD",
|
|
142
|
+
"ME",
|
|
143
|
+
"MF",
|
|
144
|
+
"MG",
|
|
145
|
+
"MH",
|
|
146
|
+
"MK",
|
|
147
|
+
"ML",
|
|
148
|
+
"MM",
|
|
149
|
+
"MN",
|
|
150
|
+
"MO",
|
|
151
|
+
"MP",
|
|
152
|
+
"MQ",
|
|
153
|
+
"MR",
|
|
154
|
+
"MS",
|
|
155
|
+
"MT",
|
|
156
|
+
"MU",
|
|
157
|
+
"MV",
|
|
158
|
+
"MW",
|
|
159
|
+
"MX",
|
|
160
|
+
"MY",
|
|
161
|
+
"MZ",
|
|
162
|
+
"NA",
|
|
163
|
+
"NC",
|
|
164
|
+
"NE",
|
|
165
|
+
"NF",
|
|
166
|
+
"NG",
|
|
167
|
+
"NI",
|
|
168
|
+
"NL",
|
|
169
|
+
"NO",
|
|
170
|
+
"NP",
|
|
171
|
+
"NR",
|
|
172
|
+
"NU",
|
|
173
|
+
"NZ",
|
|
174
|
+
"OM",
|
|
175
|
+
"PA",
|
|
176
|
+
"PE",
|
|
177
|
+
"PF",
|
|
178
|
+
"PG",
|
|
179
|
+
"PH",
|
|
180
|
+
"PK",
|
|
181
|
+
"PL",
|
|
182
|
+
"PM",
|
|
183
|
+
"PN",
|
|
184
|
+
"PR",
|
|
185
|
+
"PS",
|
|
186
|
+
"PT",
|
|
187
|
+
"PW",
|
|
188
|
+
"PY",
|
|
189
|
+
"QA",
|
|
190
|
+
"RE",
|
|
191
|
+
"RO",
|
|
192
|
+
"RS",
|
|
193
|
+
"RU",
|
|
194
|
+
"RW",
|
|
195
|
+
"SA",
|
|
196
|
+
"SB",
|
|
197
|
+
"SC",
|
|
198
|
+
"SD",
|
|
199
|
+
"SE",
|
|
200
|
+
"SG",
|
|
201
|
+
"SH",
|
|
202
|
+
"SI",
|
|
203
|
+
"SJ",
|
|
204
|
+
"SK",
|
|
205
|
+
"SL",
|
|
206
|
+
"SM",
|
|
207
|
+
"SN",
|
|
208
|
+
"SO",
|
|
209
|
+
"SR",
|
|
210
|
+
"SS",
|
|
211
|
+
"ST",
|
|
212
|
+
"SV",
|
|
213
|
+
"SX",
|
|
214
|
+
"SY",
|
|
215
|
+
"SZ",
|
|
216
|
+
"TC",
|
|
217
|
+
"TD",
|
|
218
|
+
"TF",
|
|
219
|
+
"TG",
|
|
220
|
+
"TH",
|
|
221
|
+
"TJ",
|
|
222
|
+
"TK",
|
|
223
|
+
"TL",
|
|
224
|
+
"TM",
|
|
225
|
+
"TN",
|
|
226
|
+
"TO",
|
|
227
|
+
"TR",
|
|
228
|
+
"TT",
|
|
229
|
+
"TV",
|
|
230
|
+
"TW",
|
|
231
|
+
"TZ",
|
|
232
|
+
"UA",
|
|
233
|
+
"UG",
|
|
234
|
+
"UM",
|
|
235
|
+
"US",
|
|
236
|
+
"UY",
|
|
237
|
+
"UZ",
|
|
238
|
+
"VA",
|
|
239
|
+
"VC",
|
|
240
|
+
"VE",
|
|
241
|
+
"VG",
|
|
242
|
+
"VI",
|
|
243
|
+
"VN",
|
|
244
|
+
"VU",
|
|
245
|
+
"WF",
|
|
246
|
+
"WS",
|
|
247
|
+
"YE",
|
|
248
|
+
"YT",
|
|
249
|
+
"ZA",
|
|
250
|
+
"ZM",
|
|
251
|
+
"ZW"
|
|
252
|
+
];
|
|
253
|
+
const isin_generator_cusip = generateCusip();
|
|
254
|
+
const generateIsin = (cusip)=>{
|
|
255
|
+
const code = countryCodes[Math.floor(Math.random() * countryCodes.length)];
|
|
256
|
+
const isin = code + cusip + generateIsinCheckDigit(code + cusip + "0");
|
|
257
|
+
return isin;
|
|
258
|
+
};
|
|
259
|
+
const generateIsinCheckDigit = (isin)=>{
|
|
260
|
+
if (12 != isin.length) return false;
|
|
261
|
+
const v = [];
|
|
262
|
+
for(let i = isin.length - 2; i >= 0; i--){
|
|
263
|
+
const c = isin.charAt(i);
|
|
264
|
+
if (isNaN(parseInt(c))) {
|
|
265
|
+
const letterCode = isin.charCodeAt(i) - 55;
|
|
266
|
+
v.push(letterCode % 10);
|
|
267
|
+
if (letterCode > 9) v.push(Math.floor(letterCode / 10));
|
|
268
|
+
} else v.push(Number(c));
|
|
269
|
+
}
|
|
270
|
+
let sum = 0;
|
|
271
|
+
const l = v.length;
|
|
272
|
+
for(let i = 0; i < l; i++)if (i % 2 == 0) {
|
|
273
|
+
const d = 2 * v[i];
|
|
274
|
+
sum += Math.floor(d / 10);
|
|
275
|
+
sum += d % 10;
|
|
276
|
+
} else sum += v[i];
|
|
277
|
+
return (10 - sum % 10) % 10;
|
|
278
|
+
};
|
|
279
|
+
const isinGenerator = ()=>generateIsin(isin_generator_cusip);
|
|
280
|
+
export { isinGenerator };
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
const locations = {
|
|
2
|
+
L: [
|
|
3
|
+
"London PLC",
|
|
4
|
+
"XLON/LSE-SETS"
|
|
5
|
+
],
|
|
6
|
+
N: [
|
|
7
|
+
"Corporation",
|
|
8
|
+
"XNGS/NAS-GSM"
|
|
9
|
+
],
|
|
10
|
+
AS: [
|
|
11
|
+
"B.V.",
|
|
12
|
+
"XAMS/ENA-MAIN"
|
|
13
|
+
],
|
|
14
|
+
OQ: [
|
|
15
|
+
"Co.",
|
|
16
|
+
"XNYS/NYS-MAIN"
|
|
17
|
+
],
|
|
18
|
+
PA: [
|
|
19
|
+
"Paris",
|
|
20
|
+
"PAR/EUR_FR"
|
|
21
|
+
],
|
|
22
|
+
MI: [
|
|
23
|
+
"Milan",
|
|
24
|
+
"MIL/EUR_IT"
|
|
25
|
+
],
|
|
26
|
+
FR: [
|
|
27
|
+
"Frankfurt",
|
|
28
|
+
"FR/EUR_DE"
|
|
29
|
+
],
|
|
30
|
+
AT: [
|
|
31
|
+
"Athens",
|
|
32
|
+
"AT/EUR_GR"
|
|
33
|
+
]
|
|
34
|
+
};
|
|
35
|
+
const suffixes = [
|
|
36
|
+
"L",
|
|
37
|
+
"N",
|
|
38
|
+
"OQ",
|
|
39
|
+
"AS",
|
|
40
|
+
"PA",
|
|
41
|
+
"MI",
|
|
42
|
+
"FR",
|
|
43
|
+
"AT"
|
|
44
|
+
];
|
|
45
|
+
export { locations, suffixes };
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { currencies } from "./currencies.js";
|
|
2
|
+
import { getRic } from "./instruments.js";
|
|
3
|
+
import { random } from "../../data-utils.js";
|
|
4
|
+
import { buildDataColumnMap } from "../../Table.js";
|
|
5
|
+
import { schemas } from "../simul-schemas.js";
|
|
6
|
+
import { sides } from "./sides.js";
|
|
7
|
+
import TableContainer from "../../core/table/TableContainer.js";
|
|
8
|
+
const traders = [
|
|
9
|
+
"Trader A",
|
|
10
|
+
"Trader B",
|
|
11
|
+
"Trader C"
|
|
12
|
+
];
|
|
13
|
+
const orderStatus = [
|
|
14
|
+
"Filled",
|
|
15
|
+
"Cancelled",
|
|
16
|
+
"New",
|
|
17
|
+
"Partial Exec",
|
|
18
|
+
"Booked",
|
|
19
|
+
"All Done"
|
|
20
|
+
];
|
|
21
|
+
const isComplete = (status)=>[
|
|
22
|
+
"Filled",
|
|
23
|
+
"All Done",
|
|
24
|
+
"Booked"
|
|
25
|
+
].includes(status);
|
|
26
|
+
const OrderColumnMap = {
|
|
27
|
+
ccy: 0,
|
|
28
|
+
created: 1,
|
|
29
|
+
filledQuantity: 2,
|
|
30
|
+
lastUpdate: 3,
|
|
31
|
+
orderId: 4,
|
|
32
|
+
quantity: 5,
|
|
33
|
+
ric: 6,
|
|
34
|
+
side: 7,
|
|
35
|
+
trader: 8
|
|
36
|
+
};
|
|
37
|
+
const ordersData = [];
|
|
38
|
+
const now = +new Date();
|
|
39
|
+
for(let i = 0; i < 100; i++){
|
|
40
|
+
const status = orderStatus[random(0, orderStatus.length - 1)];
|
|
41
|
+
const ccy = currencies[random(0, currencies.length - 1)];
|
|
42
|
+
const created = now;
|
|
43
|
+
const lastUpdate = now;
|
|
44
|
+
const orderId = `ORD${("0000" + i).slice(-4)}`;
|
|
45
|
+
const quantity = random(1000, 10000);
|
|
46
|
+
const filledQuantity = isComplete(status) ? quantity : "New" === status ? 0 : random(0, quantity);
|
|
47
|
+
const ric = getRic("AAP.L");
|
|
48
|
+
const side = sides[random(0, sides.length - 1)];
|
|
49
|
+
const trader = traders[random(0, traders.length - 1)];
|
|
50
|
+
ordersData.push([
|
|
51
|
+
status,
|
|
52
|
+
ccy,
|
|
53
|
+
created,
|
|
54
|
+
filledQuantity,
|
|
55
|
+
lastUpdate,
|
|
56
|
+
orderId,
|
|
57
|
+
quantity,
|
|
58
|
+
ric,
|
|
59
|
+
side,
|
|
60
|
+
trader
|
|
61
|
+
]);
|
|
62
|
+
}
|
|
63
|
+
const ordersTable = TableContainer.createTable(schemas.orders, ordersData, buildDataColumnMap(schemas, "orders"));
|
|
64
|
+
export { OrderColumnMap, ordersData, ordersTable };
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { Clock } from "@vuu-ui/vuu-utils";
|
|
2
|
+
import TableContainer from "../../core/table/TableContainer.js";
|
|
3
|
+
import { random } from "../../data-utils.js";
|
|
4
|
+
import { buildDataColumnMap } from "../../Table.js";
|
|
5
|
+
import { schemas } from "../simul-schemas.js";
|
|
6
|
+
import { accounts } from "./accounts.js";
|
|
7
|
+
import { algos } from "./algos.js";
|
|
8
|
+
import { instrumentsData } from "./instruments.js";
|
|
9
|
+
import { orderStatus as external_orderStatus_js_orderStatus } from "./orderStatus.js";
|
|
10
|
+
import { sides } from "./sides.js";
|
|
11
|
+
const instrumentMap = buildDataColumnMap(schemas, "instruments");
|
|
12
|
+
const PARENT_ORDER_COUNT = 5000;
|
|
13
|
+
const CHILD_ORDER_COUNT = 20000;
|
|
14
|
+
const avgChildOrderPerOrder = Math.round(CHILD_ORDER_COUNT / PARENT_ORDER_COUNT);
|
|
15
|
+
const childMaxMultiple = 10;
|
|
16
|
+
const clock = new Clock().goBack(120, "minutes");
|
|
17
|
+
const parentOrdersTable = TableContainer.createTable(schemas.parentOrders, [], buildDataColumnMap(schemas, "parentOrders"));
|
|
18
|
+
const childOrdersTable = TableContainer.createTable(schemas.childOrders, [], buildDataColumnMap(schemas, "childOrders"));
|
|
19
|
+
let parentOrderCount = 0;
|
|
20
|
+
let childOrderCount = 0;
|
|
21
|
+
let notifyNewOrders = false;
|
|
22
|
+
function createParentAndChildOrders() {
|
|
23
|
+
parentOrderCount += 1;
|
|
24
|
+
const instrument = instrumentsData[random(0, instrumentsData.length - 1)];
|
|
25
|
+
const orderQuantity = 1000 * random(1, 100);
|
|
26
|
+
const orderStatus = external_orderStatus_js_orderStatus[random(0, external_orderStatus_js_orderStatus.length - 1)];
|
|
27
|
+
const filledQty = "FILLED" === orderStatus ? orderQuantity : "NEW" === orderStatus ? 0 : orderQuantity - random(100, orderQuantity);
|
|
28
|
+
const openQty = orderQuantity - filledQty;
|
|
29
|
+
const account = accounts[random(0, accounts.length - 1)];
|
|
30
|
+
const algo = algos[random(0, algos.length - 1)];
|
|
31
|
+
const averagePrice = 0;
|
|
32
|
+
const ccy = "GBP";
|
|
33
|
+
const exchange = instrument[instrumentMap.exchange];
|
|
34
|
+
const parentOrderIdAsInt = parentOrderCount;
|
|
35
|
+
const parentOrderId = parentOrderCount.toString().padStart(10, "0");
|
|
36
|
+
const price = 100;
|
|
37
|
+
const quantity = orderQuantity;
|
|
38
|
+
const ric = instrument[instrumentMap.ric];
|
|
39
|
+
const side = sides[random(0, sides.length - 1)];
|
|
40
|
+
const status = orderStatus;
|
|
41
|
+
const volLimit = 100;
|
|
42
|
+
const lastUpdate = clock.now;
|
|
43
|
+
const created = clock.now;
|
|
44
|
+
const numberOfChildOrders = random(0, avgChildOrderPerOrder * random(1, childMaxMultiple));
|
|
45
|
+
let remainingQty = orderQuantity;
|
|
46
|
+
for(let j = 0; j < numberOfChildOrders; j++){
|
|
47
|
+
childOrderCount += 1;
|
|
48
|
+
const childOrderQuantity = Math.round(remainingQty / (childOrderCount - j));
|
|
49
|
+
remainingQty -= childOrderQuantity;
|
|
50
|
+
const childOrderStatus = external_orderStatus_js_orderStatus[random(0, external_orderStatus_js_orderStatus.length - 1)];
|
|
51
|
+
const childFilledQty = "FILLED" === orderStatus ? childOrderQuantity : "NEW" === childOrderStatus ? 0 : childOrderQuantity - random(100, childOrderQuantity);
|
|
52
|
+
const childOpenQty = childOrderQuantity - childFilledQty;
|
|
53
|
+
const averagePrice = 0;
|
|
54
|
+
const childIdAsInt = childOrderCount;
|
|
55
|
+
const childId = childOrderCount.toString().padStart(10, "0");
|
|
56
|
+
const lastUpdate = 0;
|
|
57
|
+
const price = 100;
|
|
58
|
+
const strategy = 0;
|
|
59
|
+
childOrdersTable.insert([
|
|
60
|
+
account,
|
|
61
|
+
averagePrice,
|
|
62
|
+
ccy,
|
|
63
|
+
exchange,
|
|
64
|
+
childFilledQty,
|
|
65
|
+
childId,
|
|
66
|
+
childIdAsInt,
|
|
67
|
+
childOpenQty,
|
|
68
|
+
parentOrderId,
|
|
69
|
+
price,
|
|
70
|
+
childOrderQuantity,
|
|
71
|
+
ric,
|
|
72
|
+
side,
|
|
73
|
+
childOrderStatus,
|
|
74
|
+
strategy,
|
|
75
|
+
volLimit,
|
|
76
|
+
lastUpdate,
|
|
77
|
+
created
|
|
78
|
+
], notifyNewOrders);
|
|
79
|
+
}
|
|
80
|
+
parentOrdersTable.insert([
|
|
81
|
+
account,
|
|
82
|
+
algo,
|
|
83
|
+
averagePrice,
|
|
84
|
+
ccy,
|
|
85
|
+
childOrderCount,
|
|
86
|
+
exchange,
|
|
87
|
+
filledQty,
|
|
88
|
+
parentOrderId,
|
|
89
|
+
parentOrderIdAsInt,
|
|
90
|
+
openQty,
|
|
91
|
+
price,
|
|
92
|
+
quantity,
|
|
93
|
+
ric,
|
|
94
|
+
side,
|
|
95
|
+
status,
|
|
96
|
+
volLimit,
|
|
97
|
+
lastUpdate,
|
|
98
|
+
created
|
|
99
|
+
], notifyNewOrders);
|
|
100
|
+
}
|
|
101
|
+
function createInitialOrders() {
|
|
102
|
+
for(let i = 0; i < PARENT_ORDER_COUNT; i++){
|
|
103
|
+
clock.advance(random(0, 100));
|
|
104
|
+
createParentAndChildOrders();
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
let newOrderInterval;
|
|
108
|
+
function startGeneratingNewOrders() {
|
|
109
|
+
newOrderInterval = setInterval(createParentAndChildOrders, 100);
|
|
110
|
+
}
|
|
111
|
+
function stopGeneratingNewOrders() {
|
|
112
|
+
clearInterval(newOrderInterval);
|
|
113
|
+
}
|
|
114
|
+
createInitialOrders();
|
|
115
|
+
clock.showCurrentTime = true;
|
|
116
|
+
notifyNewOrders = true;
|
|
117
|
+
export { childOrdersTable, parentOrdersTable, startGeneratingNewOrders, stopGeneratingNewOrders };
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { buildDataColumnMap } from "../../Table.js";
|
|
2
|
+
import { BaseUpdateGenerator } from "../../UpdateGenerator.js";
|
|
3
|
+
import { schemas } from "../simul-schemas.js";
|
|
4
|
+
import { InstrumentColumnMap, instrumentsData } from "./instruments.js";
|
|
5
|
+
import { random } from "../../data-utils.js";
|
|
6
|
+
import constituents from "../../basket/reference-data/constituents.js";
|
|
7
|
+
import TableContainer from "../../core/table/TableContainer.js";
|
|
8
|
+
const { bid: prices_bid, bidSize: prices_bidSize, ask: prices_ask, askSize: prices_askSize } = buildDataColumnMap(schemas, "prices");
|
|
9
|
+
const pricesUpdateGenerator = new BaseUpdateGenerator({
|
|
10
|
+
bid: prices_bid,
|
|
11
|
+
bidSize: prices_bidSize,
|
|
12
|
+
ask: prices_ask,
|
|
13
|
+
askSize: prices_askSize
|
|
14
|
+
});
|
|
15
|
+
const now = Date.now();
|
|
16
|
+
const prices_lastUpdate = now;
|
|
17
|
+
const prices_created = now;
|
|
18
|
+
const pricesData = instrumentsData.map((instrument)=>{
|
|
19
|
+
const spread = random(0, 10);
|
|
20
|
+
const ric = instrument[InstrumentColumnMap.ric];
|
|
21
|
+
const priceSeed = 100;
|
|
22
|
+
const ask = priceSeed + spread / 2;
|
|
23
|
+
const askSize = random(1000, 3000);
|
|
24
|
+
const bid = priceSeed - spread / 2;
|
|
25
|
+
const bidSize = random(1000, 3000);
|
|
26
|
+
const close = priceSeed + random(0, 1) / 10;
|
|
27
|
+
const last = priceSeed + random(0, 1) / 10;
|
|
28
|
+
const open = priceSeed + random(0, 1) / 10;
|
|
29
|
+
const phase = "C";
|
|
30
|
+
const scenario = "close";
|
|
31
|
+
const lastUpdate = now;
|
|
32
|
+
const created = now;
|
|
33
|
+
return [
|
|
34
|
+
ask,
|
|
35
|
+
askSize,
|
|
36
|
+
bid,
|
|
37
|
+
bidSize,
|
|
38
|
+
close,
|
|
39
|
+
last,
|
|
40
|
+
open,
|
|
41
|
+
phase,
|
|
42
|
+
ric,
|
|
43
|
+
scenario,
|
|
44
|
+
lastUpdate,
|
|
45
|
+
created
|
|
46
|
+
];
|
|
47
|
+
});
|
|
48
|
+
for (const [, , , lastTrade, ric] of constituents){
|
|
49
|
+
const priceSeed = parseFloat(String(lastTrade));
|
|
50
|
+
if (!isNaN(priceSeed)) {
|
|
51
|
+
const spread = random(0, 10);
|
|
52
|
+
const ask = priceSeed + spread / 2;
|
|
53
|
+
const askSize = random(1000, 3000);
|
|
54
|
+
const bid = priceSeed - spread / 2;
|
|
55
|
+
const bidSize = random(1000, 3000);
|
|
56
|
+
const close = priceSeed + random(0, 1) / 10;
|
|
57
|
+
const last = priceSeed + random(0, 1) / 10;
|
|
58
|
+
const open = priceSeed + random(0, 1) / 10;
|
|
59
|
+
const phase = "C";
|
|
60
|
+
const scenario = "close";
|
|
61
|
+
pricesData.push([
|
|
62
|
+
ask,
|
|
63
|
+
askSize,
|
|
64
|
+
bid,
|
|
65
|
+
bidSize,
|
|
66
|
+
close,
|
|
67
|
+
last,
|
|
68
|
+
open,
|
|
69
|
+
phase,
|
|
70
|
+
ric,
|
|
71
|
+
scenario,
|
|
72
|
+
prices_lastUpdate,
|
|
73
|
+
prices_created
|
|
74
|
+
]);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const pricesTable = TableContainer.createTable(schemas.prices, pricesData, buildDataColumnMap(schemas, "prices"), pricesUpdateGenerator);
|
|
78
|
+
export { pricesData, pricesTable };
|