@newyorkcompute/kalshi-core 0.3.0 → 0.4.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.
Files changed (48) hide show
  1. package/dist/index.d.ts +1 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +2 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/mm/index.d.ts +10 -0
  6. package/dist/mm/index.d.ts.map +1 -0
  7. package/dist/mm/index.js +12 -0
  8. package/dist/mm/index.js.map +1 -0
  9. package/dist/mm/inventory.d.ts +70 -0
  10. package/dist/mm/inventory.d.ts.map +1 -0
  11. package/dist/mm/inventory.js +171 -0
  12. package/dist/mm/inventory.js.map +1 -0
  13. package/dist/mm/inventory.test.d.ts +2 -0
  14. package/dist/mm/inventory.test.d.ts.map +1 -0
  15. package/dist/mm/inventory.test.js +358 -0
  16. package/dist/mm/inventory.test.js.map +1 -0
  17. package/dist/mm/order-manager.d.ts +81 -0
  18. package/dist/mm/order-manager.d.ts.map +1 -0
  19. package/dist/mm/order-manager.js +216 -0
  20. package/dist/mm/order-manager.js.map +1 -0
  21. package/dist/mm/order-manager.test.d.ts +2 -0
  22. package/dist/mm/order-manager.test.d.ts.map +1 -0
  23. package/dist/mm/order-manager.test.js +333 -0
  24. package/dist/mm/order-manager.test.js.map +1 -0
  25. package/dist/mm/risk.d.ts +77 -0
  26. package/dist/mm/risk.d.ts.map +1 -0
  27. package/dist/mm/risk.js +179 -0
  28. package/dist/mm/risk.js.map +1 -0
  29. package/dist/mm/risk.test.d.ts +2 -0
  30. package/dist/mm/risk.test.d.ts.map +1 -0
  31. package/dist/mm/risk.test.js +297 -0
  32. package/dist/mm/risk.test.js.map +1 -0
  33. package/dist/mm/types.d.ts +128 -0
  34. package/dist/mm/types.d.ts.map +1 -0
  35. package/dist/mm/types.js +7 -0
  36. package/dist/mm/types.js.map +1 -0
  37. package/dist/websocket/auth.d.ts +9 -2
  38. package/dist/websocket/auth.d.ts.map +1 -1
  39. package/dist/websocket/auth.js +18 -13
  40. package/dist/websocket/auth.js.map +1 -1
  41. package/dist/websocket/auth.test.js +15 -6
  42. package/dist/websocket/auth.test.js.map +1 -1
  43. package/dist/websocket/client.d.ts.map +1 -1
  44. package/dist/websocket/client.js +6 -0
  45. package/dist/websocket/client.js.map +1 -1
  46. package/dist/websocket/types.d.ts +13 -1
  47. package/dist/websocket/types.d.ts.map +1 -1
  48. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order-manager.js","sourceRoot":"","sources":["../../src/mm/order-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=order-manager.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order-manager.test.d.ts","sourceRoot":"","sources":["../../src/mm/order-manager.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,333 @@
