topstepx-api 1.0.2 → 2.0.0
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/CHANGELOG.md +151 -0
- package/MIGRATION.md +515 -0
- package/README.md +143 -38
- package/dist/index.cjs +605 -95
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +346 -197
- package/dist/index.d.ts +346 -197
- package/dist/index.js +599 -88
- package/dist/index.js.map +1 -1
- package/package.json +5 -2
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { HubConnectionBuilder, HttpTransportType, HubConnectionState } from '@microsoft/signalr';
|
|
2
2
|
|
|
3
|
-
// src/errors/base
|
|
3
|
+
// src/errors/base.error.ts
|
|
4
4
|
var TopstepXError = class extends Error {
|
|
5
5
|
constructor(message, code) {
|
|
6
6
|
super(message);
|
|
@@ -20,14 +20,14 @@ var TopstepXError = class extends Error {
|
|
|
20
20
|
}
|
|
21
21
|
};
|
|
22
22
|
|
|
23
|
-
// src/errors/auth
|
|
23
|
+
// src/errors/auth.error.ts
|
|
24
24
|
var AuthenticationError = class extends TopstepXError {
|
|
25
25
|
constructor(message, code) {
|
|
26
26
|
super(message, code);
|
|
27
27
|
}
|
|
28
28
|
};
|
|
29
29
|
|
|
30
|
-
// src/errors/api
|
|
30
|
+
// src/errors/api.error.ts
|
|
31
31
|
var ApiError = class extends TopstepXError {
|
|
32
32
|
constructor(message, code, endpoint) {
|
|
33
33
|
super(message, code);
|
|
@@ -41,7 +41,7 @@ var ApiError = class extends TopstepXError {
|
|
|
41
41
|
}
|
|
42
42
|
};
|
|
43
43
|
|
|
44
|
-
// src/errors/connection
|
|
44
|
+
// src/errors/connection.error.ts
|
|
45
45
|
var ConnectionError = class extends TopstepXError {
|
|
46
46
|
constructor(message) {
|
|
47
47
|
super(message);
|
|
@@ -132,9 +132,7 @@ var AuthService = class {
|
|
|
132
132
|
}
|
|
133
133
|
setTokenExpiration() {
|
|
134
134
|
const expiration = /* @__PURE__ */ new Date();
|
|
135
|
-
expiration.setHours(
|
|
136
|
-
expiration.getHours() + this.config.tokenValidityHours
|
|
137
|
-
);
|
|
135
|
+
expiration.setHours(expiration.getHours() + this.config.tokenValidityHours);
|
|
138
136
|
this.tokenExpiration = expiration;
|
|
139
137
|
}
|
|
140
138
|
isTokenExpired() {
|
|
@@ -291,10 +289,7 @@ var OrderApi = class {
|
|
|
291
289
|
* ```
|
|
292
290
|
*/
|
|
293
291
|
async place(request) {
|
|
294
|
-
return this.http.post(
|
|
295
|
-
"/api/Order/place",
|
|
296
|
-
request
|
|
297
|
-
);
|
|
292
|
+
return this.http.post("/api/Order/place", request);
|
|
298
293
|
}
|
|
299
294
|
/**
|
|
300
295
|
* Cancel an existing order.
|
|
@@ -302,10 +297,7 @@ var OrderApi = class {
|
|
|
302
297
|
* @returns Response indicating success or failure
|
|
303
298
|
*/
|
|
304
299
|
async cancel(request) {
|
|
305
|
-
return this.http.post(
|
|
306
|
-
"/api/Order/cancel",
|
|
307
|
-
request
|
|
308
|
-
);
|
|
300
|
+
return this.http.post("/api/Order/cancel", request);
|
|
309
301
|
}
|
|
310
302
|
/**
|
|
311
303
|
* Modify an existing order's size or price.
|
|
@@ -313,10 +305,7 @@ var OrderApi = class {
|
|
|
313
305
|
* @returns Response indicating success or failure
|
|
314
306
|
*/
|
|
315
307
|
async modify(request) {
|
|
316
|
-
return this.http.post(
|
|
317
|
-
"/api/Order/modify",
|
|
318
|
-
request
|
|
319
|
-
);
|
|
308
|
+
return this.http.post("/api/Order/modify", request);
|
|
320
309
|
}
|
|
321
310
|
};
|
|
322
311
|
|
|
@@ -330,10 +319,7 @@ var PositionApi = class {
|
|
|
330
319
|
return response;
|
|
331
320
|
}
|
|
332
321
|
async close(request) {
|
|
333
|
-
return this.http.post(
|
|
334
|
-
"/api/Position/closeContract",
|
|
335
|
-
request
|
|
336
|
-
);
|
|
322
|
+
return this.http.post("/api/Position/closeContract", request);
|
|
337
323
|
}
|
|
338
324
|
async partialClose(request) {
|
|
339
325
|
return this.http.post("/api/Position/partialCloseContract", request);
|
|
@@ -366,6 +352,533 @@ var ContractApi = class {
|
|
|
366
352
|
}
|
|
367
353
|
};
|
|
368
354
|
|
|
355
|
+
// src/rest/contract/cme/cme.contract.constants.ts
|
|
356
|
+
var CME_CONTRACTS = (
|
|
357
|
+
// Grouped by contract market sector
|
|
358
|
+
[
|
|
359
|
+
// Per the CME Group futures contracts which Topstep
|
|
360
|
+
// allows its traders to buy/sell positions on
|
|
361
|
+
// https://help.topstep.com/en/articles/8284206-when-and-what-products-can-i-trade#h_fc99007dde
|
|
362
|
+
// Equity
|
|
363
|
+
{
|
|
364
|
+
symbol: "ES" /* E_MINI_SP_500 */,
|
|
365
|
+
name: "E-mini S&P 500",
|
|
366
|
+
sector: "Equity" /* EQUITY */,
|
|
367
|
+
exchange: 0 /* CME */,
|
|
368
|
+
tickSize: 0.25,
|
|
369
|
+
tickValue: 12.5,
|
|
370
|
+
roundTripFees: 2.8
|
|
371
|
+
},
|
|
372
|
+
{
|
|
373
|
+
symbol: "MES" /* MICRO_E_MINI_SP_500 */,
|
|
374
|
+
name: "Micro E-mini S&P 500",
|
|
375
|
+
sector: "Equity" /* EQUITY */,
|
|
376
|
+
exchange: 0 /* CME */,
|
|
377
|
+
tickSize: 0.25,
|
|
378
|
+
tickValue: 1.25,
|
|
379
|
+
roundTripFees: 0.74
|
|
380
|
+
},
|
|
381
|
+
{
|
|
382
|
+
symbol: "NQ" /* E_MINI_NASDAQ */,
|
|
383
|
+
name: "E-mini NASDAQ 100",
|
|
384
|
+
sector: "Equity" /* EQUITY */,
|
|
385
|
+
exchange: 0 /* CME */,
|
|
386
|
+
tickSize: 0.25,
|
|
387
|
+
tickValue: 5,
|
|
388
|
+
roundTripFees: 2.8
|
|
389
|
+
},
|
|
390
|
+
{
|
|
391
|
+
symbol: "MNQ" /* MICRO_E_MINI_NASDAQ */,
|
|
392
|
+
name: "Micro E-mini NASDAQ 100",
|
|
393
|
+
sector: "Equity" /* EQUITY */,
|
|
394
|
+
exchange: 0 /* CME */,
|
|
395
|
+
tickSize: 0.25,
|
|
396
|
+
tickValue: 0.5,
|
|
397
|
+
roundTripFees: 0.74
|
|
398
|
+
},
|
|
399
|
+
{
|
|
400
|
+
symbol: "RTY" /* E_MINI_RUSSELL */,
|
|
401
|
+
name: "E-mini Russell 2000",
|
|
402
|
+
sector: "Equity" /* EQUITY */,
|
|
403
|
+
exchange: 0 /* CME */,
|
|
404
|
+
tickSize: 0.1,
|
|
405
|
+
tickValue: 5,
|
|
406
|
+
roundTripFees: 2.8
|
|
407
|
+
},
|
|
408
|
+
{
|
|
409
|
+
symbol: "M2K" /* MICRO_E_MINI_RUSSELL */,
|
|
410
|
+
name: "Micro E-mini Russell 2000",
|
|
411
|
+
sector: "Equity" /* EQUITY */,
|
|
412
|
+
exchange: 0 /* CME */,
|
|
413
|
+
tickSize: 0.1,
|
|
414
|
+
tickValue: 0.25,
|
|
415
|
+
roundTripFees: 0.74
|
|
416
|
+
},
|
|
417
|
+
{
|
|
418
|
+
symbol: "NKD" /* NIKKEI */,
|
|
419
|
+
name: "Nikkei NKD",
|
|
420
|
+
sector: "Equity" /* EQUITY */,
|
|
421
|
+
exchange: 0 /* CME */,
|
|
422
|
+
tickSize: 5,
|
|
423
|
+
tickValue: 25,
|
|
424
|
+
roundTripFees: 4.34
|
|
425
|
+
},
|
|
426
|
+
{
|
|
427
|
+
symbol: "YM" /* MINI_DOW */,
|
|
428
|
+
name: "Mini-DOW",
|
|
429
|
+
sector: "Equity" /* EQUITY */,
|
|
430
|
+
exchange: 1 /* CBOT */,
|
|
431
|
+
tickSize: 1,
|
|
432
|
+
tickValue: 5,
|
|
433
|
+
roundTripFees: 2.8
|
|
434
|
+
},
|
|
435
|
+
{
|
|
436
|
+
symbol: "MYM" /* MICRO_MINI_DOW */,
|
|
437
|
+
name: "Micro Mini-DOW",
|
|
438
|
+
sector: "Equity" /* EQUITY */,
|
|
439
|
+
exchange: 1 /* CBOT */,
|
|
440
|
+
tickSize: 1,
|
|
441
|
+
tickValue: 0.5,
|
|
442
|
+
roundTripFees: 0.74
|
|
443
|
+
},
|
|
444
|
+
// Foreign Exchange
|
|
445
|
+
{
|
|
446
|
+
symbol: "6A" /* AUD_USD */,
|
|
447
|
+
name: "Australian $",
|
|
448
|
+
sector: "Foreign Exchange" /* FOREIGN_EXCHANGE */,
|
|
449
|
+
exchange: 0 /* CME */,
|
|
450
|
+
tickSize: 5e-5,
|
|
451
|
+
tickValue: 5,
|
|
452
|
+
roundTripFees: 3.24
|
|
453
|
+
},
|
|
454
|
+
{
|
|
455
|
+
symbol: "M6A" /* MICRO_AUD_USD */,
|
|
456
|
+
name: "Micro AUD/USD",
|
|
457
|
+
sector: "Foreign Exchange" /* FOREIGN_EXCHANGE */,
|
|
458
|
+
exchange: 0 /* CME */,
|
|
459
|
+
tickSize: 5e-5,
|
|
460
|
+
tickValue: 0.5,
|
|
461
|
+
roundTripFees: 0.52
|
|
462
|
+
},
|
|
463
|
+
{
|
|
464
|
+
symbol: "6B" /* GBP_USD */,
|
|
465
|
+
name: "British Pound",
|
|
466
|
+
sector: "Foreign Exchange" /* FOREIGN_EXCHANGE */,
|
|
467
|
+
exchange: 0 /* CME */,
|
|
468
|
+
tickSize: 1e-4,
|
|
469
|
+
tickValue: 6.25,
|
|
470
|
+
roundTripFees: 3.24
|
|
471
|
+
},
|
|
472
|
+
{
|
|
473
|
+
symbol: "M6B" /* MICRO_GBP_USD */,
|
|
474
|
+
name: "Micro GBP/USD",
|
|
475
|
+
sector: "Foreign Exchange" /* FOREIGN_EXCHANGE */,
|
|
476
|
+
exchange: 0 /* CME */,
|
|
477
|
+
tickSize: 1e-4,
|
|
478
|
+
tickValue: 0.625,
|
|
479
|
+
roundTripFees: 0.52
|
|
480
|
+
},
|
|
481
|
+
{
|
|
482
|
+
symbol: "6C" /* CAD_USD */,
|
|
483
|
+
name: "Canadian $",
|
|
484
|
+
sector: "Foreign Exchange" /* FOREIGN_EXCHANGE */,
|
|
485
|
+
exchange: 0 /* CME */,
|
|
486
|
+
tickSize: 5e-5,
|
|
487
|
+
tickValue: 5,
|
|
488
|
+
roundTripFees: 3.24
|
|
489
|
+
},
|
|
490
|
+
{
|
|
491
|
+
symbol: "6E" /* EUR_USD */,
|
|
492
|
+
name: "Euro FX",
|
|
493
|
+
sector: "Foreign Exchange" /* FOREIGN_EXCHANGE */,
|
|
494
|
+
exchange: 0 /* CME */,
|
|
495
|
+
tickSize: 5e-5,
|
|
496
|
+
tickValue: 6.25,
|
|
497
|
+
roundTripFees: 3.24
|
|
498
|
+
},
|
|
499
|
+
{
|
|
500
|
+
symbol: "M6E" /* MICRO_EUR_USD */,
|
|
501
|
+
name: "Micro Euro FX",
|
|
502
|
+
sector: "Foreign Exchange" /* FOREIGN_EXCHANGE */,
|
|
503
|
+
exchange: 0 /* CME */,
|
|
504
|
+
tickSize: 5e-5,
|
|
505
|
+
tickValue: 0.625,
|
|
506
|
+
roundTripFees: 0.52
|
|
507
|
+
},
|
|
508
|
+
{
|
|
509
|
+
symbol: "E7" /* E_MINI_EUR_USD */,
|
|
510
|
+
name: "E-mini Euro FX",
|
|
511
|
+
sector: "Foreign Exchange" /* FOREIGN_EXCHANGE */,
|
|
512
|
+
exchange: 0 /* CME */,
|
|
513
|
+
tickSize: 1e-4,
|
|
514
|
+
tickValue: 6.25,
|
|
515
|
+
roundTripFees: 1.74
|
|
516
|
+
},
|
|
517
|
+
{
|
|
518
|
+
symbol: "6J" /* JPY_USD */,
|
|
519
|
+
name: "Japanese Yen",
|
|
520
|
+
sector: "Foreign Exchange" /* FOREIGN_EXCHANGE */,
|
|
521
|
+
exchange: 0 /* CME */,
|
|
522
|
+
tickSize: 5e-7,
|
|
523
|
+
tickValue: 6.25,
|
|
524
|
+
roundTripFees: 3.24
|
|
525
|
+
},
|
|
526
|
+
{
|
|
527
|
+
symbol: "6S" /* CHF_USD */,
|
|
528
|
+
name: "Swiss Franc",
|
|
529
|
+
sector: "Foreign Exchange" /* FOREIGN_EXCHANGE */,
|
|
530
|
+
exchange: 0 /* CME */,
|
|
531
|
+
tickSize: 1e-4,
|
|
532
|
+
tickValue: 12.5,
|
|
533
|
+
roundTripFees: 3.24
|
|
534
|
+
},
|
|
535
|
+
{
|
|
536
|
+
symbol: "6M" /* MXN_USD */,
|
|
537
|
+
name: "Mexican Peso",
|
|
538
|
+
sector: "Foreign Exchange" /* FOREIGN_EXCHANGE */,
|
|
539
|
+
exchange: 0 /* CME */,
|
|
540
|
+
tickSize: 25e-6,
|
|
541
|
+
tickValue: 12.5,
|
|
542
|
+
roundTripFees: 3.24
|
|
543
|
+
},
|
|
544
|
+
{
|
|
545
|
+
symbol: "6N" /* NZD_USD */,
|
|
546
|
+
name: "New Zealand $",
|
|
547
|
+
sector: "Foreign Exchange" /* FOREIGN_EXCHANGE */,
|
|
548
|
+
exchange: 0 /* CME */,
|
|
549
|
+
tickSize: 1e-4,
|
|
550
|
+
tickValue: 10,
|
|
551
|
+
roundTripFees: 3.24
|
|
552
|
+
},
|
|
553
|
+
// Live Stock
|
|
554
|
+
{
|
|
555
|
+
symbol: "HE" /* LEAN_HOGS */,
|
|
556
|
+
name: "Lean Hogs",
|
|
557
|
+
sector: "Live Stock" /* LIVE_STOCK */,
|
|
558
|
+
exchange: 0 /* CME */,
|
|
559
|
+
tickSize: 25e-5,
|
|
560
|
+
tickValue: 10,
|
|
561
|
+
roundTripFees: 4.24
|
|
562
|
+
},
|
|
563
|
+
{
|
|
564
|
+
symbol: "LE" /* LIVE_CATTLE */,
|
|
565
|
+
name: "Live Cattle",
|
|
566
|
+
sector: "Live Stock" /* LIVE_STOCK */,
|
|
567
|
+
exchange: 0 /* CME */,
|
|
568
|
+
tickSize: 25e-5,
|
|
569
|
+
tickValue: 10,
|
|
570
|
+
roundTripFees: 4.24
|
|
571
|
+
},
|
|
572
|
+
// Crops
|
|
573
|
+
{
|
|
574
|
+
symbol: "ZC" /* CORN */,
|
|
575
|
+
name: "Corn",
|
|
576
|
+
sector: "Crops" /* CROPS */,
|
|
577
|
+
exchange: 1 /* CBOT */,
|
|
578
|
+
tickSize: 0.25,
|
|
579
|
+
tickValue: 12.5,
|
|
580
|
+
roundTripFees: 4.3
|
|
581
|
+
},
|
|
582
|
+
{
|
|
583
|
+
symbol: "ZW" /* WHEAT */,
|
|
584
|
+
name: "Wheat",
|
|
585
|
+
sector: "Crops" /* CROPS */,
|
|
586
|
+
exchange: 1 /* CBOT */,
|
|
587
|
+
tickSize: 0.25,
|
|
588
|
+
tickValue: 12.5,
|
|
589
|
+
roundTripFees: 4.3
|
|
590
|
+
},
|
|
591
|
+
{
|
|
592
|
+
symbol: "ZS" /* SOYBEANS */,
|
|
593
|
+
name: "Soybeans",
|
|
594
|
+
sector: "Crops" /* CROPS */,
|
|
595
|
+
exchange: 1 /* CBOT */,
|
|
596
|
+
tickSize: 0.25,
|
|
597
|
+
tickValue: 12.5,
|
|
598
|
+
roundTripFees: 4.3
|
|
599
|
+
},
|
|
600
|
+
{
|
|
601
|
+
symbol: "ZM" /* SOYBEAN_MEAL */,
|
|
602
|
+
name: "Soybean Meal",
|
|
603
|
+
sector: "Crops" /* CROPS */,
|
|
604
|
+
exchange: 1 /* CBOT */,
|
|
605
|
+
tickSize: 0.1,
|
|
606
|
+
tickValue: 10,
|
|
607
|
+
roundTripFees: 4.3
|
|
608
|
+
},
|
|
609
|
+
{
|
|
610
|
+
symbol: "ZL" /* SOYBEAN_OIL */,
|
|
611
|
+
name: "Soybean Oil",
|
|
612
|
+
sector: "Crops" /* CROPS */,
|
|
613
|
+
exchange: 1 /* CBOT */,
|
|
614
|
+
tickSize: 0.01,
|
|
615
|
+
tickValue: 6,
|
|
616
|
+
roundTripFees: 4.3
|
|
617
|
+
},
|
|
618
|
+
// Gas & Oil
|
|
619
|
+
{
|
|
620
|
+
symbol: "NG" /* NATURAL_GAS */,
|
|
621
|
+
name: "Natural Gas",
|
|
622
|
+
sector: "Gas & Oil" /* GAS_AND_OIL */,
|
|
623
|
+
exchange: 3 /* NYMEX */,
|
|
624
|
+
tickSize: 1e-3,
|
|
625
|
+
tickValue: 10,
|
|
626
|
+
roundTripFees: 3.2
|
|
627
|
+
},
|
|
628
|
+
{
|
|
629
|
+
symbol: "MNG" /* MICRO_NATURAL_GAS */,
|
|
630
|
+
name: "Micro Henry Hub Natural Gas",
|
|
631
|
+
sector: "Gas & Oil" /* GAS_AND_OIL */,
|
|
632
|
+
exchange: 3 /* NYMEX */,
|
|
633
|
+
tickSize: 1e-3,
|
|
634
|
+
tickValue: 1,
|
|
635
|
+
roundTripFees: 1.24
|
|
636
|
+
},
|
|
637
|
+
{
|
|
638
|
+
symbol: "QG" /* E_MINI_NATURAL_GAS */,
|
|
639
|
+
name: "E-mini Natural Gas",
|
|
640
|
+
sector: "Gas & Oil" /* GAS_AND_OIL */,
|
|
641
|
+
exchange: 3 /* NYMEX */,
|
|
642
|
+
tickSize: 5e-3,
|
|
643
|
+
tickValue: 12.5,
|
|
644
|
+
roundTripFees: 1.04
|
|
645
|
+
},
|
|
646
|
+
{
|
|
647
|
+
symbol: "RB" /* RBOB_GASOLINE */,
|
|
648
|
+
name: "RBOB Gasoline",
|
|
649
|
+
sector: "Gas & Oil" /* GAS_AND_OIL */,
|
|
650
|
+
exchange: 3 /* NYMEX */,
|
|
651
|
+
tickSize: 1e-4,
|
|
652
|
+
tickValue: 4.2,
|
|
653
|
+
roundTripFees: 3.04
|
|
654
|
+
},
|
|
655
|
+
{
|
|
656
|
+
symbol: "CL" /* CRUDE_OIL */,
|
|
657
|
+
name: "Crude Oil",
|
|
658
|
+
sector: "Gas & Oil" /* GAS_AND_OIL */,
|
|
659
|
+
exchange: 3 /* NYMEX */,
|
|
660
|
+
tickSize: 0.01,
|
|
661
|
+
tickValue: 10,
|
|
662
|
+
roundTripFees: 3.04
|
|
663
|
+
},
|
|
664
|
+
{
|
|
665
|
+
symbol: "MCL" /* MICRO_CRUDE_OIL */,
|
|
666
|
+
name: "Micro Crude Oil",
|
|
667
|
+
sector: "Gas & Oil" /* GAS_AND_OIL */,
|
|
668
|
+
exchange: 3 /* NYMEX */,
|
|
669
|
+
tickSize: 0.01,
|
|
670
|
+
tickValue: 1,
|
|
671
|
+
roundTripFees: 1.04
|
|
672
|
+
},
|
|
673
|
+
{
|
|
674
|
+
symbol: "QM" /* E_MINI_CRUDE_OIL */,
|
|
675
|
+
name: "E-mini Crude Oil",
|
|
676
|
+
sector: "Gas & Oil" /* GAS_AND_OIL */,
|
|
677
|
+
exchange: 3 /* NYMEX */,
|
|
678
|
+
tickSize: 0.025,
|
|
679
|
+
tickValue: 12.5,
|
|
680
|
+
roundTripFees: 2.44
|
|
681
|
+
},
|
|
682
|
+
{
|
|
683
|
+
symbol: "HO" /* HEATING_OIL */,
|
|
684
|
+
name: "Heating Oil",
|
|
685
|
+
sector: "Gas & Oil" /* GAS_AND_OIL */,
|
|
686
|
+
exchange: 3 /* NYMEX */,
|
|
687
|
+
tickSize: 1e-4,
|
|
688
|
+
tickValue: 4.2,
|
|
689
|
+
roundTripFees: 3.04
|
|
690
|
+
},
|
|
691
|
+
// Notes & Bonds
|
|
692
|
+
{
|
|
693
|
+
symbol: "ZT" /* TWO_YEAR_NOTE */,
|
|
694
|
+
name: "2-Year Note",
|
|
695
|
+
sector: "Notes & Bonds" /* NOTES_AND_BONDS */,
|
|
696
|
+
exchange: 1 /* CBOT */,
|
|
697
|
+
tickSize: 78125e-7,
|
|
698
|
+
tickValue: 15.625,
|
|
699
|
+
roundTripFees: 1.34
|
|
700
|
+
},
|
|
701
|
+
{
|
|
702
|
+
symbol: "ZF" /* FIVE_YEAR_NOTE */,
|
|
703
|
+
name: "5-Year Note",
|
|
704
|
+
sector: "Notes & Bonds" /* NOTES_AND_BONDS */,
|
|
705
|
+
exchange: 1 /* CBOT */,
|
|
706
|
+
tickSize: 78125e-7,
|
|
707
|
+
tickValue: 15.625,
|
|
708
|
+
roundTripFees: 1.34
|
|
709
|
+
},
|
|
710
|
+
{
|
|
711
|
+
symbol: "ZN" /* TEN_YEAR_NOTE */,
|
|
712
|
+
name: "10-Year Note",
|
|
713
|
+
sector: "Notes & Bonds" /* NOTES_AND_BONDS */,
|
|
714
|
+
exchange: 1 /* CBOT */,
|
|
715
|
+
tickSize: 0.015625,
|
|
716
|
+
tickValue: 15.625,
|
|
717
|
+
roundTripFees: 1.6
|
|
718
|
+
},
|
|
719
|
+
{
|
|
720
|
+
symbol: "TN" /* TEN_YEAR_ULTRA_NOTE */,
|
|
721
|
+
name: "10-Year Ultra-Note",
|
|
722
|
+
sector: "Notes & Bonds" /* NOTES_AND_BONDS */,
|
|
723
|
+
exchange: 1 /* CBOT */,
|
|
724
|
+
tickSize: 0.015625,
|
|
725
|
+
tickValue: 15.625,
|
|
726
|
+
roundTripFees: 1.64
|
|
727
|
+
},
|
|
728
|
+
{
|
|
729
|
+
symbol: "ZB" /* THIRTY_YEAR_BOND */,
|
|
730
|
+
name: "30-Year Bond",
|
|
731
|
+
sector: "Notes & Bonds" /* NOTES_AND_BONDS */,
|
|
732
|
+
exchange: 1 /* CBOT */,
|
|
733
|
+
tickSize: 0.03125,
|
|
734
|
+
tickValue: 31.25,
|
|
735
|
+
roundTripFees: 1.78
|
|
736
|
+
},
|
|
737
|
+
{
|
|
738
|
+
symbol: "UB" /* ULTRA_BOND */,
|
|
739
|
+
name: "Ultra-Bond",
|
|
740
|
+
sector: "Notes & Bonds" /* NOTES_AND_BONDS */,
|
|
741
|
+
exchange: 1 /* CBOT */,
|
|
742
|
+
tickSize: 0.03125,
|
|
743
|
+
tickValue: 31.25,
|
|
744
|
+
roundTripFees: 1.94
|
|
745
|
+
},
|
|
746
|
+
// Metals
|
|
747
|
+
{
|
|
748
|
+
symbol: "GC" /* GOLD */,
|
|
749
|
+
name: "Gold",
|
|
750
|
+
sector: "Metals" /* METALS */,
|
|
751
|
+
exchange: 2 /* COMEX */,
|
|
752
|
+
tickSize: 0.1,
|
|
753
|
+
tickValue: 10,
|
|
754
|
+
roundTripFees: 3.24
|
|
755
|
+
},
|
|
756
|
+
{
|
|
757
|
+
symbol: "MGC" /* MICRO_GOLD */,
|
|
758
|
+
name: "Micro Gold",
|
|
759
|
+
sector: "Metals" /* METALS */,
|
|
760
|
+
exchange: 2 /* COMEX */,
|
|
761
|
+
tickSize: 0.1,
|
|
762
|
+
tickValue: 1,
|
|
763
|
+
roundTripFees: 1.24
|
|
764
|
+
},
|
|
765
|
+
{
|
|
766
|
+
symbol: "SI" /* SILVER */,
|
|
767
|
+
name: "Silver",
|
|
768
|
+
sector: "Metals" /* METALS */,
|
|
769
|
+
exchange: 2 /* COMEX */,
|
|
770
|
+
tickSize: 5e-3,
|
|
771
|
+
tickValue: 25,
|
|
772
|
+
roundTripFees: 3.24
|
|
773
|
+
},
|
|
774
|
+
{
|
|
775
|
+
symbol: "SIL" /* MICRO_SILVER */,
|
|
776
|
+
name: "Micro Silver",
|
|
777
|
+
sector: "Metals" /* METALS */,
|
|
778
|
+
exchange: 2 /* COMEX */,
|
|
779
|
+
tickSize: 5e-3,
|
|
780
|
+
tickValue: 2.5,
|
|
781
|
+
roundTripFees: 2.04
|
|
782
|
+
},
|
|
783
|
+
{
|
|
784
|
+
symbol: "HG" /* COPPER */,
|
|
785
|
+
name: "Copper",
|
|
786
|
+
sector: "Metals" /* METALS */,
|
|
787
|
+
exchange: 2 /* COMEX */,
|
|
788
|
+
tickSize: 5e-4,
|
|
789
|
+
tickValue: 12.5,
|
|
790
|
+
roundTripFees: 3.24
|
|
791
|
+
},
|
|
792
|
+
{
|
|
793
|
+
symbol: "MHG" /* MICRO_COPPER */,
|
|
794
|
+
name: "Micro Copper",
|
|
795
|
+
sector: "Metals" /* METALS */,
|
|
796
|
+
exchange: 2 /* COMEX */,
|
|
797
|
+
tickSize: 5e-4,
|
|
798
|
+
tickValue: 1.25,
|
|
799
|
+
roundTripFees: 1.24
|
|
800
|
+
},
|
|
801
|
+
{
|
|
802
|
+
symbol: "PL" /* PLATINUM */,
|
|
803
|
+
name: "Platinum",
|
|
804
|
+
sector: "Metals" /* METALS */,
|
|
805
|
+
exchange: 3 /* NYMEX */,
|
|
806
|
+
tickSize: 0.1,
|
|
807
|
+
tickValue: 5,
|
|
808
|
+
roundTripFees: 3.24
|
|
809
|
+
},
|
|
810
|
+
// Crypto
|
|
811
|
+
{
|
|
812
|
+
symbol: "MBT" /* MICRO_BITCOIN */,
|
|
813
|
+
name: "Micro Bitcoin",
|
|
814
|
+
sector: "Crypto" /* CRYPTO */,
|
|
815
|
+
exchange: 0 /* CME */,
|
|
816
|
+
tickSize: 5,
|
|
817
|
+
tickValue: 0.5,
|
|
818
|
+
roundTripFees: 2.34
|
|
819
|
+
},
|
|
820
|
+
{
|
|
821
|
+
symbol: "MET" /* MICRO_ETHER */,
|
|
822
|
+
name: "Micro Ether",
|
|
823
|
+
sector: "Crypto" /* CRYPTO */,
|
|
824
|
+
exchange: 0 /* CME */,
|
|
825
|
+
tickSize: 0.25,
|
|
826
|
+
tickValue: 0.125,
|
|
827
|
+
roundTripFees: 0.24
|
|
828
|
+
}
|
|
829
|
+
]
|
|
830
|
+
);
|
|
831
|
+
|
|
832
|
+
// src/rest/contract/cme/cme.contract.store.ts
|
|
833
|
+
var CmeContractStore = class {
|
|
834
|
+
static getContracts() {
|
|
835
|
+
return CME_CONTRACTS;
|
|
836
|
+
}
|
|
837
|
+
static getContractsBySector() {
|
|
838
|
+
const sectors = [...new Set(CME_CONTRACTS.map((c) => c.sector))];
|
|
839
|
+
return sectors.map((sector) => ({
|
|
840
|
+
sector,
|
|
841
|
+
contracts: CME_CONTRACTS.filter((c) => c.sector === sector)
|
|
842
|
+
}));
|
|
843
|
+
}
|
|
844
|
+
static getContractBySymbol(symbol) {
|
|
845
|
+
return CME_CONTRACTS.find((c) => c.symbol === symbol);
|
|
846
|
+
}
|
|
847
|
+
static getSectors() {
|
|
848
|
+
return [...new Set(CME_CONTRACTS.map((c) => c.sector))];
|
|
849
|
+
}
|
|
850
|
+
static matchTradeNameToContract(trade) {
|
|
851
|
+
const contractSymbol = trade.contractId.substring(0, 3).toUpperCase();
|
|
852
|
+
const contract = CME_CONTRACTS.find((c) => c.symbol === contractSymbol);
|
|
853
|
+
if (!contract) {
|
|
854
|
+
const twoCharCode = contractSymbol.substring(0, 2);
|
|
855
|
+
return CME_CONTRACTS.find((c) => c.symbol === twoCharCode);
|
|
856
|
+
}
|
|
857
|
+
return contract;
|
|
858
|
+
}
|
|
859
|
+
static groupTradesBySector(trades = []) {
|
|
860
|
+
const sectorMap = /* @__PURE__ */ new Map();
|
|
861
|
+
this.getSectors().forEach((sector) => {
|
|
862
|
+
sectorMap.set(sector, []);
|
|
863
|
+
});
|
|
864
|
+
trades.forEach((trade) => {
|
|
865
|
+
const contract = this.matchTradeNameToContract(trade);
|
|
866
|
+
if (contract) {
|
|
867
|
+
const sectorTrades = sectorMap.get(contract.sector) || [];
|
|
868
|
+
sectorTrades.push(trade);
|
|
869
|
+
sectorMap.set(contract.sector, sectorTrades);
|
|
870
|
+
}
|
|
871
|
+
});
|
|
872
|
+
return this.getSectors().map((sector) => ({
|
|
873
|
+
sector,
|
|
874
|
+
trades: sectorMap.get(sector) || []
|
|
875
|
+
}));
|
|
876
|
+
}
|
|
877
|
+
static matchContractNameToGlobexCode(contractName) {
|
|
878
|
+
return CME_CONTRACTS.find((c) => contractName.startsWith(c.symbol));
|
|
879
|
+
}
|
|
880
|
+
};
|
|
881
|
+
|
|
369
882
|
// src/rest/history/history.api.ts
|
|
370
883
|
var HistoryApi = class {
|
|
371
884
|
constructor(http) {
|
|
@@ -443,7 +956,7 @@ var ConnectionManager = class {
|
|
|
443
956
|
}
|
|
444
957
|
};
|
|
445
958
|
|
|
446
|
-
// src/utils/event
|
|
959
|
+
// src/utils/typed.event.emitter.ts
|
|
447
960
|
var TypedEventEmitter = class {
|
|
448
961
|
listeners = /* @__PURE__ */ new Map();
|
|
449
962
|
on(event, callback) {
|
|
@@ -490,8 +1003,8 @@ var TypedEventEmitter = class {
|
|
|
490
1003
|
}
|
|
491
1004
|
};
|
|
492
1005
|
|
|
493
|
-
// src/realtime/market/market
|
|
494
|
-
var
|
|
1006
|
+
// src/realtime/market/realtime.market.event.hub.ts
|
|
1007
|
+
var RealtimeMarketEventHub = class extends TypedEventEmitter {
|
|
495
1008
|
constructor(connectionManager) {
|
|
496
1009
|
super();
|
|
497
1010
|
this.connectionManager = connectionManager;
|
|
@@ -502,9 +1015,12 @@ var MarketHub = class extends TypedEventEmitter {
|
|
|
502
1015
|
subscribedDepth = /* @__PURE__ */ new Set();
|
|
503
1016
|
setupEventHandlers() {
|
|
504
1017
|
this.connectionManager.onMarketConnection((connection) => {
|
|
505
|
-
connection.on(
|
|
506
|
-
|
|
507
|
-
|
|
1018
|
+
connection.on(
|
|
1019
|
+
"GatewayQuote",
|
|
1020
|
+
(contractId, data) => {
|
|
1021
|
+
this.emit("quote", { contractId, data });
|
|
1022
|
+
}
|
|
1023
|
+
);
|
|
508
1024
|
connection.on(
|
|
509
1025
|
"GatewayTrade",
|
|
510
1026
|
(contractId, data) => {
|
|
@@ -571,8 +1087,8 @@ var MarketHub = class extends TypedEventEmitter {
|
|
|
571
1087
|
}
|
|
572
1088
|
};
|
|
573
1089
|
|
|
574
|
-
// src/realtime/user/user
|
|
575
|
-
var
|
|
1090
|
+
// src/realtime/user/realtime.user.event.hub.ts
|
|
1091
|
+
var RealtimeUserEventHub = class extends TypedEventEmitter {
|
|
576
1092
|
constructor(connectionManager) {
|
|
577
1093
|
super();
|
|
578
1094
|
this.connectionManager = connectionManager;
|
|
@@ -583,18 +1099,30 @@ var UserHub = class extends TypedEventEmitter {
|
|
|
583
1099
|
subscribedTrades = /* @__PURE__ */ new Set();
|
|
584
1100
|
setupEventHandlers() {
|
|
585
1101
|
this.connectionManager.onUserConnection((connection) => {
|
|
586
|
-
connection.on(
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
connection.on(
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
1102
|
+
connection.on(
|
|
1103
|
+
"GatewayUserAccount",
|
|
1104
|
+
(data) => {
|
|
1105
|
+
this.emit("account", data);
|
|
1106
|
+
}
|
|
1107
|
+
);
|
|
1108
|
+
connection.on(
|
|
1109
|
+
"GatewayUserOrder",
|
|
1110
|
+
(data) => {
|
|
1111
|
+
this.emit("order", data);
|
|
1112
|
+
}
|
|
1113
|
+
);
|
|
1114
|
+
connection.on(
|
|
1115
|
+
"GatewayUserPosition",
|
|
1116
|
+
(data) => {
|
|
1117
|
+
this.emit("position", data);
|
|
1118
|
+
}
|
|
1119
|
+
);
|
|
1120
|
+
connection.on(
|
|
1121
|
+
"GatewayUserTrade",
|
|
1122
|
+
(data) => {
|
|
1123
|
+
this.emit("trade", data);
|
|
1124
|
+
}
|
|
1125
|
+
);
|
|
598
1126
|
});
|
|
599
1127
|
}
|
|
600
1128
|
async subscribe(accountId) {
|
|
@@ -649,7 +1177,7 @@ var UserHub = class extends TypedEventEmitter {
|
|
|
649
1177
|
}
|
|
650
1178
|
};
|
|
651
1179
|
|
|
652
|
-
// src/client.ts
|
|
1180
|
+
// src/topstep.x.client.ts
|
|
653
1181
|
var TopstepXClient = class extends TypedEventEmitter {
|
|
654
1182
|
auth;
|
|
655
1183
|
connectionManager;
|
|
@@ -695,8 +1223,8 @@ var TopstepXClient = class extends TypedEventEmitter {
|
|
|
695
1223
|
userHubUrl: config.userHubUrl ?? "https://rtc.topstepx.com/hubs/user",
|
|
696
1224
|
auth: this.auth
|
|
697
1225
|
});
|
|
698
|
-
this.marketHub = new
|
|
699
|
-
this.userHub = new
|
|
1226
|
+
this.marketHub = new RealtimeMarketEventHub(this.connectionManager);
|
|
1227
|
+
this.userHub = new RealtimeUserEventHub(this.connectionManager);
|
|
700
1228
|
}
|
|
701
1229
|
/**
|
|
702
1230
|
* Connect to the TopstepX API.
|
|
@@ -729,48 +1257,31 @@ var TopstepXClient = class extends TypedEventEmitter {
|
|
|
729
1257
|
}
|
|
730
1258
|
};
|
|
731
1259
|
|
|
732
|
-
// src/
|
|
733
|
-
var
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
BarUnit2[BarUnit2["Minute"] = 2] = "Minute";
|
|
757
|
-
BarUnit2[BarUnit2["Hour"] = 3] = "Hour";
|
|
758
|
-
BarUnit2[BarUnit2["Day"] = 4] = "Day";
|
|
759
|
-
BarUnit2[BarUnit2["Week"] = 5] = "Week";
|
|
760
|
-
BarUnit2[BarUnit2["Month"] = 6] = "Month";
|
|
761
|
-
return BarUnit2;
|
|
762
|
-
})(BarUnit || {});
|
|
763
|
-
var PositionType = /* @__PURE__ */ ((PositionType2) => {
|
|
764
|
-
PositionType2[PositionType2["Long"] = 0] = "Long";
|
|
765
|
-
PositionType2[PositionType2["Short"] = 1] = "Short";
|
|
766
|
-
return PositionType2;
|
|
767
|
-
})(PositionType || {});
|
|
768
|
-
var TradeType = /* @__PURE__ */ ((TradeType2) => {
|
|
769
|
-
TradeType2[TradeType2["Bid"] = 0] = "Bid";
|
|
770
|
-
TradeType2[TradeType2["Ask"] = 1] = "Ask";
|
|
771
|
-
return TradeType2;
|
|
772
|
-
})(TradeType || {});
|
|
1260
|
+
// src/shared/order.status.enum.ts
|
|
1261
|
+
var OrderStatusEnum = /* @__PURE__ */ ((OrderStatusEnum2) => {
|
|
1262
|
+
OrderStatusEnum2[OrderStatusEnum2["Pending"] = 0] = "Pending";
|
|
1263
|
+
OrderStatusEnum2[OrderStatusEnum2["Working"] = 1] = "Working";
|
|
1264
|
+
OrderStatusEnum2[OrderStatusEnum2["Filled"] = 2] = "Filled";
|
|
1265
|
+
OrderStatusEnum2[OrderStatusEnum2["Cancelled"] = 3] = "Cancelled";
|
|
1266
|
+
OrderStatusEnum2[OrderStatusEnum2["Rejected"] = 4] = "Rejected";
|
|
1267
|
+
OrderStatusEnum2[OrderStatusEnum2["PartiallyFilled"] = 5] = "PartiallyFilled";
|
|
1268
|
+
return OrderStatusEnum2;
|
|
1269
|
+
})(OrderStatusEnum || {});
|
|
1270
|
+
|
|
1271
|
+
// src/shared/position.type.enum.ts
|
|
1272
|
+
var PositionTypeEnum = /* @__PURE__ */ ((PositionTypeEnum2) => {
|
|
1273
|
+
PositionTypeEnum2[PositionTypeEnum2["Long"] = 0] = "Long";
|
|
1274
|
+
PositionTypeEnum2[PositionTypeEnum2["Short"] = 1] = "Short";
|
|
1275
|
+
return PositionTypeEnum2;
|
|
1276
|
+
})(PositionTypeEnum || {});
|
|
1277
|
+
|
|
1278
|
+
// src/shared/trade.type.enum.ts
|
|
1279
|
+
var TradeTypeEnum = /* @__PURE__ */ ((TradeTypeEnum2) => {
|
|
1280
|
+
TradeTypeEnum2[TradeTypeEnum2["Bid"] = 0] = "Bid";
|
|
1281
|
+
TradeTypeEnum2[TradeTypeEnum2["Ask"] = 1] = "Ask";
|
|
1282
|
+
return TradeTypeEnum2;
|
|
1283
|
+
})(TradeTypeEnum || {});
|
|
773
1284
|
|
|
774
|
-
export { AccountApi, ApiError, AuthService, AuthenticationError,
|
|
1285
|
+
export { AccountApi, ApiError, AuthService, AuthenticationError, CME_CONTRACTS, CmeContractStore, ConnectionError, ConnectionManager, ContractApi, HistoryApi, HttpClient, OrderApi, OrderStatusEnum, PositionApi, PositionTypeEnum, RealtimeMarketEventHub, RealtimeUserEventHub, TopstepXClient, TopstepXError, TradeApi, TradeTypeEnum, TypedEventEmitter };
|
|
775
1286
|
//# sourceMappingURL=index.js.map
|
|
776
1287
|
//# sourceMappingURL=index.js.map
|