@tradecanvas/core 0.14.0 → 1.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/dist/charts/AreaRenderer.d.ts.map +1 -1
- package/dist/charts/LineRenderer.d.ts.map +1 -1
- package/dist/charts/downsample.d.ts +15 -0
- package/dist/charts/downsample.d.ts.map +1 -0
- package/dist/charts/index.d.ts +1 -0
- package/dist/charts/index.d.ts.map +1 -1
- package/dist/charts/lttb.bench.d.ts +2 -0
- package/dist/charts/lttb.bench.d.ts.map +1 -0
- package/dist/engine/RenderEngine.d.ts +2 -0
- package/dist/engine/RenderEngine.d.ts.map +1 -1
- package/dist/index.cjs +8 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1373 -547
- package/dist/index.js.map +1 -1
- package/dist/interaction/InteractionManager.d.ts +4 -0
- package/dist/interaction/InteractionManager.d.ts.map +1 -1
- package/dist/interaction/PaneResizeHandler.d.ts +36 -0
- package/dist/interaction/PaneResizeHandler.d.ts.map +1 -0
- package/dist/interaction/index.d.ts +1 -0
- package/dist/interaction/index.d.ts.map +1 -1
- package/dist/realtime/adapters/BybitAdapter.d.ts +29 -0
- package/dist/realtime/adapters/BybitAdapter.d.ts.map +1 -0
- package/dist/realtime/adapters/CoinbaseAdapter.d.ts +25 -0
- package/dist/realtime/adapters/CoinbaseAdapter.d.ts.map +1 -0
- package/dist/realtime/adapters/KrakenAdapter.d.ts +26 -0
- package/dist/realtime/adapters/KrakenAdapter.d.ts.map +1 -0
- package/dist/realtime/adapters/PollingAdapter.d.ts +50 -0
- package/dist/realtime/adapters/PollingAdapter.d.ts.map +1 -0
- package/dist/realtime/adapters/WebSocketAdapter.d.ts +79 -0
- package/dist/realtime/adapters/WebSocketAdapter.d.ts.map +1 -0
- package/dist/realtime/adapters/index.d.ts +10 -0
- package/dist/realtime/adapters/index.d.ts.map +1 -1
- package/dist/realtime/adapters/parseUtils.d.ts +5 -0
- package/dist/realtime/adapters/parseUtils.d.ts.map +1 -0
- package/dist/trading/OrderDraftTool.d.ts +37 -0
- package/dist/trading/OrderDraftTool.d.ts.map +1 -0
- package/dist/trading/PaperExecutionAdapter.d.ts +45 -0
- package/dist/trading/PaperExecutionAdapter.d.ts.map +1 -0
- package/dist/trading/TradingManager.d.ts +7 -0
- package/dist/trading/TradingManager.d.ts.map +1 -1
- package/dist/trading/index.d.ts +4 -0
- package/dist/trading/index.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -6,6 +6,7 @@ import { AxisDragHandler } from './AxisDragHandler.js';
|
|
|
6
6
|
import { AlertDragHandler } from './AlertDragHandler.js';
|
|
7
7
|
import { DrawingManager } from '../drawings/DrawingManager.js';
|
|
8
8
|
import { TradingManager } from '../trading/TradingManager.js';
|
|
9
|
+
import { PaneResizeHandler } from './PaneResizeHandler.js';
|
|
9
10
|
export declare class InteractionManager {
|
|
10
11
|
private element;
|
|
11
12
|
private panHandler;
|
|
@@ -26,6 +27,7 @@ export declare class InteractionManager {
|
|
|
26
27
|
private pressForClick;
|
|
27
28
|
private drawingManager;
|
|
28
29
|
private tradingManager;
|
|
30
|
+
private paneResizeHandler;
|
|
29
31
|
private viewportGetter;
|
|
30
32
|
private onOverlayDirty;
|
|
31
33
|
private boundHandlers;
|
|
@@ -73,6 +75,8 @@ export declare class InteractionManager {
|
|
|
73
75
|
/** Enable dragging price-alert lines. Hit-tested after trading/drawing. */
|
|
74
76
|
setAlertDragHandler(handler: AlertDragHandler): void;
|
|
75
77
|
setTradingManager(manager: TradingManager, viewportGetter: () => ViewportState): void;
|
|
78
|
+
/** Enable dragging pane dividers to resize indicator panels. */
|
|
79
|
+
setPaneResizeHandler(handler: PaneResizeHandler): void;
|
|
76
80
|
attach(): void;
|
|
77
81
|
detach(): void;
|
|
78
82
|
private clearLongPress;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InteractionManager.d.ts","sourceRoot":"","sources":["../../src/interaction/InteractionManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"InteractionManager.d.ts","sourceRoot":"","sources":["../../src/interaction/InteractionManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Point, ResolvedLayout, PanelPosition } from '@tradecanvas/commons';
|
|
2
|
+
interface DividerHit {
|
|
3
|
+
panelId: string;
|
|
4
|
+
orientation: 'horizontal' | 'vertical';
|
|
5
|
+
position: PanelPosition;
|
|
6
|
+
size: number;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Drag a pane divider to resize the adjacent indicator panel. Pure geometry and
|
|
10
|
+
* state — the Chart supplies the current resolved layout and applies the new
|
|
11
|
+
* size. Hovering a divider yields a resize cursor.
|
|
12
|
+
*/
|
|
13
|
+
export declare class PaneResizeHandler {
|
|
14
|
+
private readonly tolerance;
|
|
15
|
+
private state;
|
|
16
|
+
private layoutGetter;
|
|
17
|
+
private onResize;
|
|
18
|
+
constructor(tolerance?: number);
|
|
19
|
+
configure(layoutGetter: () => ResolvedLayout, onResize: (panelId: string, size: number) => void): void;
|
|
20
|
+
/** The divider hit at `pos`, with its panel's position + current size, or null. Pure. */
|
|
21
|
+
hitTest(pos: Point, layout: ResolvedLayout): DividerHit | null;
|
|
22
|
+
/** The resize cursor for a divider under `pos`, or null. */
|
|
23
|
+
cursorAt(pos: Point): string | null;
|
|
24
|
+
/** Begin a resize if `pos` is on a divider. Returns true if the drag started. */
|
|
25
|
+
tryBegin(pos: Point): boolean;
|
|
26
|
+
move(pos: Point): void;
|
|
27
|
+
/** The new size for the active drag at `pos`, or null. Pure (clamping is the Chart's job). */
|
|
28
|
+
computeSize(pos: Point): {
|
|
29
|
+
panelId: string;
|
|
30
|
+
size: number;
|
|
31
|
+
} | null;
|
|
32
|
+
end(): void;
|
|
33
|
+
isActive(): boolean;
|
|
34
|
+
}
|
|
35
|
+
export {};
|
|
36
|
+
//# sourceMappingURL=PaneResizeHandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PaneResizeHandler.d.ts","sourceRoot":"","sources":["../../src/interaction/PaneResizeHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAQ,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AASvF,UAAU,UAAU;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,YAAY,GAAG,UAAU,CAAC;IACvC,QAAQ,EAAE,aAAa,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,qBAAa,iBAAiB;IAKhB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAJtC,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,YAAY,CAAuC;IAC3D,OAAO,CAAC,QAAQ,CAA0D;gBAE7C,SAAS,SAAI;IAE1C,SAAS,CACP,YAAY,EAAE,MAAM,cAAc,EAClC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,GAChD,IAAI;IAKP,yFAAyF;IACzF,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,GAAG,UAAU,GAAG,IAAI;IAiB9D,4DAA4D;IAC5D,QAAQ,CAAC,GAAG,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI;IAQnC,iFAAiF;IACjF,QAAQ,CAAC,GAAG,EAAE,KAAK,GAAG,OAAO;IAc7B,IAAI,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI;IAKtB,8FAA8F;IAC9F,WAAW,CAAC,GAAG,EAAE,KAAK,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAqBjE,GAAG,IAAI,IAAI;IAIX,QAAQ,IAAI,OAAO;CAGpB"}
|
|
@@ -3,6 +3,7 @@ export { PanHandler } from './PanHandler.js';
|
|
|
3
3
|
export { ZoomHandler } from './ZoomHandler.js';
|
|
4
4
|
export { AxisDragHandler } from './AxisDragHandler.js';
|
|
5
5
|
export { AlertDragHandler } from './AlertDragHandler.js';
|
|
6
|
+
export { PaneResizeHandler } from './PaneResizeHandler.js';
|
|
6
7
|
export { CrosshairHandler } from './CrosshairHandler.js';
|
|
7
8
|
export type { CrosshairMode } from './CrosshairHandler.js';
|
|
8
9
|
export { KeyboardHandler } from './KeyboardHandler.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/interaction/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/interaction/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { OHLCBar, TimeFrame } from '@tradecanvas/commons';
|
|
2
|
+
import { WebSocketAdapter, WsParseResult } from './WebSocketAdapter.js';
|
|
3
|
+
type BybitCategory = 'spot' | 'linear' | 'inverse';
|
|
4
|
+
/** Map a TimeFrame to a Bybit kline interval token, defaulting to `1`. */
|
|
5
|
+
export declare function bybitInterval(timeframe: TimeFrame): string;
|
|
6
|
+
export interface BybitAdapterOptions {
|
|
7
|
+
/** REST base, default `https://api.bybit.com`. */
|
|
8
|
+
restBase?: string;
|
|
9
|
+
/** WS base, default `wss://stream.bybit.com/v5/public/spot`. */
|
|
10
|
+
wsBase?: string;
|
|
11
|
+
/** Product category, default `spot`. */
|
|
12
|
+
category?: BybitCategory;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Bybit v5 adapter (no API key). WebSocket `kline` stream for live bars, REST
|
|
16
|
+
* `/v5/market/kline` for history. Symbols use the `BTCUSDT` format.
|
|
17
|
+
*/
|
|
18
|
+
export declare class BybitAdapter extends WebSocketAdapter {
|
|
19
|
+
constructor(options?: BybitAdapterOptions);
|
|
20
|
+
}
|
|
21
|
+
/** Parse a Bybit v5 kline push frame into the latest bar. */
|
|
22
|
+
export declare function parseBybitWsMessage(raw: unknown): WsParseResult | null;
|
|
23
|
+
export declare function fetchBybitKlines(restBase: string, category: BybitCategory, symbol: string, timeframe: TimeFrame, limit: number): Promise<OHLCBar[]>;
|
|
24
|
+
/** Parse Bybit's `result.list` (descending) into ascending bars. */
|
|
25
|
+
export declare function parseBybitRestKlines(json: unknown): OHLCBar[];
|
|
26
|
+
/** Bybit kline tuple: `[startTime(ms), open, high, low, close, volume, turnover]`. */
|
|
27
|
+
export declare function parseBybitRestRow(row: unknown): OHLCBar | null;
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=BybitAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BybitAdapter.d.ts","sourceRoot":"","sources":["../../../src/realtime/adapters/BybitAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAG7E,KAAK,aAAa,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;AAQnD,0EAA0E;AAC1E,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAE1D;AAED,MAAM,WAAW,mBAAmB;IAClC,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B;AAED;;;GAGG;AACH,qBAAa,YAAa,SAAQ,gBAAgB;gBACpC,OAAO,GAAE,mBAAwB;CAa9C;AAED,6DAA6D;AAC7D,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,GAAG,IAAI,CAuBtE;AAED,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,OAAO,EAAE,CAAC,CAQpB;AAED,oEAAoE;AACpE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,EAAE,CAW7D;AAED,sFAAsF;AACtF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI,CAe9D"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { OHLCBar, TimeFrame } from '@tradecanvas/commons';
|
|
2
|
+
import { PollingAdapter } from './PollingAdapter.js';
|
|
3
|
+
/** Map a TimeFrame to a Coinbase granularity (seconds), defaulting to 1h. */
|
|
4
|
+
export declare function coinbaseGranularity(timeframe: TimeFrame): number;
|
|
5
|
+
export interface CoinbaseAdapterOptions {
|
|
6
|
+
/** REST base, default `https://api.exchange.coinbase.com`. */
|
|
7
|
+
restBase?: string;
|
|
8
|
+
/** Poll interval in ms (default 5000). */
|
|
9
|
+
intervalMs?: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Coinbase Exchange adapter (no API key). Uses REST candle polling — the
|
|
13
|
+
* Exchange candles endpoint covers every supported granularity, which the WS
|
|
14
|
+
* candles channel does not. Product ids use the `BTC-USD` format. History is
|
|
15
|
+
* capped at ~300 candles per Coinbase's limit.
|
|
16
|
+
*/
|
|
17
|
+
export declare class CoinbaseAdapter extends PollingAdapter {
|
|
18
|
+
constructor(options?: CoinbaseAdapterOptions);
|
|
19
|
+
}
|
|
20
|
+
export declare function fetchCoinbaseCandles(restBase: string, symbol: string, timeframe: TimeFrame): Promise<OHLCBar[]>;
|
|
21
|
+
/** Parse Coinbase's candle response (newest-first) into ascending bars. */
|
|
22
|
+
export declare function parseCoinbaseCandles(data: unknown): OHLCBar[];
|
|
23
|
+
/** Coinbase candle tuple: `[time(s), low, high, open, close, volume]`. */
|
|
24
|
+
export declare function parseCoinbaseCandle(row: unknown): OHLCBar | null;
|
|
25
|
+
//# sourceMappingURL=CoinbaseAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CoinbaseAdapter.d.ts","sourceRoot":"","sources":["../../../src/realtime/adapters/CoinbaseAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAarD,6EAA6E;AAC7E,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAEhE;AAED,MAAM,WAAW,sBAAsB;IACrC,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,qBAAa,eAAgB,SAAQ,cAAc;gBACrC,OAAO,GAAE,sBAA2B;CASjD;AAED,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,OAAO,EAAE,CAAC,CAOpB;AAED,2EAA2E;AAC3E,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,EAAE,CAS7D;AAED,0EAA0E;AAC1E,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI,CAehE"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { OHLCBar, TimeFrame } from '@tradecanvas/commons';
|
|
2
|
+
import { WebSocketAdapter, WsParseResult } from './WebSocketAdapter.js';
|
|
3
|
+
/** Map a TimeFrame to a Kraken interval (minutes), defaulting to 1. */
|
|
4
|
+
export declare function krakenInterval(timeframe: TimeFrame): number;
|
|
5
|
+
export interface KrakenAdapterOptions {
|
|
6
|
+
/** REST base, default `https://api.kraken.com`. */
|
|
7
|
+
restBase?: string;
|
|
8
|
+
/** WS base (v2), default `wss://ws.kraken.com/v2`. */
|
|
9
|
+
wsBase?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Kraken adapter (no API key). WebSocket v2 `ohlc` channel for live bars, REST
|
|
13
|
+
* `/0/public/OHLC` for history. WS symbols use the `BTC/USD` format; the REST
|
|
14
|
+
* `pair` is derived by stripping the slash (`BTCUSD`).
|
|
15
|
+
*/
|
|
16
|
+
export declare class KrakenAdapter extends WebSocketAdapter {
|
|
17
|
+
constructor(options?: KrakenAdapterOptions);
|
|
18
|
+
}
|
|
19
|
+
/** Parse a Kraken v2 `ohlc` frame into the latest bar (OHLC are floats). */
|
|
20
|
+
export declare function parseKrakenWsMessage(raw: unknown): WsParseResult | null;
|
|
21
|
+
export declare function fetchKrakenOhlc(restBase: string, symbol: string, timeframe: TimeFrame): Promise<OHLCBar[]>;
|
|
22
|
+
/** Parse Kraken's OHLC response (result keyed by canonical pair) into bars. */
|
|
23
|
+
export declare function parseKrakenOhlc(json: unknown): OHLCBar[];
|
|
24
|
+
/** Kraken OHLC tuple: `[time(s), open, high, low, close, vwap, volume, count]`. */
|
|
25
|
+
export declare function parseKrakenOhlcRow(row: unknown): OHLCBar | null;
|
|
26
|
+
//# sourceMappingURL=KrakenAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KrakenAdapter.d.ts","sourceRoot":"","sources":["../../../src/realtime/adapters/KrakenAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAS7E,uEAAuE;AACvE,wBAAgB,cAAc,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAE3D;AAED,MAAM,WAAW,oBAAoB;IACnC,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,qBAAa,aAAc,SAAQ,gBAAgB;gBACrC,OAAO,GAAE,oBAAyB;CAkB/C;AAED,4EAA4E;AAC5E,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,GAAG,IAAI,CAuBvE;AAED,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,OAAO,EAAE,CAAC,CAQpB;AAED,+EAA+E;AAC/E,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,EAAE,CAkBxD;AAED,mFAAmF;AACnF,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI,CAe/D"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { DataAdapter, DataAdapterConfig, DataAdapterEventType, DataAdapterListener, ConnectionState, OHLCBar, TimeFrame } from '@tradecanvas/commons';
|
|
2
|
+
export interface PollingAdapterOptions {
|
|
3
|
+
/** Adapter name, e.g. `'coinbase'`. */
|
|
4
|
+
name: string;
|
|
5
|
+
/** Fetch recent bars (ascending by time). Drives both history and polling. */
|
|
6
|
+
fetchBars: (symbol: string, timeframe: TimeFrame, limit: number) => Promise<OHLCBar[]>;
|
|
7
|
+
/** Poll interval in ms (default 5000). */
|
|
8
|
+
intervalMs?: number;
|
|
9
|
+
/** Bars to request each poll — ≥2 so a rollover's closing bar is included (default 2). */
|
|
10
|
+
pollLimit?: number;
|
|
11
|
+
/** History limit when `fetchHistory` is called without one (default 500). */
|
|
12
|
+
defaultHistoryLimit?: number;
|
|
13
|
+
/** Inject a timer (testing). Defaults to global `setInterval`/`clearInterval`. */
|
|
14
|
+
setInterval?: (fn: () => void, ms: number) => unknown;
|
|
15
|
+
clearInterval?: (handle: unknown) => void;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* REST polling `DataAdapter` base — for feeds without a WebSocket (most stock /
|
|
19
|
+
* FX APIs). Polls `fetchBars` on an interval, emits the latest bar as forming,
|
|
20
|
+
* and emits the prior bar as `closed` when the bucket rolls over.
|
|
21
|
+
*
|
|
22
|
+
* Generic use:
|
|
23
|
+
* ```ts
|
|
24
|
+
* new PollingAdapter({ name, fetchBars, intervalMs: 3000 })
|
|
25
|
+
* ```
|
|
26
|
+
* Built-in subclass: `CoinbaseAdapter`.
|
|
27
|
+
*/
|
|
28
|
+
export declare class PollingAdapter implements DataAdapter {
|
|
29
|
+
readonly name: string;
|
|
30
|
+
private state;
|
|
31
|
+
private listeners;
|
|
32
|
+
private config;
|
|
33
|
+
private timer;
|
|
34
|
+
private lastBarTime;
|
|
35
|
+
private readonly opts;
|
|
36
|
+
constructor(opts: PollingAdapterOptions);
|
|
37
|
+
connect(config: DataAdapterConfig): void;
|
|
38
|
+
disconnect(): void;
|
|
39
|
+
getConnectionState(): ConnectionState;
|
|
40
|
+
fetchHistory(symbol: string, timeframe: TimeFrame, limit?: number): Promise<OHLCBar[]>;
|
|
41
|
+
on<T = unknown>(event: DataAdapterEventType, listener: DataAdapterListener<T>): void;
|
|
42
|
+
off<T = unknown>(event: DataAdapterEventType, listener: DataAdapterListener<T>): void;
|
|
43
|
+
dispose(): void;
|
|
44
|
+
/** Run one poll cycle. Public so callers (and tests) can pull on demand. */
|
|
45
|
+
poll(): Promise<void>;
|
|
46
|
+
private startPolling;
|
|
47
|
+
private stopPolling;
|
|
48
|
+
private emitEvent;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=PollingAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PollingAdapter.d.ts","sourceRoot":"","sources":["../../../src/realtime/adapters/PollingAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,OAAO,EACP,SAAS,EACV,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,qBAAqB;IACpC,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACvF,0CAA0C;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0FAA0F;IAC1F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kFAAkF;IAClF,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;IACtD,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CAC3C;AAED;;;;;;;;;;GAUG;AACH,qBAAa,cAAe,YAAW,WAAW;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,OAAO,CAAC,KAAK,CAAmC;IAChD,OAAO,CAAC,SAAS,CAA6D;IAC9E,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAwB;gBAEjC,IAAI,EAAE,qBAAqB;IAKvC,OAAO,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAQxC,UAAU,IAAI,IAAI;IAMlB,kBAAkB,IAAI,eAAe;IAIrC,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAItF,EAAE,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI;IASpF,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI;IAIrF,OAAO,IAAI,IAAI;IAKf,4EAA4E;IACtE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA6B3B,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,SAAS;CAOlB"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { DataAdapter, DataAdapterConfig, DataAdapterEventType, DataAdapterListener, ConnectionState, OHLCBar, RawTick, TimeFrame } from '@tradecanvas/commons';
|
|
2
|
+
/** Minimal structural subset of the browser WebSocket this base depends on. */
|
|
3
|
+
export interface WebSocketLike {
|
|
4
|
+
onopen: ((ev: unknown) => void) | null;
|
|
5
|
+
onmessage: ((ev: {
|
|
6
|
+
data: unknown;
|
|
7
|
+
}) => void) | null;
|
|
8
|
+
onerror: ((ev: unknown) => void) | null;
|
|
9
|
+
onclose: ((ev: unknown) => void) | null;
|
|
10
|
+
send(data: string): void;
|
|
11
|
+
close(): void;
|
|
12
|
+
}
|
|
13
|
+
export type WebSocketFactory = (url: string) => WebSocketLike;
|
|
14
|
+
/** What `parseMessage` extracts from a raw WS frame. */
|
|
15
|
+
export interface WsParseResult {
|
|
16
|
+
/** A bar update (forming or finalized). */
|
|
17
|
+
bar?: OHLCBar;
|
|
18
|
+
/** Whether `bar` is finalized (default false). */
|
|
19
|
+
closed?: boolean;
|
|
20
|
+
/** An explicit trade tick. When omitted but `bar` is present, a tick is
|
|
21
|
+
* synthesized from the bar close (matches BinanceAdapter). */
|
|
22
|
+
tick?: RawTick;
|
|
23
|
+
}
|
|
24
|
+
export interface WebSocketAdapterOptions {
|
|
25
|
+
/** Adapter name, e.g. `'bybit'`. */
|
|
26
|
+
name: string;
|
|
27
|
+
/** Build the WS URL for a connection. */
|
|
28
|
+
wsUrl: (config: DataAdapterConfig) => string;
|
|
29
|
+
/** Fetch historical bars (REST), ascending by time. */
|
|
30
|
+
fetchHistory: (symbol: string, timeframe: TimeFrame, limit: number) => Promise<OHLCBar[]>;
|
|
31
|
+
/** Decode a raw frame into a bar/tick; return null/undefined to ignore. */
|
|
32
|
+
parseMessage: (raw: unknown, config: DataAdapterConfig) => WsParseResult | null | undefined;
|
|
33
|
+
/** Message(s) to send on open to subscribe (sent as JSON unless a string). */
|
|
34
|
+
subscribeMessage?: (config: DataAdapterConfig) => unknown;
|
|
35
|
+
/** Message(s) to send before close to unsubscribe. */
|
|
36
|
+
unsubscribeMessage?: (config: DataAdapterConfig) => unknown;
|
|
37
|
+
/** Decode raw frame data before `parseMessage` (default: `JSON.parse` of a string). */
|
|
38
|
+
decode?: (data: unknown) => unknown;
|
|
39
|
+
/** Inject a WebSocket implementation (default: global `WebSocket`). */
|
|
40
|
+
socketFactory?: WebSocketFactory;
|
|
41
|
+
/** History limit when `fetchHistory` is called without one (default 500). */
|
|
42
|
+
defaultHistoryLimit?: number;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Configurable WebSocket `DataAdapter` base. Factors out connection lifecycle,
|
|
46
|
+
* subscribe/unsubscribe, event emission, decoding, and history fetch so a
|
|
47
|
+
* concrete adapter is just URLs plus a parse function. Reconnection is
|
|
48
|
+
* orchestrated by `StreamManager` (the adapter only reports `connectionChange`),
|
|
49
|
+
* matching `BinanceAdapter`.
|
|
50
|
+
*
|
|
51
|
+
* Generic use:
|
|
52
|
+
* ```ts
|
|
53
|
+
* new WebSocketAdapter({ name, wsUrl, fetchHistory, parseMessage })
|
|
54
|
+
* ```
|
|
55
|
+
* Built-in subclasses: `BybitAdapter`, `KrakenAdapter`.
|
|
56
|
+
*/
|
|
57
|
+
export declare class WebSocketAdapter implements DataAdapter {
|
|
58
|
+
readonly name: string;
|
|
59
|
+
protected ws: WebSocketLike | null;
|
|
60
|
+
protected state: ConnectionState;
|
|
61
|
+
protected config: DataAdapterConfig | null;
|
|
62
|
+
private listeners;
|
|
63
|
+
private readonly opts;
|
|
64
|
+
constructor(opts: WebSocketAdapterOptions);
|
|
65
|
+
connect(config: DataAdapterConfig): void;
|
|
66
|
+
disconnect(): void;
|
|
67
|
+
getConnectionState(): ConnectionState;
|
|
68
|
+
fetchHistory(symbol: string, timeframe: TimeFrame, limit?: number): Promise<OHLCBar[]>;
|
|
69
|
+
on<T = unknown>(event: DataAdapterEventType, listener: DataAdapterListener<T>): void;
|
|
70
|
+
off<T = unknown>(event: DataAdapterEventType, listener: DataAdapterListener<T>): void;
|
|
71
|
+
dispose(): void;
|
|
72
|
+
private openSocket;
|
|
73
|
+
private sendMessage;
|
|
74
|
+
private decode;
|
|
75
|
+
private createSocket;
|
|
76
|
+
protected setState(state: ConnectionState): void;
|
|
77
|
+
protected emitEvent(type: DataAdapterEventType, data: unknown): void;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=WebSocketAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebSocketAdapter.d.ts","sourceRoot":"","sources":["../../../src/realtime/adapters/WebSocketAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,14 @@
|
|
|
1
1
|
export { BinanceAdapter } from './BinanceAdapter.js';
|
|
2
2
|
export { MockAdapter } from './MockAdapter.js';
|
|
3
3
|
export type { MockAdapterOptions } from './MockAdapter.js';
|
|
4
|
+
export { WebSocketAdapter } from './WebSocketAdapter.js';
|
|
5
|
+
export type { WebSocketAdapterOptions, WebSocketLike, WebSocketFactory, WsParseResult, } from './WebSocketAdapter.js';
|
|
6
|
+
export { PollingAdapter } from './PollingAdapter.js';
|
|
7
|
+
export type { PollingAdapterOptions } from './PollingAdapter.js';
|
|
8
|
+
export { CoinbaseAdapter } from './CoinbaseAdapter.js';
|
|
9
|
+
export type { CoinbaseAdapterOptions } from './CoinbaseAdapter.js';
|
|
10
|
+
export { BybitAdapter } from './BybitAdapter.js';
|
|
11
|
+
export type { BybitAdapterOptions } from './BybitAdapter.js';
|
|
12
|
+
export { KrakenAdapter } from './KrakenAdapter.js';
|
|
13
|
+
export type { KrakenAdapterOptions } from './KrakenAdapter.js';
|
|
4
14
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/realtime/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/realtime/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EACV,uBAAuB,EACvB,aAAa,EACb,gBAAgB,EAChB,aAAa,GACd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Shared numeric/shape coercion for adapter REST/WS payload parsing. */
|
|
2
|
+
/** Coerce a string-or-number field to a finite number, or null if invalid. */
|
|
3
|
+
export declare function toFiniteNumber(value: unknown): number | null;
|
|
4
|
+
export declare function isObject(value: unknown): value is Record<string, unknown>;
|
|
5
|
+
//# sourceMappingURL=parseUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseUtils.d.ts","sourceRoot":"","sources":["../../../src/realtime/adapters/parseUtils.ts"],"names":[],"mappings":"AAAA,yEAAyE;AAEzE,8EAA8E;AAC9E,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAS5D;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { OrderSide, OrderType, OrderPlaceIntent, Point, ViewportState, Theme } from '@tradecanvas/commons';
|
|
2
|
+
export interface OrderDraft {
|
|
3
|
+
side: OrderSide;
|
|
4
|
+
price: number;
|
|
5
|
+
quantity: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Infer an order type from the draft price relative to the market: a buy below
|
|
9
|
+
* (or sell above) the market is a resting limit; a buy above (or sell below) is
|
|
10
|
+
* a stop. With no market price known, defaults to limit. Pure and testable.
|
|
11
|
+
*/
|
|
12
|
+
export declare function inferOrderType(side: OrderSide, price: number, marketPrice: number | null): OrderType;
|
|
13
|
+
/**
|
|
14
|
+
* In-progress single-order placement: one draggable price line whose order type
|
|
15
|
+
* (limit/stop) is derived from where it sits relative to the market. Geometry
|
|
16
|
+
* and state only — the `TradingManager` owns lifecycle and emits `orderPlace`
|
|
17
|
+
* on confirm. Mirrors `BracketTool`.
|
|
18
|
+
*/
|
|
19
|
+
export declare class OrderDraftTool {
|
|
20
|
+
private draft;
|
|
21
|
+
private dragging;
|
|
22
|
+
start(side: OrderSide, price: number, quantity?: number): void;
|
|
23
|
+
cancel(): void;
|
|
24
|
+
isActive(): boolean;
|
|
25
|
+
isDragging(): boolean;
|
|
26
|
+
getDraft(): OrderDraft | null;
|
|
27
|
+
/** Update the draft price directly (used by drag; pure and testable). */
|
|
28
|
+
setPrice(price: number): boolean;
|
|
29
|
+
/** Build the place intent, inferring the type from the market price. */
|
|
30
|
+
toIntent(marketPrice: number | null): OrderPlaceIntent | null;
|
|
31
|
+
hitTest(pos: Point, viewport: ViewportState): boolean;
|
|
32
|
+
beginDrag(pos: Point, viewport: ViewportState): boolean;
|
|
33
|
+
drag(pos: Point, viewport: ViewportState): boolean;
|
|
34
|
+
endDrag(): void;
|
|
35
|
+
render(ctx: CanvasRenderingContext2D, viewport: ViewportState, theme: Theme, marketPrice: number | null, pricePrecision?: number): void;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=OrderDraftTool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OrderDraftTool.d.ts","sourceRoot":"","sources":["../../src/trading/OrderDraftTool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,KAAK,EACL,aAAa,EACb,KAAK,EACN,MAAM,sBAAsB,CAAC;AAG9B,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAAG,IAAI,GACzB,SAAS,CAIX;AAID;;;;;GAKG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,QAAQ,CAAS;IAEzB,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,IAAI;IAKzD,MAAM,IAAI,IAAI;IAKd,QAAQ,IAAI,OAAO;IAInB,UAAU,IAAI,OAAO;IAIrB,QAAQ,IAAI,UAAU,GAAG,IAAI;IAI7B,yEAAyE;IACzE,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAMhC,wEAAwE;IACxE,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,gBAAgB,GAAG,IAAI;IAU7D,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,GAAG,OAAO;IAKrD,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,GAAG,OAAO;IAMvD,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,GAAG,OAAO;IAKlD,OAAO,IAAI,IAAI;IAIf,MAAM,CACJ,GAAG,EAAE,wBAAwB,EAC7B,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,cAAc,SAAI,GACjB,IAAI;CA2BR"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { ExecutionAdapter, ExecutionConfig, ExecutionEventType, ExecutionListener, ConnectionState, TradingOrder, TradingPosition, OrderPlaceIntent, OrderModifyIntent, OrderCancelIntent, PositionModifyIntent, PositionCloseIntent } from '@tradecanvas/commons';
|
|
2
|
+
export interface PaperExecutionOptions {
|
|
3
|
+
/** Mark price used to fill market orders before `setMarkPrice` is called. */
|
|
4
|
+
markPrice?: number;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Reference in-memory `ExecutionAdapter`: virtual fills, hedging-style
|
|
8
|
+
* positions (one position per filled order), and pending limit/stop orders
|
|
9
|
+
* triggered via `setMarkPrice()`. SL/TP auto-close when the mark crosses them.
|
|
10
|
+
*
|
|
11
|
+
* The safe sandbox for demos and tests, and the shape real broker adapters
|
|
12
|
+
* mirror. No network, no real money.
|
|
13
|
+
*/
|
|
14
|
+
export declare class PaperExecutionAdapter implements ExecutionAdapter {
|
|
15
|
+
readonly name = "paper";
|
|
16
|
+
private state;
|
|
17
|
+
private listeners;
|
|
18
|
+
private orders;
|
|
19
|
+
private positions;
|
|
20
|
+
private markPrice;
|
|
21
|
+
private seq;
|
|
22
|
+
constructor(options?: PaperExecutionOptions);
|
|
23
|
+
connect(_config: ExecutionConfig): void;
|
|
24
|
+
disconnect(): void;
|
|
25
|
+
getConnectionState(): ConnectionState;
|
|
26
|
+
/** Feed the latest traded price; fills triggered limit/stop orders and SL/TP. */
|
|
27
|
+
setMarkPrice(price: number): void;
|
|
28
|
+
getOrders(): TradingOrder[];
|
|
29
|
+
getPositions(): TradingPosition[];
|
|
30
|
+
placeOrder(intent: OrderPlaceIntent): Promise<TradingOrder>;
|
|
31
|
+
modifyOrder(intent: OrderModifyIntent): Promise<void>;
|
|
32
|
+
cancelOrder(intent: OrderCancelIntent): Promise<void>;
|
|
33
|
+
modifyPosition(intent: PositionModifyIntent): Promise<void>;
|
|
34
|
+
closePosition(intent: PositionCloseIntent): Promise<void>;
|
|
35
|
+
on<T = unknown>(event: ExecutionEventType, listener: ExecutionListener<T>): void;
|
|
36
|
+
off<T = unknown>(event: ExecutionEventType, listener: ExecutionListener<T>): void;
|
|
37
|
+
dispose(): void;
|
|
38
|
+
private fill;
|
|
39
|
+
private checkPendingOrders;
|
|
40
|
+
private isTriggered;
|
|
41
|
+
private checkStops;
|
|
42
|
+
private nextId;
|
|
43
|
+
private emit;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=PaperExecutionAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PaperExecutionAdapter.d.ts","sourceRoot":"","sources":["../../src/trading/PaperExecutionAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EAEjB,eAAe,EACf,YAAY,EACZ,eAAe,EAGf,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,qBAAqB;IACpC,6EAA6E;IAC7E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,qBAAa,qBAAsB,YAAW,gBAAgB;IAC5D,QAAQ,CAAC,IAAI,WAAW;IAExB,OAAO,CAAC,KAAK,CAAmC;IAChD,OAAO,CAAC,SAAS,CAAyD;IAC1E,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,GAAG,CAAK;gBAEJ,OAAO,GAAE,qBAA0B;IAI/C,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAOvC,UAAU,IAAI,IAAI;IAKlB,kBAAkB,IAAI,eAAe;IAIrC,iFAAiF;IACjF,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAMjC,SAAS,IAAI,YAAY,EAAE;IAI3B,YAAY,IAAI,eAAe,EAAE;IAI3B,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC;IAqB3D,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAOrD,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrD,cAAc,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAa3D,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/D,EAAE,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,IAAI;IAShF,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,IAAI;IAIjF,OAAO,IAAI,IAAI;IASf,OAAO,CAAC,IAAI;IAsBZ,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,UAAU;IAsBlB,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,IAAI;CAOb"}
|
|
@@ -11,6 +11,7 @@ export declare class TradingManager {
|
|
|
11
11
|
private dragHandler;
|
|
12
12
|
private contextMenu;
|
|
13
13
|
private bracket;
|
|
14
|
+
private orderDraft;
|
|
14
15
|
private requestRender;
|
|
15
16
|
private eventCallback;
|
|
16
17
|
private container;
|
|
@@ -29,6 +30,12 @@ export declare class TradingManager {
|
|
|
29
30
|
/** Emit `bracketPlace` with the current draft and clear it. No-op if inactive. */
|
|
30
31
|
confirmBracket(): boolean;
|
|
31
32
|
isBracketActive(): boolean;
|
|
33
|
+
/** Begin a draggable single-order draft at `price` for `side`. */
|
|
34
|
+
startOrderDraft(side: OrderSide, price: number): void;
|
|
35
|
+
cancelOrderDraft(): void;
|
|
36
|
+
/** Emit `orderPlace` with the drafted order (type inferred vs the market). */
|
|
37
|
+
confirmOrderDraft(): boolean;
|
|
38
|
+
isOrderDraftActive(): boolean;
|
|
32
39
|
onPointerDown(pos: Point, viewport: ViewportState): boolean;
|
|
33
40
|
onPointerMove(pos: Point, viewport: ViewportState): boolean;
|
|
34
41
|
onPointerUp(): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TradingManager.d.ts","sourceRoot":"","sources":["../../src/trading/TradingManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EACf,SAAS,EACT,aAAa,EACb,aAAa,EACb,KAAK,EACL,KAAK,EACN,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"TradingManager.d.ts","sourceRoot":"","sources":["../../src/trading/TradingManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EACf,SAAS,EACT,aAAa,EACb,aAAa,EACb,KAAK,EACL,KAAK,EACN,MAAM,sBAAsB,CAAC;AAU9B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,MAAM,CAAgB;IAE9B,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,gBAAgB,CAA0B;IAClD,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,UAAU,CAAwB;IAE1C,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,aAAa,CAAyD;IAC9E,OAAO,CAAC,SAAS,CAA4B;gBAEjC,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC;IAS3C,YAAY,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;IAI1C,gBAAgB,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI;IAItC,gBAAgB,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;IAMlE,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI;IAKvC,YAAY,CAAC,SAAS,EAAE,eAAe,EAAE,GAAG,IAAI;IAKhD,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI;IAK3C,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKpC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI;IAO/C,uEAAuE;IACvE,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAKlD,aAAa,IAAI,IAAI;IAMrB,kFAAkF;IAClF,cAAc,IAAI,OAAO;IAezB,eAAe,IAAI,OAAO;IAM1B,kEAAkE;IAClE,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAKrD,gBAAgB,IAAI,IAAI;IAMxB,8EAA8E;IAC9E,iBAAiB,IAAI,OAAO;IAS5B,kBAAkB,IAAI,OAAO;IAM7B,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,GAAG,OAAO;IAc3D,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,GAAG,OAAO;IAiB3D,WAAW,IAAI,OAAO;IA+BtB,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,GAAG,OAAO;IAS3D,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IA6BlF;;;OAGG;IACH,gBAAgB,CAAC,GAAG,EAAE,wBAAwB,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAU5F,OAAO,IAAI,IAAI;CAGhB"}
|
package/dist/trading/index.d.ts
CHANGED
|
@@ -7,4 +7,8 @@ export { TradingDragHandler } from './TradingDragHandler.js';
|
|
|
7
7
|
export { TradingContextMenu } from './TradingContextMenu.js';
|
|
8
8
|
export { BracketTool, computeBracketDefaults, bracketRiskReward } from './BracketTool.js';
|
|
9
9
|
export type { BracketDraft, BracketHandle, BracketDefaultsOptions } from './BracketTool.js';
|
|
10
|
+
export { PaperExecutionAdapter } from './PaperExecutionAdapter.js';
|
|
11
|
+
export type { PaperExecutionOptions } from './PaperExecutionAdapter.js';
|
|
12
|
+
export { OrderDraftTool, inferOrderType } from './OrderDraftTool.js';
|
|
13
|
+
export type { OrderDraft } from './OrderDraftTool.js';
|
|
10
14
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/trading/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1F,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/trading/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1F,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,YAAY,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tradecanvas/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Canvas rendering engine for @tradecanvas/chart",
|
|
6
6
|
"license": "MIT",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"README.md"
|
|
35
35
|
],
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@tradecanvas/commons": "0.
|
|
37
|
+
"@tradecanvas/commons": "1.0.0"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"vitest": "^2.1.8"
|