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