1
+ import { describe, it, expect, beforeEach, vi } from "vitest";
2
+ import { OrderManager } from "./order-manager.js";
3
+ // Mock OrdersApi
4
+ function createMockOrdersApi() {
5
+ return {
6
+ createOrder: vi.fn().mockResolvedValue({
7
+ data: {
8
+ order: {
9
+ order_id: "kalshi-order-123",
10
+ status: "resting",
11
+ },
12
+ },
13
+ }),
14
+ cancelOrder: vi.fn().mockResolvedValue({}),
15
+ };
16
+ }
17
+ describe("OrderManager", () => {
18
+ let manager;
19
+ let mockApi;
20
+ beforeEach(() => {
21
+ mockApi = createMockOrdersApi();
22
+ manager = new OrderManager(mockApi);
23
+ });
24
+ describe("place", () => {
25
+ it("should place an order successfully", async () => {
26
+ const result = await manager.place({
27
+ ticker: "TEST-MARKET",
28
+ side: "yes",
29
+ action: "buy",
30
+ price: 50,
31
+ count: 10,
32
+ });
33
+ expect(result.success).toBe(true);
34
+ expect(result.order).toBeDefined();
35
+ expect(result.order.id).toBe("kalshi-order-123");
36
+ expect(result.order.status).toBe("open");
37
+ expect(result.order.ticker).toBe("TEST-MARKET");
38
+ expect(result.order.side).toBe("yes");
39
+ expect(result.order.action).toBe("buy");
40
+ expect(result.order.price).toBe(50);
41
+ expect(result.order.count).toBe(10);
42
+ });
43
+ it("should call API with correct parameters", async () => {
44
+ await manager.place({
45
+ ticker: "TEST-MARKET",
46
+ side: "yes",
47
+ action: "buy",
48
+ price: 50,
49
+ count: 10,
50
+ });
51
+ expect(mockApi.createOrder).toHaveBeenCalledWith(expect.objectContaining({
52
+ ticker: "TEST-MARKET",
53
+ type: "limit",
54
+ side: "yes",
55
+ action: "buy",
56
+ yes_price: 50,
57
+ count: 10,
58
+ }));
59
+ });
60
+ it("should use no_price for NO orders", async () => {
61
+ await manager.place({
62
+ ticker: "TEST-MARKET",
63
+ side: "no",
64
+ action: "buy",
65
+ price: 50,
66
+ count: 10,
67
+ });
68
+ expect(mockApi.createOrder).toHaveBeenCalledWith(expect.objectContaining({
69
+ side: "no",
70
+ no_price: 50,
71
+ yes_price: undefined,
72
+ }));
73
+ });
74
+ it("should handle API errors", async () => {
75
+ mockApi.createOrder.mockRejectedValue(new Error("API Error"));
76
+ const result = await manager.place({
77
+ ticker: "TEST-MARKET",
78
+ side: "yes",
79
+ action: "buy",
80
+ price: 50,
81
+ count: 10,
82
+ });
83
+ expect(result.success).toBe(false);
84
+ expect(result.error).toBe("API Error");
85
+ expect(result.order.status).toBe("failed");
86
+ });
87
+ it("should track order in internal state", async () => {
88
+ const result = await manager.place({
89
+ ticker: "TEST-MARKET",
90
+ side: "yes",
91
+ action: "buy",
92
+ price: 50,
93
+ count: 10,
94
+ });
95
+ const order = manager.get(result.order.clientOrderId);
96
+ expect(order).toBeDefined();
97
+ expect(order.id).toBe("kalshi-order-123");
98
+ });
99
+ });
100
+ describe("placeBulk", () => {
101
+ it("should place multiple orders", async () => {
102
+ const results = await manager.placeBulk([
103
+ { ticker: "TEST-MARKET", side: "yes", action: "buy", price: 45, count: 10 },
104
+ { ticker: "TEST-MARKET", side: "yes", action: "sell", price: 55, count: 10 },
105
+ ]);
106
+ expect(results).toHaveLength(2);
107
+ expect(results[0].success).toBe(true);
108
+ expect(results[1].success).toBe(true);
109
+ });
110
+ });
111
+ describe("cancel", () => {
112
+ it("should cancel an existing order", async () => {
113
+ const placed = await manager.place({
114
+ ticker: "TEST-MARKET",
115
+ side: "yes",
116
+ action: "buy",
117
+ price: 50,
118
+ count: 10,
119
+ });
120
+ const cancelled = await manager.cancel(placed.order.clientOrderId);
121
+ expect(cancelled).toBe(true);
122
+ expect(mockApi.cancelOrder).toHaveBeenCalledWith("kalshi-order-123");
123
+ const order = manager.get(placed.order.clientOrderId);
124
+ expect(order.status).toBe("cancelled");
125
+ });
126
+ it("should return false for unknown order", async () => {
127
+ const cancelled = await manager.cancel("unknown-order");
128
+ expect(cancelled).toBe(false);
129
+ });
130
+ it("should handle cancel API errors gracefully", async () => {
131
+ const placed = await manager.place({
132
+ ticker: "TEST-MARKET",
133
+ side: "yes",
134
+ action: "buy",
135
+ price: 50,
136
+ count: 10,
137
+ });
138
+ mockApi.cancelOrder.mockRejectedValue(new Error("Already filled"));
139
+ const cancelled = await manager.cancel(placed.order.clientOrderId);
140
+ expect(cancelled).toBe(false);
141
+ });
142
+ });
143
+ describe("cancelAll", () => {
144
+ it("should cancel all active orders", async () => {
145
+ await manager.place({
146
+ ticker: "MARKET-A",
147
+ side: "yes",
148
+ action: "buy",
149
+ price: 50,
150
+ count: 10,
151
+ });
152
+ await manager.place({
153
+ ticker: "MARKET-B",
154
+ side: "yes",
155
+ action: "buy",
156
+ price: 50,
157
+ count: 10,
158
+ });
159
+ const cancelled = await manager.cancelAll();
160
+ expect(cancelled).toBe(2);
161
+ });
162
+ it("should filter by ticker", async () => {
163
+ await manager.place({
164
+ ticker: "MARKET-A",
165
+ side: "yes",
166
+ action: "buy",
167
+ price: 50,
168
+ count: 10,
169
+ });
170
+ await manager.place({
171
+ ticker: "MARKET-B",
172
+ side: "yes",
173
+ action: "buy",
174
+ price: 50,
175
+ count: 10,
176
+ });
177
+ const cancelled = await manager.cancelAll("MARKET-A");
178
+ expect(cancelled).toBe(1);
179
+ });
180
+ });
181
+ describe("getActive", () => {
182
+ it("should return only active orders", async () => {
183
+ await manager.place({
184
+ ticker: "TEST-MARKET",
185
+ side: "yes",
186
+ action: "buy",
187
+ price: 50,
188
+ count: 10,
189
+ });
190
+ const active = manager.getActive();
191
+ expect(active).toHaveLength(1);
192
+ });
193
+ it("should filter by ticker", async () => {
194
+ await manager.place({
195
+ ticker: "MARKET-A",
196
+ side: "yes",
197
+ action: "buy",
198
+ price: 50,
199
+ count: 10,
200
+ });
201
+ await manager.place({
202
+ ticker: "MARKET-B",
203
+ side: "yes",
204
+ action: "buy",
205
+ price: 50,
206
+ count: 10,
207
+ });
208
+ const active = manager.getActive("MARKET-A");
209
+ expect(active).toHaveLength(1);
210
+ expect(active[0].ticker).toBe("MARKET-A");
211
+ });
212
+ it("should not include cancelled orders", async () => {
213
+ const placed = await manager.place({
214
+ ticker: "TEST-MARKET",
215
+ side: "yes",
216
+ action: "buy",
217
+ price: 50,
218
+ count: 10,
219
+ });
220
+ await manager.cancel(placed.order.clientOrderId);
221
+ const active = manager.getActive();
222
+ expect(active).toHaveLength(0);
223
+ });
224
+ });
225
+ describe("getAll", () => {
226
+ it("should return all orders including cancelled", async () => {
227
+ const placed = await manager.place({
228
+ ticker: "TEST-MARKET",
229
+ side: "yes",
230
+ action: "buy",
231
+ price: 50,
232
+ count: 10,
233
+ });
234
+ await manager.cancel(placed.order.clientOrderId);
235
+ const all = manager.getAll();
236
+ expect(all).toHaveLength(1);
237
+ expect(all[0].status).toBe("cancelled");
238
+ });
239
+ });
240
+ describe("updateStatus", () => {
241
+ it("should update order status", async () => {
242
+ const placed = await manager.place({
243
+ ticker: "TEST-MARKET",
244
+ side: "yes",
245
+ action: "buy",
246
+ price: 50,
247
+ count: 10,
248
+ });
249
+ manager.updateStatus(placed.order.clientOrderId, "filled", 10, 50);
250
+ const order = manager.get(placed.order.clientOrderId);
251
+ expect(order.status).toBe("filled");
252
+ expect(order.filledCount).toBe(10);
253
+ expect(order.avgFillPrice).toBe(50);
254
+ });
255
+ });
256
+ describe("updateQuote", () => {
257
+ it("should cancel existing and place new orders", async () => {
258
+ // Place initial order
259
+ await manager.place({
260
+ ticker: "TEST-MARKET",
261
+ side: "yes",
262
+ action: "buy",
263
+ price: 45,
264
+ count: 10,
265
+ });
266
+ // Update quote
267
+ const result = await manager.updateQuote({
268
+ ticker: "TEST-MARKET",
269
+ side: "yes",
270
+ bidPrice: 48,
271
+ bidSize: 15,
272
+ askPrice: 52,
273
+ askSize: 15,
274
+ });
275
+ expect(result.cancelled).toBe(1);
276
+ expect(result.placed).toHaveLength(2); // bid and ask
277
+ });
278
+ it("should skip invalid prices", async () => {
279
+ const result = await manager.updateQuote({
280
+ ticker: "TEST-MARKET",
281
+ side: "yes",
282
+ bidPrice: 0, // Invalid
283
+ bidSize: 10,
284
+ askPrice: 100, // Invalid
285
+ askSize: 10,
286
+ });
287
+ expect(result.placed).toHaveLength(0);
288
+ });
289
+ it("should skip zero size", async () => {
290
+ const result = await manager.updateQuote({
291
+ ticker: "TEST-MARKET",
292
+ side: "yes",
293
+ bidPrice: 45,
294
+ bidSize: 0, // Zero
295
+ askPrice: 55,
296
+ askSize: 10,
297
+ });
298
+ expect(result.placed).toHaveLength(1); // Only ask
299
+ });
300
+ });
301
+ describe("cleanup", () => {
302
+ it("should remove old completed orders", async () => {
303
+ const placed = await manager.place({
304
+ ticker: "TEST-MARKET",
305
+ side: "yes",
306
+ action: "buy",
307
+ price: 50,
308
+ count: 10,
309
+ });
310
+ // Mark as filled
311
+ manager.updateStatus(placed.order.clientOrderId, "filled");
312
+ // Backdate the order
313
+ const order = manager.get(placed.order.clientOrderId);
314
+ order.createdAt = new Date(Date.now() - 48 * 60 * 60 * 1000); // 48 hours ago
315
+ const removed = manager.cleanup(24 * 60 * 60 * 1000); // 24 hour max age
316
+ expect(removed).toBe(1);
317
+ expect(manager.getAll()).toHaveLength(0);
318
+ });
319
+ it("should not remove active orders", async () => {
320
+ await manager.place({
321
+ ticker: "TEST-MARKET",
322
+ side: "yes",
323
+ action: "buy",
324
+ price: 50,
325
+ count: 10,
326
+ });
327
+ const removed = manager.cleanup(0); // Even with 0 max age
328
+ expect(removed).toBe(0);
329
+ expect(manager.getAll()).toHaveLength(1);
330
+ });
331
+ });
332
+ });
333
+ //# sourceMappingURL=order-manager.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order-manager.test.js","sourceRoot":"","sources":["../../src/mm/order-manager.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Risk Manager
3
+ *
4
+ * Enforces risk limits for market making.
5
+ */
6
+ import type { RiskLimits, RiskCheckResult, Quote, Fill } from "./types.js";
7
+ import type { InventoryTracker } from "./inventory.js";
8
+ /** Default risk limits (conservative) */
9
+ export declare const DEFAULT_RISK_LIMITS: RiskLimits;
10
+ /**
11
+ * RiskManager enforces trading limits
12
+ */
13
+ export declare class RiskManager {
14
+ private limits;
15
+ private dailyPnL;
16
+ private halted;
17
+ private haltReason?;
18
+ constructor(limits?: Partial<RiskLimits>);
19
+ /**
20
+ * Check if a quote passes risk limits
21
+ */
22
+ checkQuote(quote: Quote, inventory: InventoryTracker): RiskCheckResult;
23
+ /**
24
+ * Check a single order (simpler than quote)
25
+ */
26
+ checkOrder(order: {
27
+ ticker: string;
28
+ count: number;
29
+ }, inventory: InventoryTracker): RiskCheckResult;
30
+ /**
31
+ * Update PnL on fill (checks daily loss limit)
32
+ */
33
+ onFill(fill: Fill, realizedPnL: number): void;
34
+ /**
35
+ * Check if trading should be halted
36
+ */
37
+ shouldHalt(): boolean;
38
+ /**
39
+ * Get halt reason if halted
40
+ */
41
+ getHaltReason(): string | undefined;
42
+ /**
43
+ * Emergency halt trading
44
+ */
45
+ halt(reason: string): void;
46
+ /**
47
+ * Resume trading after halt
48
+ */
49
+ resume(): void;
50
+ /**
51
+ * Reset daily PnL (call at start of trading day)
52
+ */
53
+ resetDaily(): void;
54
+ /**
55
+ * Get current daily PnL
56
+ */
57
+ getDailyPnL(): number;
58
+ /**
59
+ * Get current limits
60
+ */
61
+ getLimits(): RiskLimits;
62
+ /**
63
+ * Update limits (for dynamic adjustment)
64
+ */
65
+ updateLimits(newLimits: Partial<RiskLimits>): void;
66
+ /**
67
+ * Get risk status summary
68
+ */
69
+ getStatus(inventory: InventoryTracker): {
70
+ halted: boolean;
71
+ haltReason?: string;
72
+ dailyPnL: number;
73
+ totalExposure: number;
74
+ utilizationPercent: number;
75
+ };
76
+ }
77
+ //# sourceMappingURL=risk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"risk.d.ts","sourceRoot":"","sources":["../../src/mm/risk.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,eAAe,EACf,KAAK,EACL,IAAI,EACL,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,yCAAyC;AACzC,eAAO,MAAM,mBAAmB,EAAE,UAMjC,CAAC;AAEF;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,UAAU,CAAC,CAAS;gBAEhB,MAAM,GAAE,OAAO,CAAC,UAAU,CAAM;IAI5C;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,gBAAgB,GAAG,eAAe;IAsDtE;;OAEG;IACH,UAAU,CACR,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EACxC,SAAS,EAAE,gBAAgB,GAC1B,eAAe;IA+BlB;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAS7C;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACH,aAAa,IAAI,MAAM,GAAG,SAAS;IAInC;;OAEG;IACH,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK1B;;OAEG;IACH,MAAM,IAAI,IAAI;IAKd;;OAEG;IACH,UAAU,IAAI,IAAI;IAMlB;;OAEG;IACH,WAAW,IAAI,MAAM;IAIrB;;OAEG;IACH,SAAS,IAAI,UAAU;IAIvB;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI;IAIlD;;OAEG;IACH,SAAS,CAAC,SAAS,EAAE,gBAAgB,GAAG;QACtC,MAAM,EAAE,OAAO,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,EAAE,MAAM,CAAC;QACtB,kBAAkB,EAAE,MAAM,CAAC;KAC5B;CAUF"}
@@ -0,0 +1,179 @@
1
+ /**
2
+ * Risk Manager
3
+ *
4
+ * Enforces risk limits for market making.
5
+ */
6
+ /** Default risk limits (conservative) */
7
+ export const DEFAULT_RISK_LIMITS = {
8
+ maxPositionPerMarket: 100,
9
+ maxTotalExposure: 500,
10
+ maxDailyLoss: 5000, // $50
11
+ maxOrderSize: 25,
12
+ minSpread: 2,
13
+ };
14
+ /**
15
+ * RiskManager enforces trading limits
16
+ */
17
+ export class RiskManager {
18
+ limits;
19
+ dailyPnL = 0;
20
+ halted = false;
21
+ haltReason;
22
+ constructor(limits = {}) {
23
+ this.limits = { ...DEFAULT_RISK_LIMITS, ...limits };
24
+ }
25
+ /**
26
+ * Check if a quote passes risk limits
27
+ */
28
+ checkQuote(quote, inventory) {
29
+ // Check if halted
30
+ if (this.halted) {
31
+ return { allowed: false, reason: `Trading halted: ${this.haltReason}` };
32
+ }
33
+ // Check spread
34
+ const spread = quote.askPrice - quote.bidPrice;
35
+ if (spread < this.limits.minSpread) {
36
+ return {
37
+ allowed: false,
38
+ reason: `Spread ${spread}¢ below minimum ${this.limits.minSpread}¢`,
39
+ };
40
+ }
41
+ // Check order sizes
42
+ if (quote.bidSize > this.limits.maxOrderSize) {
43
+ return {
44
+ allowed: false,
45
+ reason: `Bid size ${quote.bidSize} exceeds max ${this.limits.maxOrderSize}`,
46
+ };
47
+ }
48
+ if (quote.askSize > this.limits.maxOrderSize) {
49
+ return {
50
+ allowed: false,
51
+ reason: `Ask size ${quote.askSize} exceeds max ${this.limits.maxOrderSize}`,
52
+ };
53
+ }
54
+ // Check position limits
55
+ const currentPosition = Math.abs(inventory.getNetExposure(quote.ticker));
56
+ const potentialPosition = currentPosition + Math.max(quote.bidSize, quote.askSize);
57
+ if (potentialPosition > this.limits.maxPositionPerMarket) {
58
+ return {
59
+ allowed: false,
60
+ reason: `Position ${potentialPosition} would exceed max ${this.limits.maxPositionPerMarket}`,
61
+ };
62
+ }
63
+ // Check total exposure
64
+ const currentTotal = inventory.getTotalExposure();
65
+ const potentialTotal = currentTotal + Math.max(quote.bidSize, quote.askSize);
66
+ if (potentialTotal > this.limits.maxTotalExposure) {
67
+ return {
68
+ allowed: false,
69
+ reason: `Total exposure ${potentialTotal} would exceed max ${this.limits.maxTotalExposure}`,
70
+ };
71
+ }
72
+ return { allowed: true };
73
+ }
74
+ /**
75
+ * Check a single order (simpler than quote)
76
+ */
77
+ checkOrder(order, inventory) {
78
+ if (this.halted) {
79
+ return { allowed: false, reason: `Trading halted: ${this.haltReason}` };
80
+ }
81
+ if (order.count > this.limits.maxOrderSize) {
82
+ return {
83
+ allowed: false,
84
+ reason: `Order size ${order.count} exceeds max ${this.limits.maxOrderSize}`,
85
+ };
86
+ }
87
+ const currentPosition = Math.abs(inventory.getNetExposure(order.ticker));
88
+ if (currentPosition + order.count > this.limits.maxPositionPerMarket) {
89
+ return {
90
+ allowed: false,
91
+ reason: `Would exceed position limit for ${order.ticker}`,
92
+ };
93
+ }
94
+ const currentTotal = inventory.getTotalExposure();
95
+ if (currentTotal + order.count > this.limits.maxTotalExposure) {
96
+ return {
97
+ allowed: false,
98
+ reason: `Would exceed total exposure limit`,
99
+ };
100
+ }
101
+ return { allowed: true };
102
+ }
103
+ /**
104
+ * Update PnL on fill (checks daily loss limit)
105
+ */
106
+ onFill(fill, realizedPnL) {
107
+ this.dailyPnL += realizedPnL;
108
+ // Check daily loss limit
109
+ if (this.dailyPnL < -this.limits.maxDailyLoss) {
110
+ this.halt(`Daily loss limit reached: ${this.dailyPnL}¢`);
111
+ }
112
+ }
113
+ /**
114
+ * Check if trading should be halted
115
+ */
116
+ shouldHalt() {
117
+ return this.halted;
118
+ }
119
+ /**
120
+ * Get halt reason if halted
121
+ */
122
+ getHaltReason() {
123
+ return this.haltReason;
124
+ }
125
+ /**
126
+ * Emergency halt trading
127
+ */
128
+ halt(reason) {
129
+ this.halted = true;
130
+ this.haltReason = reason;
131
+ }
132
+ /**
133
+ * Resume trading after halt
134
+ */
135
+ resume() {
136
+ this.halted = false;
137
+ this.haltReason = undefined;
138
+ }
139
+ /**
140
+ * Reset daily PnL (call at start of trading day)
141
+ */
142
+ resetDaily() {
143
+ this.dailyPnL = 0;
144
+ // Don't auto-resume if halted for loss limit
145
+ // Operator must explicitly resume
146
+ }
147
+ /**
148
+ * Get current daily PnL
149
+ */
150
+ getDailyPnL() {
151
+ return this.dailyPnL;
152
+ }
153
+ /**
154
+ * Get current limits
155
+ */
156
+ getLimits() {
157
+ return { ...this.limits };
158
+ }
159
+ /**
160
+ * Update limits (for dynamic adjustment)
161
+ */
162
+ updateLimits(newLimits) {
163
+ this.limits = { ...this.limits, ...newLimits };
164
+ }
165
+ /**
166
+ * Get risk status summary
167
+ */
168
+ getStatus(inventory) {
169
+ const totalExposure = inventory.getTotalExposure();
170
+ return {
171
+ halted: this.halted,
172
+ haltReason: this.haltReason,
173
+ dailyPnL: this.dailyPnL,
174
+ totalExposure,
175
+ utilizationPercent: (totalExposure / this.limits.maxTotalExposure) * 100,
176
+ };
177
+ }
178
+ }
179
+ //# sourceMappingURL=risk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"risk.js","sourceRoot":"","sources":["../../src/mm/risk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=risk.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"risk.test.d.ts","sourceRoot":"","sources":["../../src/mm/risk.test.ts"],"names":[],"mappings":""}