@forgecharts/sdk 1.1.27 → 1.1.29
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/__tests__/backwardCompatibility.test.d.ts +14 -0
- package/dist/__tests__/backwardCompatibility.test.d.ts.map +1 -0
- package/dist/__tests__/candleInvariant.test.d.ts +20 -0
- package/dist/__tests__/candleInvariant.test.d.ts.map +1 -0
- package/dist/__tests__/public-api-surface.d.ts +13 -0
- package/dist/__tests__/public-api-surface.d.ts.map +1 -0
- package/dist/__tests__/timeframeBoundary.test.d.ts +17 -0
- package/dist/__tests__/timeframeBoundary.test.d.ts.map +1 -0
- package/dist/api/DrawingManager.d.ts +20 -0
- package/dist/api/DrawingManager.d.ts.map +1 -0
- package/dist/api/EventBus.d.ts +19 -0
- package/dist/api/EventBus.d.ts.map +1 -0
- package/dist/api/IndicatorDAG.d.ts +85 -0
- package/dist/api/IndicatorDAG.d.ts.map +1 -0
- package/dist/api/IndicatorRegistry.d.ts +22 -0
- package/dist/api/IndicatorRegistry.d.ts.map +1 -0
- package/dist/api/LayoutManager.d.ts +30 -0
- package/dist/api/LayoutManager.d.ts.map +1 -0
- package/dist/api/PaneManager.d.ts +42 -0
- package/dist/api/PaneManager.d.ts.map +1 -0
- package/dist/api/ReferenceAPI.d.ts +78 -0
- package/dist/api/ReferenceAPI.d.ts.map +1 -0
- package/dist/api/TChart.d.ts +345 -0
- package/dist/api/TChart.d.ts.map +1 -0
- package/{src/api/createChart.ts → dist/api/createChart.d.ts} +2 -7
- package/dist/api/createChart.d.ts.map +1 -0
- package/dist/api/drawing tools/fib gann menu/fibRetracement.d.ts +4 -0
- package/dist/api/drawing tools/fib gann menu/fibRetracement.d.ts.map +1 -0
- package/dist/api/drawing tools/lines menu/crossLine.d.ts +4 -0
- package/dist/api/drawing tools/lines menu/crossLine.d.ts.map +1 -0
- package/dist/api/drawing tools/lines menu/disjointChannel.d.ts +17 -0
- package/dist/api/drawing tools/lines menu/disjointChannel.d.ts.map +1 -0
- package/dist/api/drawing tools/lines menu/extendedLine.d.ts +4 -0
- package/dist/api/drawing tools/lines menu/extendedLine.d.ts.map +1 -0
- package/dist/api/drawing tools/lines menu/flatTopBottom.d.ts +4 -0
- package/dist/api/drawing tools/lines menu/flatTopBottom.d.ts.map +1 -0
- package/dist/api/drawing tools/lines menu/horizontal.d.ts +4 -0
- package/dist/api/drawing tools/lines menu/horizontal.d.ts.map +1 -0
- package/dist/api/drawing tools/lines menu/horizontalRay.d.ts +4 -0
- package/dist/api/drawing tools/lines menu/horizontalRay.d.ts.map +1 -0
- package/dist/api/drawing tools/lines menu/infoLine.d.ts +4 -0
- package/dist/api/drawing tools/lines menu/infoLine.d.ts.map +1 -0
- package/dist/api/drawing tools/lines menu/insidePitchfork.d.ts +4 -0
- package/dist/api/drawing tools/lines menu/insidePitchfork.d.ts.map +1 -0
- package/dist/api/drawing tools/lines menu/modifiedSchiffPitchfork.d.ts +4 -0
- package/dist/api/drawing tools/lines menu/modifiedSchiffPitchfork.d.ts.map +1 -0
- package/dist/api/drawing tools/lines menu/parallelChannel.d.ts +4 -0
- package/dist/api/drawing tools/lines menu/parallelChannel.d.ts.map +1 -0
- package/dist/api/drawing tools/lines menu/pitchfork.d.ts +4 -0
- package/dist/api/drawing tools/lines menu/pitchfork.d.ts.map +1 -0
- package/dist/api/drawing tools/lines menu/ray.d.ts +4 -0
- package/dist/api/drawing tools/lines menu/ray.d.ts.map +1 -0
- package/dist/api/drawing tools/lines menu/regressionTrend.d.ts +4 -0
- package/dist/api/drawing tools/lines menu/regressionTrend.d.ts.map +1 -0
- package/dist/api/drawing tools/lines menu/schiffPitchfork.d.ts +4 -0
- package/dist/api/drawing tools/lines menu/schiffPitchfork.d.ts.map +1 -0
- package/dist/api/drawing tools/lines menu/trendAngle.d.ts +4 -0
- package/dist/api/drawing tools/lines menu/trendAngle.d.ts.map +1 -0
- package/dist/api/drawing tools/lines menu/trendline.d.ts +4 -0
- package/dist/api/drawing tools/lines menu/trendline.d.ts.map +1 -0
- package/dist/api/drawing tools/lines menu/vertical.d.ts +4 -0
- package/dist/api/drawing tools/lines menu/vertical.d.ts.map +1 -0
- package/{src/api/drawing tools/pointers menu/crosshair.ts → dist/api/drawing tools/pointers menu/crosshair.d.ts } +8 -9
- package/dist/api/drawing tools/pointers menu/crosshair.d.ts.map +1 -0
- package/dist/api/drawing tools/pointers menu/cursor.d.ts +15 -0
- package/dist/api/drawing tools/pointers menu/cursor.d.ts.map +1 -0
- package/{src/api/drawing tools/pointers menu/demonstration.ts → dist/api/drawing tools/pointers menu/demonstration.d.ts } +12 -17
- package/dist/api/drawing tools/pointers menu/demonstration.d.ts.map +1 -0
- package/{src/api/drawing tools/pointers menu/dot.ts → dist/api/drawing tools/pointers menu/dot.d.ts } +10 -13
- package/dist/api/drawing tools/pointers menu/dot.d.ts.map +1 -0
- package/dist/api/drawing tools/shapes menu/rectangle.d.ts +4 -0
- package/dist/api/drawing tools/shapes menu/rectangle.d.ts.map +1 -0
- package/dist/api/drawing tools/shapes menu/text.d.ts +4 -0
- package/dist/api/drawing tools/shapes menu/text.d.ts.map +1 -0
- package/dist/api/drawingUtils.d.ts +22 -0
- package/dist/api/drawingUtils.d.ts.map +1 -0
- package/dist/core/CanvasLayer.d.ts +26 -0
- package/dist/core/CanvasLayer.d.ts.map +1 -0
- package/dist/core/Chart.d.ts +164 -0
- package/dist/core/Chart.d.ts.map +1 -0
- package/dist/core/CoordTransform.d.ts +168 -0
- package/dist/core/CoordTransform.d.ts.map +1 -0
- package/dist/core/Crosshair.d.ts +30 -0
- package/dist/core/Crosshair.d.ts.map +1 -0
- package/dist/core/IndicatorEngine.d.ts +51 -0
- package/dist/core/IndicatorEngine.d.ts.map +1 -0
- package/dist/core/InteractionManager.d.ts +197 -0
- package/dist/core/InteractionManager.d.ts.map +1 -0
- package/dist/core/PriceScale.d.ts +27 -0
- package/dist/core/PriceScale.d.ts.map +1 -0
- package/dist/core/Series.d.ts +40 -0
- package/dist/core/Series.d.ts.map +1 -0
- package/dist/core/TimeScale.d.ts +43 -0
- package/dist/core/TimeScale.d.ts.map +1 -0
- package/dist/datafeed/DatafeedConnector.d.ts +89 -0
- package/dist/datafeed/DatafeedConnector.d.ts.map +1 -0
- package/dist/engine/CandleEngine.d.ts +207 -0
- package/dist/engine/CandleEngine.d.ts.map +1 -0
- package/dist/engine/__tests__/CandleEngine.test.d.ts +2 -0
- package/dist/engine/__tests__/CandleEngine.test.d.ts.map +1 -0
- package/dist/engine/candleInvariants.d.ts +66 -0
- package/dist/engine/candleInvariants.d.ts.map +1 -0
- package/{src/engine/mergeUtils.ts → dist/engine/mergeUtils.d.ts} +15 -52
- package/dist/engine/mergeUtils.d.ts.map +1 -0
- package/dist/engine/timeframeUtils.d.ts +80 -0
- package/dist/engine/timeframeUtils.d.ts.map +1 -0
- package/dist/index.d.ts +40 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8101 -0
- package/dist/index.js.map +1 -0
- package/{src/internal.ts → dist/internal.d.ts} +1 -13
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +8852 -0
- package/dist/internal.js.map +1 -0
- package/dist/licensing/ChartRuntimeResolver.d.ts +233 -0
- package/dist/licensing/ChartRuntimeResolver.d.ts.map +1 -0
- package/dist/licensing/LicenseManager.d.ts +55 -0
- package/dist/licensing/LicenseManager.d.ts.map +1 -0
- package/dist/licensing/__tests__/ChartRuntimeResolver.test.d.ts +13 -0
- package/dist/licensing/__tests__/ChartRuntimeResolver.test.d.ts.map +1 -0
- package/dist/licensing/__tests__/LicenseManager.test.d.ts +12 -0
- package/dist/licensing/__tests__/LicenseManager.test.d.ts.map +1 -0
- package/dist/licensing/licenseTypes.d.ts +18 -0
- package/dist/licensing/licenseTypes.d.ts.map +1 -0
- package/dist/pine/PineCompiler.d.ts +35 -0
- package/dist/pine/PineCompiler.d.ts.map +1 -0
- package/dist/pine/diagnostics.d.ts +20 -0
- package/dist/pine/diagnostics.d.ts.map +1 -0
- package/{src/pine/index.ts → dist/pine/index.d.ts} +4 -3
- package/dist/pine/index.d.ts.map +1 -0
- package/dist/pine/pine-ast.d.ts +142 -0
- package/dist/pine/pine-ast.d.ts.map +1 -0
- package/dist/pine/pine-lexer.d.ts +41 -0
- package/dist/pine/pine-lexer.d.ts.map +1 -0
- package/dist/pine/pine-parser.d.ts +51 -0
- package/dist/pine/pine-parser.d.ts.map +1 -0
- package/dist/pine/pine-transpiler.d.ts +33 -0
- package/dist/pine/pine-transpiler.d.ts.map +1 -0
- package/dist/pixi/LayerName.d.ts +18 -0
- package/dist/pixi/LayerName.d.ts.map +1 -0
- package/dist/pixi/PixiCandlestickRenderer.d.ts +23 -0
- package/dist/pixi/PixiCandlestickRenderer.d.ts.map +1 -0
- package/dist/pixi/PixiChart.d.ts +72 -0
- package/dist/pixi/PixiChart.d.ts.map +1 -0
- package/dist/pixi/PixiCrosshairRenderer.d.ts +29 -0
- package/dist/pixi/PixiCrosshairRenderer.d.ts.map +1 -0
- package/dist/pixi/PixiDrawingRenderer.d.ts +17 -0
- package/dist/pixi/PixiDrawingRenderer.d.ts.map +1 -0
- package/dist/pixi/PixiGridRenderer.d.ts +22 -0
- package/dist/pixi/PixiGridRenderer.d.ts.map +1 -0
- package/dist/pixi/PixiLayerManager.d.ts +56 -0
- package/dist/pixi/PixiLayerManager.d.ts.map +1 -0
- package/dist/react/canvas/ChartCanvas.d.ts +85 -0
- package/dist/react/canvas/ChartCanvas.d.ts.map +1 -0
- package/dist/react/canvas/ChartContextMenu.d.ts +18 -0
- package/dist/react/canvas/ChartContextMenu.d.ts.map +1 -0
- package/dist/react/canvas/ChartSettingsDialog.d.ts +25 -0
- package/dist/react/canvas/ChartSettingsDialog.d.ts.map +1 -0
- package/dist/react/canvas/IndicatorLabel.d.ts +21 -0
- package/dist/react/canvas/IndicatorLabel.d.ts.map +1 -0
- package/dist/react/canvas/IndicatorPane.d.ts +32 -0
- package/dist/react/canvas/IndicatorPane.d.ts.map +1 -0
- package/dist/react/canvas/PointerOverlay.d.ts +23 -0
- package/dist/react/canvas/PointerOverlay.d.ts.map +1 -0
- package/dist/react/canvas/toolbars/LeftToolbar.d.ts +19 -0
- package/dist/react/canvas/toolbars/LeftToolbar.d.ts.map +1 -0
- package/dist/react/hooks/useChartCapabilities.d.ts +21 -0
- package/dist/react/hooks/useChartCapabilities.d.ts.map +1 -0
- package/{src/react/index.ts → dist/react/index.d.ts} +2 -23
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +11559 -0
- package/dist/react/index.js.map +1 -0
- package/{src/react/internal.ts → dist/react/internal.d.ts} +2 -26
- package/dist/react/internal.d.ts.map +1 -0
- package/dist/react/internal.js +12148 -0
- package/dist/react/internal.js.map +1 -0
- package/dist/react/shell/ManagedAppShell.d.ts +91 -0
- package/dist/react/shell/ManagedAppShell.d.ts.map +1 -0
- package/dist/react/trading/TradingBridge.d.ts +86 -0
- package/dist/react/trading/TradingBridge.d.ts.map +1 -0
- package/dist/react/workspace/ChartWorkspace.d.ts +73 -0
- package/dist/react/workspace/ChartWorkspace.d.ts.map +1 -0
- package/dist/react/workspace/FloatingPanel.d.ts +18 -0
- package/dist/react/workspace/FloatingPanel.d.ts.map +1 -0
- package/dist/react/workspace/IndicatorsDialog.d.ts +8 -0
- package/dist/react/workspace/IndicatorsDialog.d.ts.map +1 -0
- package/dist/react/workspace/LayoutMenu.d.ts +33 -0
- package/dist/react/workspace/LayoutMenu.d.ts.map +1 -0
- package/dist/react/workspace/SymbolSearchDialog.d.ts +10 -0
- package/dist/react/workspace/SymbolSearchDialog.d.ts.map +1 -0
- package/dist/react/workspace/TabBar.d.ts +17 -0
- package/dist/react/workspace/TabBar.d.ts.map +1 -0
- package/dist/react/workspace/toolbars/BottomToolbar.d.ts +19 -0
- package/dist/react/workspace/toolbars/BottomToolbar.d.ts.map +1 -0
- package/dist/react/workspace/toolbars/RightToolbar.d.ts +8 -0
- package/dist/react/workspace/toolbars/RightToolbar.d.ts.map +1 -0
- package/dist/react/workspace/toolbars/TopToolbar.d.ts +41 -0
- package/dist/react/workspace/toolbars/TopToolbar.d.ts.map +1 -0
- package/dist/renderers/CandlestickRenderer.d.ts +13 -0
- package/dist/renderers/CandlestickRenderer.d.ts.map +1 -0
- package/dist/renderers/HistogramRenderer.d.ts +11 -0
- package/dist/renderers/HistogramRenderer.d.ts.map +1 -0
- package/dist/renderers/LineRenderer.d.ts +12 -0
- package/dist/renderers/LineRenderer.d.ts.map +1 -0
- package/dist/theme/colors.d.ts +4 -0
- package/dist/theme/colors.d.ts.map +1 -0
- package/dist/tools/barDivergenceCheck.d.ts +120 -0
- package/dist/tools/barDivergenceCheck.d.ts.map +1 -0
- package/dist/trading/TradingOverlayStore.d.ts +86 -0
- package/dist/trading/TradingOverlayStore.d.ts.map +1 -0
- package/dist/trading/UnmanagedIngestion.d.ts +91 -0
- package/dist/trading/UnmanagedIngestion.d.ts.map +1 -0
- package/dist/trading/__tests__/ManagedTradingController.test.d.ts +18 -0
- package/dist/trading/__tests__/ManagedTradingController.test.d.ts.map +1 -0
- package/dist/trading/__tests__/TradingOverlayStore.test.d.ts +16 -0
- package/dist/trading/__tests__/TradingOverlayStore.test.d.ts.map +1 -0
- package/dist/trading/__tests__/UnmanagedIngestion.test.d.ts +16 -0
- package/dist/trading/__tests__/UnmanagedIngestion.test.d.ts.map +1 -0
- package/dist/trading/managed/ManagedTradingController.d.ts +110 -0
- package/dist/trading/managed/ManagedTradingController.d.ts.map +1 -0
- package/dist/trading/managed/managedCapabilities.d.ts +45 -0
- package/dist/trading/managed/managedCapabilities.d.ts.map +1 -0
- package/dist/trading/managed/managedTypes.d.ts +122 -0
- package/dist/trading/managed/managedTypes.d.ts.map +1 -0
- package/dist/trading/tradingTypes.d.ts +89 -0
- package/dist/trading/tradingTypes.d.ts.map +1 -0
- package/dist/tscript/TScriptIndicator.d.ts +41 -0
- package/dist/tscript/TScriptIndicator.d.ts.map +1 -0
- package/dist/tscript/ast.d.ts +89 -0
- package/dist/tscript/ast.d.ts.map +1 -0
- package/dist/tscript/lexer.d.ts +36 -0
- package/dist/tscript/lexer.d.ts.map +1 -0
- package/dist/tscript/parser.d.ts +50 -0
- package/dist/tscript/parser.d.ts.map +1 -0
- package/dist/tscript/runtime.d.ts +123 -0
- package/dist/tscript/runtime.d.ts.map +1 -0
- package/dist/tscript/series.d.ts +49 -0
- package/dist/tscript/series.d.ts.map +1 -0
- package/dist/types/IChart.d.ts +48 -0
- package/dist/types/IChart.d.ts.map +1 -0
- package/{src/types/IRenderer.ts → dist/types/IRenderer.d.ts} +2 -8
- package/dist/types/IRenderer.d.ts.map +1 -0
- package/dist/types/ISeries.d.ts +26 -0
- package/dist/types/ISeries.d.ts.map +1 -0
- package/package.json +5 -1
- package/src/__tests__/backwardCompatibility.test.ts +0 -191
- package/src/__tests__/candleInvariant.test.ts +0 -500
- package/src/__tests__/public-api-surface.ts +0 -76
- package/src/__tests__/timeframeBoundary.test.ts +0 -583
- package/src/api/DrawingManager.ts +0 -188
- package/src/api/EventBus.ts +0 -53
- package/src/api/IndicatorDAG.ts +0 -389
- package/src/api/IndicatorRegistry.ts +0 -47
- package/src/api/LayoutManager.ts +0 -72
- package/src/api/PaneManager.ts +0 -129
- package/src/api/ReferenceAPI.ts +0 -195
- package/src/api/TChart.ts +0 -881
- package/src/api/drawing tools/fib gann menu/fibRetracement.ts +0 -27
- package/src/api/drawing tools/lines menu/crossLine.ts +0 -21
- package/src/api/drawing tools/lines menu/disjointChannel.ts +0 -74
- package/src/api/drawing tools/lines menu/extendedLine.ts +0 -22
- package/src/api/drawing tools/lines menu/flatTopBottom.ts +0 -45
- package/src/api/drawing tools/lines menu/horizontal.ts +0 -24
- package/src/api/drawing tools/lines menu/horizontalRay.ts +0 -25
- package/src/api/drawing tools/lines menu/infoLine.ts +0 -127
- package/src/api/drawing tools/lines menu/insidePitchfork.ts +0 -21
- package/src/api/drawing tools/lines menu/modifiedSchiffPitchfork.ts +0 -18
- package/src/api/drawing tools/lines menu/parallelChannel.ts +0 -47
- package/src/api/drawing tools/lines menu/pitchfork.ts +0 -15
- package/src/api/drawing tools/lines menu/ray.ts +0 -28
- package/src/api/drawing tools/lines menu/regressionTrend.ts +0 -157
- package/src/api/drawing tools/lines menu/schiffPitchfork.ts +0 -18
- package/src/api/drawing tools/lines menu/trendAngle.ts +0 -64
- package/src/api/drawing tools/lines menu/trendline.ts +0 -16
- package/src/api/drawing tools/lines menu/vertical.ts +0 -16
- package/src/api/drawing tools/pointers menu/cursor.ts +0 -16
- package/src/api/drawing tools/shapes menu/rectangle.ts +0 -24
- package/src/api/drawing tools/shapes menu/text.ts +0 -30
- package/src/api/drawingUtils.ts +0 -82
- package/src/core/CanvasLayer.ts +0 -77
- package/src/core/Chart.ts +0 -917
- package/src/core/CoordTransform.ts +0 -282
- package/src/core/Crosshair.ts +0 -207
- package/src/core/IndicatorEngine.ts +0 -216
- package/src/core/InteractionManager.ts +0 -899
- package/src/core/PriceScale.ts +0 -133
- package/src/core/Series.ts +0 -132
- package/src/core/TimeScale.ts +0 -175
- package/src/datafeed/DatafeedConnector.ts +0 -300
- package/src/engine/CandleEngine.ts +0 -458
- package/src/engine/__tests__/CandleEngine.test.ts +0 -402
- package/src/engine/candleInvariants.ts +0 -172
- package/src/engine/timeframeUtils.ts +0 -118
- package/src/index.ts +0 -190
- package/src/licensing/ChartRuntimeResolver.ts +0 -380
- package/src/licensing/LicenseManager.ts +0 -131
- package/src/licensing/__tests__/ChartRuntimeResolver.test.ts +0 -207
- package/src/licensing/__tests__/LicenseManager.test.ts +0 -180
- package/src/licensing/licenseTypes.ts +0 -19
- package/src/pine/PineCompiler.ts +0 -68
- package/src/pine/diagnostics.ts +0 -30
- package/src/pine/pine-ast.ts +0 -163
- package/src/pine/pine-lexer.ts +0 -265
- package/src/pine/pine-parser.ts +0 -439
- package/src/pine/pine-transpiler.ts +0 -301
- package/src/pixi/LayerName.ts +0 -35
- package/src/pixi/PixiCandlestickRenderer.ts +0 -125
- package/src/pixi/PixiChart.ts +0 -425
- package/src/pixi/PixiCrosshairRenderer.ts +0 -134
- package/src/pixi/PixiDrawingRenderer.ts +0 -121
- package/src/pixi/PixiGridRenderer.ts +0 -136
- package/src/pixi/PixiLayerManager.ts +0 -102
- package/src/react/canvas/ChartCanvas.tsx +0 -984
- package/src/react/canvas/ChartContextMenu.tsx +0 -60
- package/src/react/canvas/ChartSettingsDialog.tsx +0 -133
- package/src/react/canvas/IndicatorLabel.tsx +0 -347
- package/src/react/canvas/IndicatorPane.tsx +0 -503
- package/src/react/canvas/PointerOverlay.tsx +0 -126
- package/src/react/canvas/toolbars/LeftToolbar.tsx +0 -1096
- package/src/react/hooks/useChartCapabilities.ts +0 -76
- package/src/react/shell/ManagedAppShell.tsx +0 -699
- package/src/react/trading/TradingBridge.ts +0 -156
- package/src/react/workspace/ChartWorkspace.tsx +0 -228
- package/src/react/workspace/FloatingPanel.tsx +0 -131
- package/src/react/workspace/IndicatorsDialog.tsx +0 -246
- package/src/react/workspace/LayoutMenu.tsx +0 -345
- package/src/react/workspace/SymbolSearchDialog.tsx +0 -377
- package/src/react/workspace/TabBar.tsx +0 -87
- package/src/react/workspace/toolbars/BottomToolbar.tsx +0 -372
- package/src/react/workspace/toolbars/RightToolbar.tsx +0 -46
- package/src/react/workspace/toolbars/TopToolbar.tsx +0 -431
- package/src/renderers/CandlestickRenderer.ts +0 -130
- package/src/renderers/HistogramRenderer.ts +0 -63
- package/src/renderers/LineRenderer.ts +0 -77
- package/src/theme/colors.ts +0 -21
- package/src/tools/barDivergenceCheck.ts +0 -305
- package/src/trading/TradingOverlayStore.ts +0 -161
- package/src/trading/UnmanagedIngestion.ts +0 -156
- package/src/trading/__tests__/ManagedTradingController.test.ts +0 -338
- package/src/trading/__tests__/TradingOverlayStore.test.ts +0 -323
- package/src/trading/__tests__/UnmanagedIngestion.test.ts +0 -205
- package/src/trading/managed/ManagedTradingController.ts +0 -292
- package/src/trading/managed/managedCapabilities.ts +0 -98
- package/src/trading/managed/managedTypes.ts +0 -151
- package/src/trading/tradingTypes.ts +0 -135
- package/src/tscript/TScriptIndicator.ts +0 -54
- package/src/tscript/ast.ts +0 -105
- package/src/tscript/lexer.ts +0 -190
- package/src/tscript/parser.ts +0 -334
- package/src/tscript/runtime.ts +0 -525
- package/src/tscript/series.ts +0 -84
- package/src/types/IChart.ts +0 -56
- package/src/types/ISeries.ts +0 -30
- package/tsconfig.json +0 -23
- package/tsup.config.ts +0 -16
- package/vitest.config.ts +0 -25
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* First-Divergence Bar Comparison Tool
|
|
3
|
+
*
|
|
4
|
+
* Compares OHLCV bars from multiple data sources (provider REST, database,
|
|
5
|
+
* aggregated from 1m, SDK engine) and reports the **first** mismatch found.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
*
|
|
9
|
+
* import { compareSources, checkAllSources, formatReport } from '@forgecharts/sdk/tools/barDivergenceCheck';
|
|
10
|
+
*
|
|
11
|
+
* const report = compareSources(
|
|
12
|
+
* { source: 'provider', bars: providerBars },
|
|
13
|
+
* { source: 'database', bars: databaseBars },
|
|
14
|
+
* '1h',
|
|
15
|
+
* 'BINANCE:BTCUSDT',
|
|
16
|
+
* from,
|
|
17
|
+
* to,
|
|
18
|
+
* );
|
|
19
|
+
*
|
|
20
|
+
* if (report.diverged) console.log(formatReport(report));
|
|
21
|
+
*
|
|
22
|
+
* All bar arrays are expected to contain Unix **second** timestamps in the
|
|
23
|
+
* `time` field (matching the CandleBar.time convention). Use `from`/`to`
|
|
24
|
+
* as Unix seconds to scope the comparison window.
|
|
25
|
+
*/
|
|
26
|
+
/** Identifies which pipeline stage produced a bar array. */
|
|
27
|
+
export type BarSource = 'provider' | 'database' | 'aggregated' | 'sdk';
|
|
28
|
+
/** Minimal OHLCV shape accepted by the divergence checker. */
|
|
29
|
+
export interface OhlcvBar {
|
|
30
|
+
/** Unix seconds (same as CandleBar.time). */
|
|
31
|
+
time: number;
|
|
32
|
+
open: number;
|
|
33
|
+
high: number;
|
|
34
|
+
low: number;
|
|
35
|
+
close: number;
|
|
36
|
+
volume?: number;
|
|
37
|
+
}
|
|
38
|
+
/** A labelled set of bars from one pipeline source. */
|
|
39
|
+
export interface SourceBars {
|
|
40
|
+
source: BarSource;
|
|
41
|
+
bars: readonly OhlcvBar[];
|
|
42
|
+
}
|
|
43
|
+
/** A single field-level difference between two bars at the same timestamp. */
|
|
44
|
+
export interface FieldDiff {
|
|
45
|
+
field: 'open' | 'high' | 'low' | 'close' | 'volume';
|
|
46
|
+
valueA: number;
|
|
47
|
+
valueB: number;
|
|
48
|
+
/** valueA − valueB */
|
|
49
|
+
delta: number;
|
|
50
|
+
}
|
|
51
|
+
/** Full description of a single mismatched candle. */
|
|
52
|
+
export interface BarMismatch {
|
|
53
|
+
/** Unix seconds — the candle open time where divergence was first detected. */
|
|
54
|
+
time: number;
|
|
55
|
+
/** Canonical candle-open boundary in milliseconds for the given timeframe. */
|
|
56
|
+
bucketStartMs: number;
|
|
57
|
+
sourceA: BarSource;
|
|
58
|
+
sourceB: BarSource;
|
|
59
|
+
/** OHLCV field deltas — empty when the only problem is a missing bar. */
|
|
60
|
+
differences: FieldDiff[];
|
|
61
|
+
/**
|
|
62
|
+
* True when the two bars carry the same `time` but their canonical
|
|
63
|
+
* `bucketStart` values differ — indicates a misaligned timestamp on one side.
|
|
64
|
+
*/
|
|
65
|
+
bucketMismatch: boolean;
|
|
66
|
+
/** Human-readable diagnostic notes. */
|
|
67
|
+
notes: string[];
|
|
68
|
+
}
|
|
69
|
+
/** Summary of a pairwise source comparison. */
|
|
70
|
+
export interface DivergenceReport {
|
|
71
|
+
symbol: string;
|
|
72
|
+
timeframe: string;
|
|
73
|
+
/** Unix seconds — inclusive window start. */
|
|
74
|
+
from: number;
|
|
75
|
+
/** Unix seconds — inclusive window end. */
|
|
76
|
+
to: number;
|
|
77
|
+
diverged: boolean;
|
|
78
|
+
/** The first mismatch found, or null when the sources are identical. */
|
|
79
|
+
firstMismatch: BarMismatch | null;
|
|
80
|
+
totalMismatches: number;
|
|
81
|
+
/** Number of bars from source A inside [from, to]. */
|
|
82
|
+
sourceACount: number;
|
|
83
|
+
/** Number of bars from source B inside [from, to]. */
|
|
84
|
+
sourceBCount: number;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Compare all timestamps from both sources inside [from, to] and return the
|
|
88
|
+
* first mismatch found, scanning oldest-first.
|
|
89
|
+
*
|
|
90
|
+
* Mismatch criteria (any one triggers a report):
|
|
91
|
+
* 1. Bar present in one source but absent in the other.
|
|
92
|
+
* 2. OHLCV field values differ by more than floating-point epsilon.
|
|
93
|
+
* 3. Canonical `getBucketStart` for the bar's time differs between sources
|
|
94
|
+
* (indicates one source has a misaligned timestamp).
|
|
95
|
+
*
|
|
96
|
+
* @param a Source A bars.
|
|
97
|
+
* @param b Source B bars.
|
|
98
|
+
* @param timeframe Canonical timeframe label (e.g. `'1h'`, `'1w'`).
|
|
99
|
+
* @param symbol Symbol string — stored in the report for identification.
|
|
100
|
+
* @param from Window start, Unix seconds (inclusive).
|
|
101
|
+
* @param to Window end, Unix seconds (inclusive).
|
|
102
|
+
*/
|
|
103
|
+
export declare function compareSources(a: SourceBars, b: SourceBars, timeframe: string, symbol: string, from: number, to: number): DivergenceReport;
|
|
104
|
+
/**
|
|
105
|
+
* Run all pairwise comparisons across every combination of the provided sources.
|
|
106
|
+
*
|
|
107
|
+
* For N sources this produces N*(N-1)/2 reports. Use `formatReport` to render
|
|
108
|
+
* each one for console output.
|
|
109
|
+
*/
|
|
110
|
+
export declare function checkAllSources(sources: SourceBars[], symbol: string, timeframe: string, from: number, to: number): DivergenceReport[];
|
|
111
|
+
/**
|
|
112
|
+
* Render a `DivergenceReport` as a multi-line human-readable string suitable
|
|
113
|
+
* for console output or log files.
|
|
114
|
+
*
|
|
115
|
+
* @example
|
|
116
|
+
* const report = compareSources(a, b, '1h', 'BINANCE:BTCUSDT', from, to);
|
|
117
|
+
* console.log(formatReport(report));
|
|
118
|
+
*/
|
|
119
|
+
export declare function formatReport(report: DivergenceReport): string;
|
|
120
|
+
//# sourceMappingURL=barDivergenceCheck.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"barDivergenceCheck.d.ts","sourceRoot":"","sources":["../../src/tools/barDivergenceCheck.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAMH,4DAA4D;AAC5D,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,YAAY,GAAG,KAAK,CAAC;AAEvE,8DAA8D;AAC9D,MAAM,WAAW,QAAQ;IACvB,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,uDAAuD;AACvD,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,SAAS,CAAC;IAClB,IAAI,EAAE,SAAS,QAAQ,EAAE,CAAC;CAC3B;AAED,8EAA8E;AAC9E,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,sDAAsD;AACtD,MAAM,WAAW,WAAW;IAC1B,+EAA+E;IAC/E,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,SAAS,CAAC;IACnB,OAAO,EAAE,SAAS,CAAC;IACnB,yEAAyE;IACzE,WAAW,EAAE,SAAS,EAAE,CAAC;IACzB;;;OAGG;IACH,cAAc,EAAE,OAAO,CAAC;IACxB,uCAAuC;IACvC,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,+CAA+C;AAC/C,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,OAAO,CAAC;IAClB,wEAAwE;IACxE,aAAa,EAAE,WAAW,GAAG,IAAI,CAAC;IAClC,eAAe,EAAE,MAAM,CAAC;IACxB,sDAAsD;IACtD,YAAY,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,YAAY,EAAE,MAAM,CAAC;CACtB;AAwBD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAC5B,CAAC,EAAE,UAAU,EACb,CAAC,EAAE,UAAU,EACb,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,GACT,gBAAgB,CAmGlB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,UAAU,EAAE,EACrB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,GACT,gBAAgB,EAAE,CAQpB;AAID;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CA6B7D"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TradingOverlayStore
|
|
3
|
+
*
|
|
4
|
+
* Shared, mode-agnostic store for trade overlay state.
|
|
5
|
+
* Used by both unmanaged mode (externally supplied data) and managed mode
|
|
6
|
+
* (internally generated data from the managed trading service).
|
|
7
|
+
*
|
|
8
|
+
* Supports:
|
|
9
|
+
* - Full replace (setOrders / setPositions)
|
|
10
|
+
* - Incremental (upsertOrder / upsertPosition / pushExecution)
|
|
11
|
+
* - Remove by id (removeOrder / removePosition)
|
|
12
|
+
*
|
|
13
|
+
* Subscribers are notified via callbacks registered with onChange().
|
|
14
|
+
* The store is intentionally free of React/DOM dependencies so it can be
|
|
15
|
+
* consumed from any rendering layer (canvas, React, etc.).
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* const store = new TradingOverlayStore();
|
|
20
|
+
*
|
|
21
|
+
* // Subscribe to changes (e.g. trigger a canvas repaint)
|
|
22
|
+
* store.onChange(() => chart.markDirty());
|
|
23
|
+
*
|
|
24
|
+
* // Feed data
|
|
25
|
+
* store.setOrders([...]);
|
|
26
|
+
* store.upsertOrder({ id: 'o1', role: 'entry', side: 'buy', ... });
|
|
27
|
+
* store.removeOrder('o1');
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
import type { ChartOrder, ChartPosition, ExecutionFill } from './tradingTypes';
|
|
31
|
+
type ChangeListener = () => void;
|
|
32
|
+
export declare class TradingOverlayStore {
|
|
33
|
+
private _orders;
|
|
34
|
+
private _positions;
|
|
35
|
+
private _fills;
|
|
36
|
+
private _listeners;
|
|
37
|
+
/**
|
|
38
|
+
* Register a callback that fires whenever any state changes.
|
|
39
|
+
* Returns an unsubscribe function.
|
|
40
|
+
*/
|
|
41
|
+
onChange(listener: ChangeListener): () => void;
|
|
42
|
+
private _notify;
|
|
43
|
+
/** Replace the entire order set. */
|
|
44
|
+
setOrders(orders: ChartOrder[]): void;
|
|
45
|
+
/**
|
|
46
|
+
* Insert or replace a single order.
|
|
47
|
+
* Matching is done by `order.id`.
|
|
48
|
+
*/
|
|
49
|
+
upsertOrder(order: ChartOrder): void;
|
|
50
|
+
/** Remove an order by id. Silent no-op if not found. */
|
|
51
|
+
removeOrder(orderId: string): void;
|
|
52
|
+
/** Returns a snapshot of all orders as an array (insertion order). */
|
|
53
|
+
getOrders(): ChartOrder[];
|
|
54
|
+
/** Returns orders that share the given `groupId`. */
|
|
55
|
+
getOrdersByGroup(groupId: string): ChartOrder[];
|
|
56
|
+
/** Replace the entire position set. */
|
|
57
|
+
setPositions(positions: ChartPosition[]): void;
|
|
58
|
+
/**
|
|
59
|
+
* Insert or replace a single position.
|
|
60
|
+
* Matching is done by `position.id`.
|
|
61
|
+
*/
|
|
62
|
+
upsertPosition(position: ChartPosition): void;
|
|
63
|
+
/** Remove a position by id. Silent no-op if not found. */
|
|
64
|
+
removePosition(positionId: string): void;
|
|
65
|
+
/** Returns a snapshot of all positions as an array (insertion order). */
|
|
66
|
+
getPositions(): ChartPosition[];
|
|
67
|
+
/**
|
|
68
|
+
* Append an execution fill to the fill log.
|
|
69
|
+
* Fills are append-only — they are never updated or removed.
|
|
70
|
+
*/
|
|
71
|
+
pushExecution(fill: ExecutionFill): void;
|
|
72
|
+
/** Returns all fills in insertion (chronological) order. */
|
|
73
|
+
getFills(): readonly ExecutionFill[];
|
|
74
|
+
/** Returns fills associated with a specific order id. */
|
|
75
|
+
getFillsByOrder(orderId: string): ExecutionFill[];
|
|
76
|
+
/** Wipes all overlay state (orders, positions, fills). */
|
|
77
|
+
clear(): void;
|
|
78
|
+
/** Returns the full overlay state as a plain object — useful for debug / serialisation. */
|
|
79
|
+
snapshot(): {
|
|
80
|
+
orders: ChartOrder[];
|
|
81
|
+
positions: ChartPosition[];
|
|
82
|
+
fills: readonly ExecutionFill[];
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
export {};
|
|
86
|
+
//# sourceMappingURL=TradingOverlayStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TradingOverlayStore.d.ts","sourceRoot":"","sources":["../../src/trading/TradingOverlayStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/E,KAAK,cAAc,GAAG,MAAM,IAAI,CAAC;AAEjC,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,MAAM,CAA4B;IAE1C,OAAO,CAAC,UAAU,CAAwB;IAI1C;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,IAAI;IAO9C,OAAO,CAAC,OAAO;IAMf,oCAAoC;IACpC,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI;IAMrC;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAKpC,wDAAwD;IACxD,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIlC,sEAAsE;IACtE,SAAS,IAAI,UAAU,EAAE;IAIzB,qDAAqD;IACrD,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE;IAM/C,uCAAuC;IACvC,YAAY,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,IAAI;IAM9C;;;OAGG;IACH,cAAc,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAK7C,0DAA0D;IAC1D,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIxC,yEAAyE;IACzE,YAAY,IAAI,aAAa,EAAE;IAM/B;;;OAGG;IACH,aAAa,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAKxC,4DAA4D;IAC5D,QAAQ,IAAI,SAAS,aAAa,EAAE;IAIpC,yDAAyD;IACzD,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE;IAMjD,0DAA0D;IAC1D,KAAK,IAAI,IAAI;IASb,2FAA2F;IAC3F,QAAQ,IAAI;QAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QAAC,SAAS,EAAE,aAAa,EAAE,CAAC;QAAC,KAAK,EAAE,SAAS,aAAa,EAAE,CAAA;KAAE;CAOlG"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UnmanagedIngestion
|
|
3
|
+
*
|
|
4
|
+
* External candle data ingestion for unmanaged mode.
|
|
5
|
+
*
|
|
6
|
+
* In unmanaged mode the client owns their data pipeline. They pass
|
|
7
|
+
* normalised candle data to us; this layer validates the license gate,
|
|
8
|
+
* delegates to the existing CandleEngine for bucket management, and
|
|
9
|
+
* notifies callers via callbacks mirroring the CandleEngine contract.
|
|
10
|
+
*
|
|
11
|
+
* Critical constraint: the default RapidAPI-backed datafeed is completely
|
|
12
|
+
* untouched. UnmanagedIngestion is an additive, opt-in path.
|
|
13
|
+
*
|
|
14
|
+
* Candle rules (matches CandleEngine behaviour):
|
|
15
|
+
* same timeMs → update current candle
|
|
16
|
+
* newer timeMs → append / new bucket
|
|
17
|
+
* older timeMs → silently ignored (logged in debug mode)
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```ts
|
|
21
|
+
* const ingestion = new UnmanagedIngestion('1m', {
|
|
22
|
+
* onBarUpdated: (bar) => series.update(bar),
|
|
23
|
+
* onResync: (bars) => series.setData(bars),
|
|
24
|
+
* });
|
|
25
|
+
*
|
|
26
|
+
* // Feed a full history snapshot first
|
|
27
|
+
* ingestion.setHistory(historicalBars);
|
|
28
|
+
*
|
|
29
|
+
* // Then stream live ticks
|
|
30
|
+
* ingestion.pushCandle(latestBar);
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
import type { CandleBar, UpdateResult, GapInfo } from '../engine/CandleEngine';
|
|
34
|
+
import type { CandleInput } from './tradingTypes';
|
|
35
|
+
import type { Timeframe } from '@forgecharts/types';
|
|
36
|
+
export interface UnmanagedIngestionOptions {
|
|
37
|
+
/** Enable debug logging on the underlying CandleEngine. */
|
|
38
|
+
debug?: boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Fired after every bar mutation (update or append from a live push).
|
|
41
|
+
* Corresponds to CandleEngine.onBarUpdated.
|
|
42
|
+
*/
|
|
43
|
+
onBarUpdated?: (bar: CandleBar, result: UpdateResult) => void;
|
|
44
|
+
/**
|
|
45
|
+
* Fired when the full bar array changes (after setHistory or gap backfill).
|
|
46
|
+
* The chart adapter should call `series.setData(bars)`.
|
|
47
|
+
*/
|
|
48
|
+
onResync?: (bars: readonly CandleBar[]) => void;
|
|
49
|
+
/** Fired when a candle bucket closes. */
|
|
50
|
+
onBarClosed?: (bar: CandleBar) => void;
|
|
51
|
+
/** Fired when the engine detects skipped buckets in the live stream. */
|
|
52
|
+
onGapDetected?: (info: GapInfo) => void;
|
|
53
|
+
}
|
|
54
|
+
export declare class UnmanagedIngestion {
|
|
55
|
+
private readonly _engine;
|
|
56
|
+
private readonly _opts;
|
|
57
|
+
private _timeframe;
|
|
58
|
+
constructor(timeframe: Timeframe, opts?: UnmanagedIngestionOptions);
|
|
59
|
+
private _assertUnmanaged;
|
|
60
|
+
/**
|
|
61
|
+
* Load a full historical bar snapshot.
|
|
62
|
+
* Replaces the engine's bar array and triggers `onResync` so the chart
|
|
63
|
+
* series is fully redrawn.
|
|
64
|
+
*
|
|
65
|
+
* Call this once at startup (or on symbol/interval change) before
|
|
66
|
+
* streaming live candles via `pushCandle`.
|
|
67
|
+
*
|
|
68
|
+
* @throws If the active license is not in unmanaged mode.
|
|
69
|
+
*/
|
|
70
|
+
setHistory(bars: CandleInput[]): void;
|
|
71
|
+
/**
|
|
72
|
+
* Push a single live candle tick.
|
|
73
|
+
*
|
|
74
|
+
* Behaviour follows CandleEngine rules:
|
|
75
|
+
* - same bucket → updates existing bar (OHLCV merging)
|
|
76
|
+
* - new bucket → appends a new bar (previous bar is finalised)
|
|
77
|
+
* - older bucket → silently ignored; debug-logged when `debug: true`
|
|
78
|
+
*
|
|
79
|
+
* @throws If the active license is not in unmanaged mode.
|
|
80
|
+
*/
|
|
81
|
+
pushCandle(bar: CandleInput): UpdateResult;
|
|
82
|
+
/** Returns the current bar array (chronological, ascending). */
|
|
83
|
+
getBars(): readonly CandleBar[];
|
|
84
|
+
/** Returns the latest candle, or null if no data has been loaded. */
|
|
85
|
+
getLatestBar(): CandleBar | null;
|
|
86
|
+
/** Changes the active timeframe and clears all bar data. */
|
|
87
|
+
setTimeframe(timeframe: Timeframe): void;
|
|
88
|
+
/** Clears all bars (e.g. on symbol change before calling setHistory again). */
|
|
89
|
+
reset(): void;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=UnmanagedIngestion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UnmanagedIngestion.d.ts","sourceRoot":"","sources":["../../src/trading/UnmanagedIngestion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAE/E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,WAAW,yBAAyB;IACxC,2DAA2D;IAC3D,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;IAE9D;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,SAAS,EAAE,KAAK,IAAI,CAAC;IAEhD,yCAAyC;IACzC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,IAAI,CAAC;IAEvC,wEAAwE;IACxE,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACzC;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA4B;IAClD,OAAO,CAAC,UAAU,CAAY;gBAElB,SAAS,EAAE,SAAS,EAAE,IAAI,GAAE,yBAA8B;IAgBtE,OAAO,CAAC,gBAAgB;IAWxB;;;;;;;;;OASG;IACH,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,IAAI;IAYrC;;;;;;;;;OASG;IACH,UAAU,CAAC,GAAG,EAAE,WAAW,GAAG,YAAY;IAO1C,gEAAgE;IAChE,OAAO,IAAI,SAAS,SAAS,EAAE;IAI/B,qEAAqE;IACrE,YAAY,IAAI,SAAS,GAAG,IAAI;IAKhC,4DAA4D;IAC5D,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAMxC,+EAA+E;IAC/E,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ManagedTradingController — unit tests
|
|
3
|
+
*
|
|
4
|
+
* Covers:
|
|
5
|
+
* - Cannot initialize (registerProvider) in unmanaged mode
|
|
6
|
+
* - Can initialize in managed mode
|
|
7
|
+
* - isReady() reflects provider registration state
|
|
8
|
+
* - placeOrder() throws without a provider
|
|
9
|
+
* - placeOrder() with a mock provider: writes optimistic overlay entry,
|
|
10
|
+
* updates with provider id on success, rolls back on failure
|
|
11
|
+
* - cancelOrder() updates overlay status to 'cancelled'
|
|
12
|
+
* - modifyOrder() patches price / qty / label in overlay
|
|
13
|
+
* - placeBracketOrder() creates 3 orders with the same groupId in the overlay
|
|
14
|
+
* - reportFill() pushes to overlay + updates order status
|
|
15
|
+
* - All methods blocked in unmanaged mode
|
|
16
|
+
*/
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=ManagedTradingController.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ManagedTradingController.test.d.ts","sourceRoot":"","sources":["../../../src/trading/__tests__/ManagedTradingController.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TradingOverlayStore — unit tests
|
|
3
|
+
*
|
|
4
|
+
* Covers:
|
|
5
|
+
* - Orders: set, upsert, remove, getByGroup
|
|
6
|
+
* - Positions: set, upsert, remove
|
|
7
|
+
* - Fills: push, getFills, getFillsByOrder
|
|
8
|
+
* - clear() resets everything
|
|
9
|
+
* - snapshot() reflects current state
|
|
10
|
+
* - onChange subscriber fires on every mutation
|
|
11
|
+
* - Both unmanaged and managed pathways can write into the same store
|
|
12
|
+
* - groupId-based linked orders coexist correctly
|
|
13
|
+
* - TP / SL / entry roles are stored verbatim
|
|
14
|
+
*/
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=TradingOverlayStore.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TradingOverlayStore.test.d.ts","sourceRoot":"","sources":["../../../src/trading/__tests__/TradingOverlayStore.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UnmanagedIngestion — unit tests
|
|
3
|
+
*
|
|
4
|
+
* Covers:
|
|
5
|
+
* - setHistory loads bars in ascending order
|
|
6
|
+
* - pushCandle appends a new bar
|
|
7
|
+
* - pushCandle updates the current bar when same bucket
|
|
8
|
+
* - getLatestBar returns correct data
|
|
9
|
+
* - getBars() returns the full bar array
|
|
10
|
+
* - setTimeframe clears bars and resets engine
|
|
11
|
+
* - reset() wipes all bars
|
|
12
|
+
* - Throws when called in managed mode
|
|
13
|
+
* - onBarUpdated / onResync callbacks fire correctly
|
|
14
|
+
*/
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=UnmanagedIngestion.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UnmanagedIngestion.test.d.ts","sourceRoot":"","sources":["../../../src/trading/__tests__/UnmanagedIngestion.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ManagedTradingController
|
|
3
|
+
*
|
|
4
|
+
* The single managed-mode entry point for order routing.
|
|
5
|
+
*
|
|
6
|
+
* Responsibilities:
|
|
7
|
+
* 1. Enforce license/capability gates before any action.
|
|
8
|
+
* 2. Delegate execution to the registered IExecutionProvider.
|
|
9
|
+
* 3. Write results (orders, fills, positions) into the shared TradingOverlayStore
|
|
10
|
+
* so managed and unmanaged modes share one visual layer.
|
|
11
|
+
*
|
|
12
|
+
* STUB STATUS
|
|
13
|
+
* ──────────────────────────────────────────────────────────────────────────────
|
|
14
|
+
* All execution methods are implemented as stubs that:
|
|
15
|
+
* a) enforce license gates (will throw today if called without managed mode)
|
|
16
|
+
* b) throw NotImplementedError when no provider is registered
|
|
17
|
+
* c) are annotated with TODO markers for the implementation phase
|
|
18
|
+
*
|
|
19
|
+
* To implement a real provider, create a class implementing IExecutionProvider
|
|
20
|
+
* and call:
|
|
21
|
+
* controller.registerProvider(new MyBrokerProvider(...));
|
|
22
|
+
*
|
|
23
|
+
* The controller will then delegate to it automatically.
|
|
24
|
+
* ──────────────────────────────────────────────────────────────────────────────
|
|
25
|
+
*/
|
|
26
|
+
import type { TradingOverlayStore } from '../TradingOverlayStore';
|
|
27
|
+
import type { ExecutionFill } from '../tradingTypes';
|
|
28
|
+
import type { IExecutionProvider, PlaceOrderInput, ModifyOrderInput, PlaceBracketOrderInput, OrderAck, BracketOrderAck } from './managedTypes';
|
|
29
|
+
export declare class ManagedTradingController {
|
|
30
|
+
private _provider;
|
|
31
|
+
private readonly _store;
|
|
32
|
+
constructor(store: TradingOverlayStore);
|
|
33
|
+
/**
|
|
34
|
+
* Register the execution provider that will handle order routing.
|
|
35
|
+
*
|
|
36
|
+
* Call this before any order placement methods. Only one provider may be
|
|
37
|
+
* active at a time — calling this again replaces the previous provider.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```ts
|
|
41
|
+
* import { RithmicProvider } from '@forgecharts/rithmic';
|
|
42
|
+
* controller.registerProvider(new RithmicProvider(credentials));
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
registerProvider(provider: IExecutionProvider): void;
|
|
46
|
+
/** Returns the id of the currently registered provider, or null if none. */
|
|
47
|
+
getProviderId(): string | null;
|
|
48
|
+
/** True when a provider is registered and managed trading is licensed. */
|
|
49
|
+
isReady(): boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Place a single order via the registered execution provider.
|
|
52
|
+
*
|
|
53
|
+
* On success:
|
|
54
|
+
* - Upserts a ChartOrder into the overlay store (status: 'pending' → 'open').
|
|
55
|
+
* - Returns the provider acknowledgement.
|
|
56
|
+
*
|
|
57
|
+
* @throws If not in managed mode, orderEntry feature is off, or no provider.
|
|
58
|
+
*
|
|
59
|
+
* TODO: After provider.placeOrder resolves, subscribe to order status updates
|
|
60
|
+
* (provider event stream) and call _store.upsertOrder() as status changes.
|
|
61
|
+
*/
|
|
62
|
+
placeOrder(input: PlaceOrderInput): Promise<OrderAck>;
|
|
63
|
+
/**
|
|
64
|
+
* Cancel a working order by its provider-assigned id.
|
|
65
|
+
*
|
|
66
|
+
* On success:
|
|
67
|
+
* - Updates the order status in the overlay store to 'cancelled'.
|
|
68
|
+
*
|
|
69
|
+
* @throws If not in managed mode, orderEntry feature is off, or no provider.
|
|
70
|
+
*
|
|
71
|
+
* TODO: Remove the overlay entry after a configurable delay (so the line
|
|
72
|
+
* visually fades out rather than disappearing instantly).
|
|
73
|
+
*/
|
|
74
|
+
cancelOrder(orderId: string): Promise<void>;
|
|
75
|
+
/**
|
|
76
|
+
* Modify a working order in place.
|
|
77
|
+
*
|
|
78
|
+
* On success:
|
|
79
|
+
* - Updates the ChartOrder price/qty in the overlay store.
|
|
80
|
+
*
|
|
81
|
+
* @throws If not in managed mode, orderEntry feature is off, or no provider.
|
|
82
|
+
*
|
|
83
|
+
* TODO: Validate that the modified price is within instrument tick constraints
|
|
84
|
+
* before forwarding to the provider.
|
|
85
|
+
*/
|
|
86
|
+
modifyOrder(orderId: string, updates: ModifyOrderInput): Promise<OrderAck>;
|
|
87
|
+
/**
|
|
88
|
+
* Place a bracket order: entry + stop-loss + optional take-profit.
|
|
89
|
+
*
|
|
90
|
+
* On success:
|
|
91
|
+
* - Upserts all bracket legs as ChartOrders sharing the same groupId.
|
|
92
|
+
* - Returns acknowledgements for each leg.
|
|
93
|
+
*
|
|
94
|
+
* @throws If not in managed mode, bracketOrders feature is off, or no provider.
|
|
95
|
+
*
|
|
96
|
+
* TODO: Expose drag handles for each bracket leg in the chart overlay so
|
|
97
|
+
* users can adjust prices before confirming.
|
|
98
|
+
*/
|
|
99
|
+
placeBracketOrder(input: PlaceBracketOrderInput): Promise<BracketOrderAck>;
|
|
100
|
+
/**
|
|
101
|
+
* Report an execution fill received from the provider's event stream.
|
|
102
|
+
*
|
|
103
|
+
* Writes the fill into the overlay store and updates the parent order status.
|
|
104
|
+
* Called by the provider adapter whenever a fill notification arrives.
|
|
105
|
+
*
|
|
106
|
+
* TODO: Also update the related ChartPosition (create new or update qty/avgPrice).
|
|
107
|
+
*/
|
|
108
|
+
reportFill(fill: ExecutionFill): void;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=ManagedTradingController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ManagedTradingController.d.ts","sourceRoot":"","sources":["../../../src/trading/managed/ManagedTradingController.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,KAAK,EAAc,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,KAAK,EACV,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,sBAAsB,EACtB,QAAQ,EACR,eAAe,EAChB,MAAM,gBAAgB,CAAC;AAsBxB,qBAAa,wBAAwB;IAEnC,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;gBAEjC,KAAK,EAAE,mBAAmB;IAMtC;;;;;;;;;;;OAWG;IACH,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAKpD,4EAA4E;IAC5E,aAAa,IAAI,MAAM,GAAG,IAAI;IAI9B,0EAA0E;IAC1E,OAAO,IAAI,OAAO;IAMlB;;;;;;;;;;;OAWG;IACG,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC;IAqC3D;;;;;;;;;;OAUG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAajD;;;;;;;;;;OAUG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAoBhF;;;;;;;;;;;OAWG;IACG,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,eAAe,CAAC;IAuDhF;;;;;;;OAOG;IACH,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;CAetC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* managedCapabilities.ts
|
|
3
|
+
*
|
|
4
|
+
* Feature-gate helpers specific to managed trading.
|
|
5
|
+
* Thin wrappers around ChartRuntimeResolver that produce clear, actionable
|
|
6
|
+
* error messages when a managed method is called without a suitable license.
|
|
7
|
+
*
|
|
8
|
+
* Usage (inside a managed trading method):
|
|
9
|
+
*
|
|
10
|
+
* assertManagedMode(); // throws if not in managed mode
|
|
11
|
+
* assertCanPlaceOrders(); // throws if orderEntry flag is off
|
|
12
|
+
* assertCanUseBrackets(); // throws if bracketOrders flag is off
|
|
13
|
+
* assertCanUseDraggableOrders(); // throws if draggableOrders flag is off
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Asserts that the active license is in managed mode.
|
|
17
|
+
* @throws {Error} with a clear message if mode is unmanaged.
|
|
18
|
+
*/
|
|
19
|
+
export declare function assertManagedMode(): void;
|
|
20
|
+
/**
|
|
21
|
+
* Asserts that the license permits order placement (orderEntry feature).
|
|
22
|
+
* Implicitly checks managed mode first.
|
|
23
|
+
*/
|
|
24
|
+
export declare function assertCanPlaceOrders(): void;
|
|
25
|
+
/**
|
|
26
|
+
* Asserts that the license permits bracket / OCO orders.
|
|
27
|
+
* Implicitly checks managed mode and order entry first.
|
|
28
|
+
*/
|
|
29
|
+
export declare function assertCanUseBrackets(): void;
|
|
30
|
+
/**
|
|
31
|
+
* Asserts that the license permits drag-to-price order placement.
|
|
32
|
+
* Implicitly checks managed mode and order entry first.
|
|
33
|
+
*/
|
|
34
|
+
export declare function assertCanUseDraggableOrders(): void;
|
|
35
|
+
/**
|
|
36
|
+
* Asserts that the license permits the managed trading service hooks.
|
|
37
|
+
* Implicitly checks managed mode first.
|
|
38
|
+
*/
|
|
39
|
+
export declare function assertCanUseManagedTrading(): void;
|
|
40
|
+
export declare const isManagedCapable: () => boolean;
|
|
41
|
+
export declare const canPlaceOrders: () => boolean;
|
|
42
|
+
export declare const canPlaceBrackets: () => boolean;
|
|
43
|
+
export declare const canUseDraggable: () => boolean;
|
|
44
|
+
export declare const canUseManagedTradingHook: () => boolean;
|
|
45
|
+
//# sourceMappingURL=managedCapabilities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"managedCapabilities.d.ts","sourceRoot":"","sources":["../../../src/trading/managed/managedCapabilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAQH;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAQxC;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAQ3C;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAQ3C;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,IAAI,IAAI,CAQlD;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,IAAI,IAAI,CAQjD;AAID,eAAO,MAAM,gBAAgB,QAAe,OAAqC,CAAC;AAClF,eAAO,MAAM,cAAc,QAAiB,OAAsE,CAAC;AACnH,eAAO,MAAM,gBAAgB,QAAe,OAA+D,CAAC;AAC5G,eAAO,MAAM,eAAe,QAAgB,OAAiE,CAAC;AAC9G,eAAO,MAAM,wBAAwB,QAAO,OAA0E,CAAC"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* managedTypes.ts
|
|
3
|
+
*
|
|
4
|
+
* Input/output types specific to the managed trading flow.
|
|
5
|
+
* These are the shapes that callers pass into ManagedTradingController and
|
|
6
|
+
* that execution providers will eventually consume.
|
|
7
|
+
*
|
|
8
|
+
* Shared overlay types (ChartOrder, ChartPosition, ExecutionFill) are in
|
|
9
|
+
* ../tradingTypes — managed trading WRITES to those shapes, it does not
|
|
10
|
+
* define its own parallel set.
|
|
11
|
+
*/
|
|
12
|
+
import type { OrderSide } from '../tradingTypes';
|
|
13
|
+
/** Time-in-force policy for managed orders. */
|
|
14
|
+
export type TimeInForce = 'GTC' | 'IOC' | 'FOK' | 'GTD' | 'DAY';
|
|
15
|
+
/** Managed order type. */
|
|
16
|
+
export type ManagedOrderType = 'market' | 'limit' | 'stop_market' | 'stop_limit';
|
|
17
|
+
/**
|
|
18
|
+
* Input to placeOrder().
|
|
19
|
+
* The controller normalises this into a ChartOrder for the overlay store.
|
|
20
|
+
*/
|
|
21
|
+
export interface PlaceOrderInput {
|
|
22
|
+
/** Symbol / instrument identifier (e.g. 'BTCUSDT', 'ES', 'AAPL'). */
|
|
23
|
+
symbol: string;
|
|
24
|
+
side: OrderSide;
|
|
25
|
+
type: ManagedOrderType;
|
|
26
|
+
/** Required for limit and stop-limit orders. */
|
|
27
|
+
limitPrice?: number;
|
|
28
|
+
/** Required for stop-market and stop-limit orders. */
|
|
29
|
+
stopPrice?: number;
|
|
30
|
+
qty: number;
|
|
31
|
+
timeInForce?: TimeInForce;
|
|
32
|
+
/**
|
|
33
|
+
* Group identifier for bracket legs.
|
|
34
|
+
* The SDK does not enforce OCO execution — the execution provider is responsible.
|
|
35
|
+
*/
|
|
36
|
+
groupId?: string;
|
|
37
|
+
/** Human-readable label shown on the chart overlay. */
|
|
38
|
+
label?: string;
|
|
39
|
+
/** Arbitrary passthrough metadata forwarded to the execution provider. */
|
|
40
|
+
meta?: Record<string, unknown>;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Input to modifyOrder().
|
|
44
|
+
* Only fields that are explicitly set will be forwarded to the provider.
|
|
45
|
+
*/
|
|
46
|
+
export interface ModifyOrderInput {
|
|
47
|
+
limitPrice?: number;
|
|
48
|
+
stopPrice?: number;
|
|
49
|
+
qty?: number;
|
|
50
|
+
label?: string;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Input to placeBracketOrder().
|
|
54
|
+
* Places an entry order plus linked stop-loss and/or take-profit in one call.
|
|
55
|
+
* All three legs share a `groupId` so they are visually associated on the chart.
|
|
56
|
+
*/
|
|
57
|
+
export interface PlaceBracketOrderInput {
|
|
58
|
+
/** The entry leg — type/side/price/qty. Provider may require limit or stop. */
|
|
59
|
+
entry: PlaceOrderInput;
|
|
60
|
+
/** Stop-loss price. Required field — brackets must have a risk leg. */
|
|
61
|
+
stopLossPrice: number;
|
|
62
|
+
/**
|
|
63
|
+
* Take-profit price.
|
|
64
|
+
* Optional — some workflows only manage downside.
|
|
65
|
+
*/
|
|
66
|
+
takeProfitPrice?: number;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Returned by placeOrder() and placeBracketOrder() once acknowledged by the
|
|
70
|
+
* execution provider (even if not yet filled).
|
|
71
|
+
*/
|
|
72
|
+
export interface OrderAck {
|
|
73
|
+
/** Provider-assigned order id. */
|
|
74
|
+
orderId: string;
|
|
75
|
+
/** Optional provider-assigned client order id. */
|
|
76
|
+
clientOrderId?: string;
|
|
77
|
+
/** Timestamp (ms) when the ack was received from the provider. */
|
|
78
|
+
timestamp: number;
|
|
79
|
+
}
|
|
80
|
+
/** Returned by placeBracketOrder — one ack per submitted leg. */
|
|
81
|
+
export interface BracketOrderAck {
|
|
82
|
+
entry: OrderAck;
|
|
83
|
+
stopLoss: OrderAck;
|
|
84
|
+
takeProfit?: OrderAck;
|
|
85
|
+
/** Shared group id linking all legs on the chart overlay. */
|
|
86
|
+
groupId: string;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* IExecutionProvider
|
|
90
|
+
*
|
|
91
|
+
* The contract every broker / exchange adapter must implement.
|
|
92
|
+
* ManagedTradingController delegates all actual order routing to whichever
|
|
93
|
+
* provider is registered at runtime.
|
|
94
|
+
*
|
|
95
|
+
* Providers are NOT implemented here — this interface is the extension point.
|
|
96
|
+
*/
|
|
97
|
+
export interface IExecutionProvider {
|
|
98
|
+
/** Unique provider identifier (e.g. 'rithmic', 'binance', 'interactive-brokers'). */
|
|
99
|
+
readonly providerId: string;
|
|
100
|
+
/**
|
|
101
|
+
* Submit a new order to the venue.
|
|
102
|
+
* Must resolve with an OrderAck once the venue acknowledges.
|
|
103
|
+
*/
|
|
104
|
+
placeOrder(input: PlaceOrderInput): Promise<OrderAck>;
|
|
105
|
+
/**
|
|
106
|
+
* Cancel a working order by its provider-assigned id.
|
|
107
|
+
* Must resolve once the cancellation is acknowledged.
|
|
108
|
+
*/
|
|
109
|
+
cancelOrder(orderId: string): Promise<void>;
|
|
110
|
+
/**
|
|
111
|
+
* Modify a working order in place.
|
|
112
|
+
* Partial updates — only fields present in `updates` are changed.
|
|
113
|
+
*/
|
|
114
|
+
modifyOrder(orderId: string, updates: ModifyOrderInput): Promise<OrderAck>;
|
|
115
|
+
/**
|
|
116
|
+
* Place a bracket order (entry + stop-loss + optional take-profit).
|
|
117
|
+
* Providers may implement this as a single atomic request or as multiple
|
|
118
|
+
* linked orders — the contract is the same from the controller's perspective.
|
|
119
|
+
*/
|
|
120
|
+
placeBracketOrder(input: PlaceBracketOrderInput): Promise<BracketOrderAck>;
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=managedTypes.d.ts.map
|