topstepx-api 1.0.3 → 2.0.1
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 +152 -0
- package/MIGRATION.md +515 -0
- package/README.md +221 -116
- package/dist/index.cjs +599 -92
- 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 +593 -85
- 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;
|
|
@@ -574,8 +1087,8 @@ var MarketHub = class extends TypedEventEmitter {
|
|
|
574
1087
|
}
|
|
575
1088
|
};
|
|
576
1089
|
|
|
577
|
-
// src/realtime/user/user
|
|
578
|
-
var
|
|
1090
|
+
// src/realtime/user/realtime.user.event.hub.ts
|
|
1091
|
+
var RealtimeUserEventHub = class extends TypedEventEmitter {
|
|
579
1092
|
constructor(connectionManager) {
|
|
580
1093
|
super();
|
|
581
1094
|
this.connectionManager = connectionManager;
|
|
@@ -586,18 +1099,30 @@ var UserHub = class extends TypedEventEmitter {
|
|
|
586
1099
|
subscribedTrades = /* @__PURE__ */ new Set();
|
|
587
1100
|
setupEventHandlers() {
|
|
588
1101
|
this.connectionManager.onUserConnection((connection) => {
|
|
589
|
-
connection.on(
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
connection.on(
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
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
|
+
);
|
|
601
1126
|
});
|
|
602
1127
|
}
|
|
603
1128
|
async subscribe(accountId) {
|
|
@@ -652,7 +1177,7 @@ var UserHub = class extends TypedEventEmitter {
|
|
|
652
1177
|
}
|
|
653
1178
|
};
|
|
654
1179
|
|
|
655
|
-
// src/client.ts
|
|
1180
|
+
// src/topstep.x.client.ts
|
|
656
1181
|
var TopstepXClient = class extends TypedEventEmitter {
|
|
657
1182
|
auth;
|
|
658
1183
|
connectionManager;
|
|
@@ -698,8 +1223,8 @@ var TopstepXClient = class extends TypedEventEmitter {
|
|
|
698
1223
|
userHubUrl: config.userHubUrl ?? "https://rtc.topstepx.com/hubs/user",
|
|
699
1224
|
auth: this.auth
|
|
700
1225
|
});
|
|
701
|
-
this.marketHub = new
|
|
702
|
-
this.userHub = new
|
|
1226
|
+
this.marketHub = new RealtimeMarketEventHub(this.connectionManager);
|
|
1227
|
+
this.userHub = new RealtimeUserEventHub(this.connectionManager);
|
|
703
1228
|
}
|
|
704
1229
|
/**
|
|
705
1230
|
* Connect to the TopstepX API.
|
|
@@ -732,48 +1257,31 @@ var TopstepXClient = class extends TypedEventEmitter {
|
|
|
732
1257
|
}
|
|
733
1258
|
};
|
|
734
1259
|
|
|
735
|
-
// src/
|
|
736
|
-
var
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
BarUnit2[BarUnit2["Minute"] = 2] = "Minute";
|
|
760
|
-
BarUnit2[BarUnit2["Hour"] = 3] = "Hour";
|
|
761
|
-
BarUnit2[BarUnit2["Day"] = 4] = "Day";
|
|
762
|
-
BarUnit2[BarUnit2["Week"] = 5] = "Week";
|
|
763
|
-
BarUnit2[BarUnit2["Month"] = 6] = "Month";
|
|
764
|
-
return BarUnit2;
|
|
765
|
-
})(BarUnit || {});
|
|
766
|
-
var PositionType = /* @__PURE__ */ ((PositionType2) => {
|
|
767
|
-
PositionType2[PositionType2["Long"] = 0] = "Long";
|
|
768
|
-
PositionType2[PositionType2["Short"] = 1] = "Short";
|
|
769
|
-
return PositionType2;
|
|
770
|
-
})(PositionType || {});
|
|
771
|
-
var TradeType = /* @__PURE__ */ ((TradeType2) => {
|
|
772
|
-
TradeType2[TradeType2["Bid"] = 0] = "Bid";
|
|
773
|
-
TradeType2[TradeType2["Ask"] = 1] = "Ask";
|
|
774
|
-
return TradeType2;
|
|
775
|
-
})(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 || {});
|
|
776
1284
|
|
|
777
|
-
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 };
|
|
778
1286
|
//# sourceMappingURL=index.js.map
|
|
779
1287
|
//# sourceMappingURL=index.js.map
|