@363045841yyt/klinechart-core 0.8.5 → 0.8.7
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/config/chartSettings.d.ts +21 -2
- package/dist/config/chartSettings.d.ts.map +1 -1
- package/dist/config/chartSettings.js +9 -1
- package/dist/config/chartSettings.js.map +1 -1
- package/dist/controllers/createChartController.d.ts.map +1 -1
- package/dist/controllers/createChartController.js +50 -3
- package/dist/controllers/createChartController.js.map +1 -1
- package/dist/controllers/types.d.ts +34 -23
- package/dist/controllers/types.d.ts.map +1 -1
- package/dist/data-fetchers/baostock.d.ts +0 -3
- package/dist/data-fetchers/baostock.d.ts.map +1 -1
- package/dist/data-fetchers/baostock.js +0 -1
- package/dist/data-fetchers/baostock.js.map +1 -1
- package/dist/data-fetchers/dataBuffer.d.ts +13 -2
- package/dist/data-fetchers/dataBuffer.d.ts.map +1 -1
- package/dist/data-fetchers/dataBuffer.js +41 -7
- package/dist/data-fetchers/dataBuffer.js.map +1 -1
- package/dist/data-fetchers/dataBufferTypes.d.ts +11 -0
- package/dist/data-fetchers/dataBufferTypes.d.ts.map +1 -0
- package/dist/data-fetchers/dataBufferTypes.js +2 -0
- package/dist/data-fetchers/dataBufferTypes.js.map +1 -0
- package/dist/data-fetchers/fetcherDefinitionRegistry.d.ts +4 -3
- package/dist/data-fetchers/fetcherDefinitionRegistry.d.ts.map +1 -1
- package/dist/data-fetchers/fetcherDefinitionRegistry.js +9 -2
- package/dist/data-fetchers/fetcherDefinitionRegistry.js.map +1 -1
- package/dist/data-fetchers/gotdx/gotdx.d.ts +7 -0
- package/dist/data-fetchers/gotdx/gotdx.d.ts.map +1 -0
- package/dist/data-fetchers/gotdx/gotdx.js +7 -0
- package/dist/data-fetchers/gotdx/gotdx.js.map +1 -0
- package/dist/data-fetchers/gotdx.d.ts +0 -8
- package/dist/data-fetchers/gotdx.d.ts.map +1 -1
- package/dist/data-fetchers/gotdx.js +40 -3
- package/dist/data-fetchers/gotdx.js.map +1 -1
- package/dist/data-fetchers/hundred-mock.d.ts +0 -3
- package/dist/data-fetchers/hundred-mock.d.ts.map +1 -1
- package/dist/data-fetchers/hundred-mock.js +0 -1
- package/dist/data-fetchers/hundred-mock.js.map +1 -1
- package/dist/data-fetchers/index.d.ts +10 -8
- package/dist/data-fetchers/index.d.ts.map +1 -1
- package/dist/data-fetchers/index.js +8 -7
- package/dist/data-fetchers/index.js.map +1 -1
- package/dist/data-fetchers/router.d.ts +2 -0
- package/dist/data-fetchers/router.d.ts.map +1 -1
- package/dist/data-fetchers/router.js +8 -1
- package/dist/data-fetchers/router.js.map +1 -1
- package/dist/data-fetchers/thousand-mock.d.ts +0 -3
- package/dist/data-fetchers/thousand-mock.d.ts.map +1 -1
- package/dist/data-fetchers/thousand-mock.js +0 -1
- package/dist/data-fetchers/thousand-mock.js.map +1 -1
- package/dist/data-fetchers/timeShareBuffer.d.ts +27 -0
- package/dist/data-fetchers/timeShareBuffer.d.ts.map +1 -0
- package/dist/data-fetchers/timeShareBuffer.js +79 -0
- package/dist/data-fetchers/timeShareBuffer.js.map +1 -0
- package/dist/data-fetchers/tradingview.d.ts +0 -8
- package/dist/data-fetchers/tradingview.d.ts.map +1 -1
- package/dist/data-fetchers/tradingview.js +1 -2
- package/dist/data-fetchers/tradingview.js.map +1 -1
- package/dist/data-fetchers/types.d.ts +9 -1
- package/dist/data-fetchers/types.d.ts.map +1 -1
- package/dist/engine/chart.d.ts +29 -1
- package/dist/engine/chart.d.ts.map +1 -1
- package/dist/engine/chart.js +140 -5
- package/dist/engine/chart.js.map +1 -1
- package/dist/engine/chartTypes.d.ts +3 -0
- package/dist/engine/chartTypes.d.ts.map +1 -1
- package/dist/engine/controller/interaction.d.ts +12 -1
- package/dist/engine/controller/interaction.d.ts.map +1 -1
- package/dist/engine/controller/interaction.js +105 -14
- package/dist/engine/controller/interaction.js.map +1 -1
- package/dist/engine/data/chartDataManager.d.ts +38 -11
- package/dist/engine/data/chartDataManager.d.ts.map +1 -1
- package/dist/engine/data/chartDataManager.js +491 -188
- package/dist/engine/data/chartDataManager.js.map +1 -1
- package/dist/engine/draw/pixelAlign.d.ts +0 -27
- package/dist/engine/draw/pixelAlign.d.ts.map +1 -1
- package/dist/engine/draw/pixelAlign.js +1 -1
- package/dist/engine/draw/pixelAlign.js.map +1 -1
- package/dist/engine/indicators/calculators.d.ts +0 -104
- package/dist/engine/indicators/calculators.d.ts.map +1 -1
- package/dist/engine/indicators/calculators.js +77 -171
- package/dist/engine/indicators/calculators.js.map +1 -1
- package/dist/engine/indicators/chartIndicatorManager.d.ts.map +1 -1
- package/dist/engine/indicators/chartIndicatorManager.js +3 -2
- package/dist/engine/indicators/chartIndicatorManager.js.map +1 -1
- package/dist/engine/indicators/ichimokuState.d.ts +2 -0
- package/dist/engine/indicators/ichimokuState.d.ts.map +1 -1
- package/dist/engine/indicators/ichimokuState.js.map +1 -1
- package/dist/engine/indicators/macdState.d.ts +0 -5
- package/dist/engine/indicators/macdState.d.ts.map +1 -1
- package/dist/engine/indicators/macdState.js +1 -1
- package/dist/engine/indicators/macdState.js.map +1 -1
- package/dist/engine/indicators/registerBuiltins.d.ts.map +1 -1
- package/dist/engine/indicators/registerBuiltins.js +1 -0
- package/dist/engine/indicators/registerBuiltins.js.map +1 -1
- package/dist/engine/indicators/rsiState.d.ts +0 -4
- package/dist/engine/indicators/rsiState.d.ts.map +1 -1
- package/dist/engine/indicators/rsiState.js +1 -1
- package/dist/engine/indicators/rsiState.js.map +1 -1
- package/dist/engine/indicators/scheduler.d.ts.map +1 -1
- package/dist/engine/indicators/scheduler.js +1 -7
- package/dist/engine/indicators/scheduler.js.map +1 -1
- package/dist/engine/indicators/visibleStateComposers.d.ts +14 -0
- package/dist/engine/indicators/visibleStateComposers.d.ts.map +1 -1
- package/dist/engine/indicators/visibleStateComposers.js +34 -0
- package/dist/engine/indicators/visibleStateComposers.js.map +1 -1
- package/dist/engine/layout/chartPaneLayout.d.ts +2 -0
- package/dist/engine/layout/chartPaneLayout.d.ts.map +1 -1
- package/dist/engine/layout/chartPaneLayout.js +24 -6
- package/dist/engine/layout/chartPaneLayout.js.map +1 -1
- package/dist/engine/modes/kLineMode.d.ts +37 -0
- package/dist/engine/modes/kLineMode.d.ts.map +1 -0
- package/dist/engine/modes/kLineMode.js +22 -0
- package/dist/engine/modes/kLineMode.js.map +1 -0
- package/dist/engine/modes/timeShareMode.d.ts +37 -0
- package/dist/engine/modes/timeShareMode.d.ts.map +1 -0
- package/dist/engine/modes/timeShareMode.js +59 -0
- package/dist/engine/modes/timeShareMode.js.map +1 -0
- package/dist/engine/modes/types.d.ts +47 -0
- package/dist/engine/modes/types.d.ts.map +1 -0
- package/dist/engine/modes/types.js +2 -0
- package/dist/engine/modes/types.js.map +1 -0
- package/dist/engine/paneRenderer.d.ts +4 -0
- package/dist/engine/paneRenderer.d.ts.map +1 -1
- package/dist/engine/paneRenderer.js +27 -40
- package/dist/engine/paneRenderer.js.map +1 -1
- package/dist/engine/render/chartRenderer.d.ts +4 -23
- package/dist/engine/render/chartRenderer.d.ts.map +1 -1
- package/dist/engine/render/chartRenderer.js +87 -17
- package/dist/engine/render/chartRenderer.js.map +1 -1
- package/dist/engine/renderers/Indicator/atr.d.ts +1 -18
- package/dist/engine/renderers/Indicator/atr.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/atr.js +3 -22
- package/dist/engine/renderers/Indicator/atr.js.map +1 -1
- package/dist/engine/renderers/Indicator/boll.d.ts +1 -4
- package/dist/engine/renderers/Indicator/boll.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/boll.js +3 -18
- package/dist/engine/renderers/Indicator/boll.js.map +1 -1
- package/dist/engine/renderers/Indicator/cci.d.ts +1 -22
- package/dist/engine/renderers/Indicator/cci.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/cci.js +8 -20
- package/dist/engine/renderers/Indicator/cci.js.map +1 -1
- package/dist/engine/renderers/Indicator/chaikinVol.d.ts +1 -7
- package/dist/engine/renderers/Indicator/chaikinVol.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/chaikinVol.js +3 -16
- package/dist/engine/renderers/Indicator/chaikinVol.js.map +1 -1
- package/dist/engine/renderers/Indicator/cmf.d.ts +1 -7
- package/dist/engine/renderers/Indicator/cmf.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/cmf.js +3 -15
- package/dist/engine/renderers/Indicator/cmf.js.map +1 -1
- package/dist/engine/renderers/Indicator/dema.d.ts +1 -7
- package/dist/engine/renderers/Indicator/dema.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/dema.js +3 -17
- package/dist/engine/renderers/Indicator/dema.js.map +1 -1
- package/dist/engine/renderers/Indicator/donchian.d.ts +1 -8
- package/dist/engine/renderers/Indicator/donchian.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/donchian.js +2 -2
- package/dist/engine/renderers/Indicator/donchian.js.map +1 -1
- package/dist/engine/renderers/Indicator/ene.d.ts +1 -12
- package/dist/engine/renderers/Indicator/ene.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/ene.js +3 -18
- package/dist/engine/renderers/Indicator/ene.js.map +1 -1
- package/dist/engine/renderers/Indicator/expma.d.ts +1 -4
- package/dist/engine/renderers/Indicator/expma.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/expma.js +2 -2
- package/dist/engine/renderers/Indicator/expma.js.map +1 -1
- package/dist/engine/renderers/Indicator/fastk.d.ts +1 -22
- package/dist/engine/renderers/Indicator/fastk.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/fastk.js +11 -64
- package/dist/engine/renderers/Indicator/fastk.js.map +1 -1
- package/dist/engine/renderers/Indicator/fib.d.ts +1 -6
- package/dist/engine/renderers/Indicator/fib.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/fib.js +2 -2
- package/dist/engine/renderers/Indicator/fib.js.map +1 -1
- package/dist/engine/renderers/Indicator/hma.d.ts +1 -7
- package/dist/engine/renderers/Indicator/hma.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/hma.js +3 -17
- package/dist/engine/renderers/Indicator/hma.js.map +1 -1
- package/dist/engine/renderers/Indicator/hv.d.ts +1 -7
- package/dist/engine/renderers/Indicator/hv.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/hv.js +3 -16
- package/dist/engine/renderers/Indicator/hv.js.map +1 -1
- package/dist/engine/renderers/Indicator/ichimoku.d.ts +1 -8
- package/dist/engine/renderers/Indicator/ichimoku.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/ichimoku.js +27 -5
- package/dist/engine/renderers/Indicator/ichimoku.js.map +1 -1
- package/dist/engine/renderers/Indicator/kama.d.ts +1 -7
- package/dist/engine/renderers/Indicator/kama.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/kama.js +3 -17
- package/dist/engine/renderers/Indicator/kama.js.map +1 -1
- package/dist/engine/renderers/Indicator/keltner.d.ts +1 -8
- package/dist/engine/renderers/Indicator/keltner.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/keltner.js +2 -2
- package/dist/engine/renderers/Indicator/keltner.js.map +1 -1
- package/dist/engine/renderers/Indicator/kst.d.ts +1 -22
- package/dist/engine/renderers/Indicator/kst.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/kst.js +2 -2
- package/dist/engine/renderers/Indicator/kst.js.map +1 -1
- package/dist/engine/renderers/Indicator/ma.d.ts +1 -4
- package/dist/engine/renderers/Indicator/ma.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/ma.js +1 -1
- package/dist/engine/renderers/Indicator/ma.js.map +1 -1
- package/dist/engine/renderers/Indicator/macd.d.ts +1 -49
- package/dist/engine/renderers/Indicator/macd.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/macd.js +2 -12
- package/dist/engine/renderers/Indicator/macd.js.map +1 -1
- package/dist/engine/renderers/Indicator/mainIndicatorLegend.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/mainIndicatorLegend.js +205 -0
- package/dist/engine/renderers/Indicator/mainIndicatorLegend.js.map +1 -1
- package/dist/engine/renderers/Indicator/mfi.d.ts +1 -7
- package/dist/engine/renderers/Indicator/mfi.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/mfi.js +3 -15
- package/dist/engine/renderers/Indicator/mfi.js.map +1 -1
- package/dist/engine/renderers/Indicator/mom.d.ts +1 -22
- package/dist/engine/renderers/Indicator/mom.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/mom.js +8 -23
- package/dist/engine/renderers/Indicator/mom.js.map +1 -1
- package/dist/engine/renderers/Indicator/obv.d.ts +1 -7
- package/dist/engine/renderers/Indicator/obv.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/obv.js +3 -14
- package/dist/engine/renderers/Indicator/obv.js.map +1 -1
- package/dist/engine/renderers/Indicator/parkinson.d.ts +1 -7
- package/dist/engine/renderers/Indicator/parkinson.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/parkinson.js +3 -16
- package/dist/engine/renderers/Indicator/parkinson.js.map +1 -1
- package/dist/engine/renderers/Indicator/pivot.d.ts +1 -6
- package/dist/engine/renderers/Indicator/pivot.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/pivot.js +2 -2
- package/dist/engine/renderers/Indicator/pivot.js.map +1 -1
- package/dist/engine/renderers/Indicator/pvt.d.ts +1 -7
- package/dist/engine/renderers/Indicator/pvt.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/pvt.js +3 -14
- package/dist/engine/renderers/Indicator/pvt.js.map +1 -1
- package/dist/engine/renderers/Indicator/roc.d.ts +1 -8
- package/dist/engine/renderers/Indicator/roc.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/roc.js +3 -15
- package/dist/engine/renderers/Indicator/roc.js.map +1 -1
- package/dist/engine/renderers/Indicator/rsi.d.ts +0 -32
- package/dist/engine/renderers/Indicator/rsi.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/rsi.js +3 -3
- package/dist/engine/renderers/Indicator/rsi.js.map +1 -1
- package/dist/engine/renderers/Indicator/sar.d.ts +1 -8
- package/dist/engine/renderers/Indicator/sar.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/sar.js +2 -2
- package/dist/engine/renderers/Indicator/sar.js.map +1 -1
- package/dist/engine/renderers/Indicator/scale/indicator_scale.d.ts +2 -0
- package/dist/engine/renderers/Indicator/scale/indicator_scale.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/scale/indicator_scale.js +10 -6
- package/dist/engine/renderers/Indicator/scale/indicator_scale.js.map +1 -1
- package/dist/engine/renderers/Indicator/shared/dashedLines.d.ts +4 -0
- package/dist/engine/renderers/Indicator/shared/dashedLines.d.ts.map +1 -0
- package/dist/engine/renderers/Indicator/shared/dashedLines.js +50 -0
- package/dist/engine/renderers/Indicator/shared/dashedLines.js.map +1 -0
- package/dist/engine/renderers/Indicator/shared/titleInfo.d.ts +14 -0
- package/dist/engine/renderers/Indicator/shared/titleInfo.d.ts.map +1 -0
- package/dist/engine/renderers/Indicator/shared/titleInfo.js +25 -0
- package/dist/engine/renderers/Indicator/shared/titleInfo.js.map +1 -0
- package/dist/engine/renderers/Indicator/shared/webglBand.d.ts +5 -0
- package/dist/engine/renderers/Indicator/shared/webglBand.d.ts.map +1 -0
- package/dist/engine/renderers/Indicator/shared/webglBand.js +17 -0
- package/dist/engine/renderers/Indicator/shared/webglBand.js.map +1 -0
- package/dist/engine/renderers/Indicator/stoch.d.ts +1 -22
- package/dist/engine/renderers/Indicator/stoch.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/stoch.js +5 -46
- package/dist/engine/renderers/Indicator/stoch.js.map +1 -1
- package/dist/engine/renderers/Indicator/structure.d.ts +1 -7
- package/dist/engine/renderers/Indicator/structure.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/structure.js +2 -2
- package/dist/engine/renderers/Indicator/structure.js.map +1 -1
- package/dist/engine/renderers/Indicator/supertrend.d.ts +1 -8
- package/dist/engine/renderers/Indicator/supertrend.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/supertrend.js +2 -2
- package/dist/engine/renderers/Indicator/supertrend.js.map +1 -1
- package/dist/engine/renderers/Indicator/tema.d.ts +1 -7
- package/dist/engine/renderers/Indicator/tema.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/tema.js +3 -17
- package/dist/engine/renderers/Indicator/tema.js.map +1 -1
- package/dist/engine/renderers/Indicator/trix.d.ts +1 -8
- package/dist/engine/renderers/Indicator/trix.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/trix.js +2 -2
- package/dist/engine/renderers/Indicator/trix.js.map +1 -1
- package/dist/engine/renderers/Indicator/vma.d.ts +1 -7
- package/dist/engine/renderers/Indicator/vma.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/vma.js +3 -15
- package/dist/engine/renderers/Indicator/vma.js.map +1 -1
- package/dist/engine/renderers/Indicator/volumeProfile.d.ts +1 -7
- package/dist/engine/renderers/Indicator/volumeProfile.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/volumeProfile.js +2 -2
- package/dist/engine/renderers/Indicator/volumeProfile.js.map +1 -1
- package/dist/engine/renderers/Indicator/vwap.d.ts +1 -7
- package/dist/engine/renderers/Indicator/vwap.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/vwap.js +3 -14
- package/dist/engine/renderers/Indicator/vwap.js.map +1 -1
- package/dist/engine/renderers/Indicator/wma.d.ts +1 -7
- package/dist/engine/renderers/Indicator/wma.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/wma.js +3 -17
- package/dist/engine/renderers/Indicator/wma.js.map +1 -1
- package/dist/engine/renderers/Indicator/wmsr.d.ts +1 -22
- package/dist/engine/renderers/Indicator/wmsr.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/wmsr.js +8 -23
- package/dist/engine/renderers/Indicator/wmsr.js.map +1 -1
- package/dist/engine/renderers/Indicator/zones.d.ts +1 -6
- package/dist/engine/renderers/Indicator/zones.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/zones.js +2 -2
- package/dist/engine/renderers/Indicator/zones.js.map +1 -1
- package/dist/engine/renderers/candle.d.ts +0 -16
- package/dist/engine/renderers/candle.d.ts.map +1 -1
- package/dist/engine/renderers/candle.js +1 -1
- package/dist/engine/renderers/candle.js.map +1 -1
- package/dist/engine/renderers/comparisonLine.d.ts.map +1 -1
- package/dist/engine/renderers/comparisonLine.js +2 -0
- package/dist/engine/renderers/comparisonLine.js.map +1 -1
- package/dist/engine/renderers/crosshair.js +1 -1
- package/dist/engine/renderers/crosshair.js.map +1 -1
- package/dist/engine/renderers/extremaMarkers.d.ts.map +1 -1
- package/dist/engine/renderers/extremaMarkers.js +2 -0
- package/dist/engine/renderers/extremaMarkers.js.map +1 -1
- package/dist/engine/renderers/lastPrice.d.ts.map +1 -1
- package/dist/engine/renderers/lastPrice.js +7 -2
- package/dist/engine/renderers/lastPrice.js.map +1 -1
- package/dist/engine/renderers/leftYAxis.d.ts +11 -0
- package/dist/engine/renderers/leftYAxis.d.ts.map +1 -0
- package/dist/engine/renderers/leftYAxis.js +67 -0
- package/dist/engine/renderers/leftYAxis.js.map +1 -0
- package/dist/engine/renderers/subVolume.d.ts +1 -13
- package/dist/engine/renderers/subVolume.d.ts.map +1 -1
- package/dist/engine/renderers/subVolume.js +1 -1
- package/dist/engine/renderers/subVolume.js.map +1 -1
- package/dist/engine/renderers/timeAxis.d.ts +0 -2
- package/dist/engine/renderers/timeAxis.d.ts.map +1 -1
- package/dist/engine/renderers/timeAxis.js +4 -1
- package/dist/engine/renderers/timeAxis.js.map +1 -1
- package/dist/engine/renderers/timeShare.d.ts +3 -0
- package/dist/engine/renderers/timeShare.d.ts.map +1 -0
- package/dist/engine/renderers/timeShare.js +260 -0
- package/dist/engine/renderers/timeShare.js.map +1 -0
- package/dist/engine/renderers/yAxis.d.ts.map +1 -1
- package/dist/engine/renderers/yAxis.js +9 -1
- package/dist/engine/renderers/yAxis.js.map +1 -1
- package/dist/engine/scale/price.d.ts +0 -7
- package/dist/engine/scale/price.d.ts.map +1 -1
- package/dist/engine/scale/price.js +3 -2
- package/dist/engine/scale/price.js.map +1 -1
- package/dist/engine/theme/fonts.d.ts +0 -2
- package/dist/engine/theme/fonts.d.ts.map +1 -1
- package/dist/engine/theme/fonts.js +1 -1
- package/dist/engine/theme/fonts.js.map +1 -1
- package/dist/engine/utils/klineConfig.d.ts.map +1 -1
- package/dist/engine/utils/klineConfig.js +1 -5
- package/dist/engine/utils/klineConfig.js.map +1 -1
- package/dist/engine/viewport/chartViewportManager.d.ts.map +1 -1
- package/dist/engine/viewport/chartViewportManager.js +6 -5
- package/dist/engine/viewport/chartViewportManager.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/chartBridge.d.ts.map +1 -1
- package/dist/mcp/chartBridge.js +2 -1
- package/dist/mcp/chartBridge.js.map +1 -1
- package/dist/plugin/types.d.ts +1 -0
- package/dist/plugin/types.d.ts.map +1 -1
- package/dist/plugin/types.js.map +1 -1
- package/dist/semantic/types.d.ts +1 -1
- package/dist/semantic/types.d.ts.map +1 -1
- package/dist/tokens/theme-base.d.ts +5 -0
- package/dist/tokens/theme-base.d.ts.map +1 -0
- package/dist/tokens/theme-base.js +31 -0
- package/dist/tokens/theme-base.js.map +1 -0
- package/dist/tokens/theme-china.d.ts.map +1 -1
- package/dist/tokens/theme-china.js +3 -0
- package/dist/tokens/theme-china.js.map +1 -1
- package/dist/tokens/theme-dark.d.ts.map +1 -1
- package/dist/tokens/theme-dark.js +12 -31
- package/dist/tokens/theme-dark.js.map +1 -1
- package/dist/tokens/theme-light.d.ts.map +1 -1
- package/dist/tokens/theme-light.js +11 -30
- package/dist/tokens/theme-light.js.map +1 -1
- package/dist/tokens/types.d.ts +7 -0
- package/dist/tokens/types.d.ts.map +1 -1
- package/dist/types/price.d.ts +8 -0
- package/dist/types/price.d.ts.map +1 -1
- package/dist/types/price.js +4 -0
- package/dist/types/price.js.map +1 -1
- package/dist/utils/dateFormat.d.ts +5 -42
- package/dist/utils/dateFormat.d.ts.map +1 -1
- package/dist/utils/dateFormat.js +24 -4
- package/dist/utils/dateFormat.js.map +1 -1
- package/dist/utils/kLineDraw/axis.d.ts +9 -28
- package/dist/utils/kLineDraw/axis.d.ts.map +1 -1
- package/dist/utils/kLineDraw/axis.js +33 -58
- package/dist/utils/kLineDraw/axis.js.map +1 -1
- package/dist/utils/uuid.d.ts +2 -0
- package/dist/utils/uuid.d.ts.map +1 -0
- package/dist/utils/uuid.js +10 -0
- package/dist/utils/uuid.js.map +1 -0
- package/dist/utils/volumePrice.d.ts +0 -40
- package/dist/utils/volumePrice.d.ts.map +1 -1
- package/dist/utils/volumePrice.js +2 -2
- package/dist/utils/volumePrice.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
- package/src/config/chartSettings.ts +9 -1
- package/src/controllers/createChartController.ts +53 -3
- package/src/controllers/types.ts +36 -17
- package/src/data-fetchers/__tests__/dataBuffer.test.ts +39 -5
- package/src/data-fetchers/baostock.ts +1 -1
- package/src/data-fetchers/dataBuffer.ts +48 -11
- package/src/data-fetchers/dataBufferTypes.ts +11 -0
- package/src/data-fetchers/fetcherDefinitionRegistry.ts +14 -4
- package/src/data-fetchers/gotdx/gotdx.ts +6 -0
- package/src/data-fetchers/gotdx.ts +45 -7
- package/src/data-fetchers/hundred-mock.ts +1 -1
- package/src/data-fetchers/index.ts +10 -20
- package/src/data-fetchers/router.ts +12 -1
- package/src/data-fetchers/thousand-mock.ts +1 -1
- package/src/data-fetchers/timeShareBuffer.ts +92 -0
- package/src/data-fetchers/tradingview.ts +2 -2
- package/src/data-fetchers/types.ts +15 -2
- package/src/engine/__tests__/chart.dpr.test.ts +1 -0
- package/src/engine/chart.ts +157 -7
- package/src/engine/chartTypes.ts +3 -0
- package/src/engine/controller/__tests__/interaction.dpr.test.ts +2 -0
- package/src/engine/controller/interaction.ts +115 -16
- package/src/engine/data/chartDataManager.ts +557 -214
- package/src/engine/draw/pixelAlign.ts +1 -1
- package/src/engine/indicators/__tests__/_propertyAssertions.ts +2 -2
- package/src/engine/indicators/__tests__/ichimoku.test.ts +3 -3
- package/src/engine/indicators/__tests__/registerBuiltins.test.ts +1 -1
- package/src/engine/indicators/calculators.ts +105 -236
- package/src/engine/indicators/chartIndicatorManager.ts +3 -2
- package/src/engine/indicators/ichimokuState.ts +2 -0
- package/src/engine/indicators/macdState.ts +1 -1
- package/src/engine/indicators/registerBuiltins.ts +1 -0
- package/src/engine/indicators/rsiState.ts +1 -1
- package/src/engine/indicators/scheduler.ts +1 -7
- package/src/engine/indicators/visibleStateComposers.ts +51 -0
- package/src/engine/layout/chartPaneLayout.ts +26 -6
- package/src/engine/modes/kLineMode.ts +57 -0
- package/src/engine/modes/timeShareMode.ts +95 -0
- package/src/engine/modes/types.ts +63 -0
- package/src/engine/paneRenderer.ts +37 -46
- package/src/engine/render/chartRenderer.ts +93 -20
- package/src/engine/renderers/Indicator/atr.ts +4 -29
- package/src/engine/renderers/Indicator/boll.ts +3 -24
- package/src/engine/renderers/Indicator/cci.ts +9 -27
- package/src/engine/renderers/Indicator/chaikinVol.ts +3 -23
- package/src/engine/renderers/Indicator/cmf.ts +3 -22
- package/src/engine/renderers/Indicator/dema.ts +5 -26
- package/src/engine/renderers/Indicator/donchian.ts +3 -3
- package/src/engine/renderers/Indicator/ene.ts +3 -24
- package/src/engine/renderers/Indicator/expma.ts +2 -2
- package/src/engine/renderers/Indicator/fastk.ts +12 -95
- package/src/engine/renderers/Indicator/fib.ts +2 -2
- package/src/engine/renderers/Indicator/hma.ts +5 -26
- package/src/engine/renderers/Indicator/hv.ts +3 -23
- package/src/engine/renderers/Indicator/ichimoku.ts +26 -6
- package/src/engine/renderers/Indicator/kama.ts +5 -26
- package/src/engine/renderers/Indicator/keltner.ts +3 -3
- package/src/engine/renderers/Indicator/kst.ts +3 -3
- package/src/engine/renderers/Indicator/ma.ts +1 -1
- package/src/engine/renderers/Indicator/macd.ts +4 -21
- package/src/engine/renderers/Indicator/mainIndicatorLegend.ts +228 -1
- package/src/engine/renderers/Indicator/mfi.ts +3 -22
- package/src/engine/renderers/Indicator/mom.ts +9 -30
- package/src/engine/renderers/Indicator/obv.ts +3 -21
- package/src/engine/renderers/Indicator/parkinson.ts +3 -23
- package/src/engine/renderers/Indicator/pivot.ts +2 -2
- package/src/engine/renderers/Indicator/pvt.ts +3 -21
- package/src/engine/renderers/Indicator/roc.ts +4 -23
- package/src/engine/renderers/Indicator/rsi.ts +4 -4
- package/src/engine/renderers/Indicator/sar.ts +3 -3
- package/src/engine/renderers/Indicator/scale/indicator_scale.ts +11 -4
- package/src/engine/renderers/Indicator/shared/dashedLines.ts +81 -0
- package/src/engine/renderers/Indicator/shared/titleInfo.ts +52 -0
- package/src/engine/renderers/Indicator/shared/webglBand.ts +23 -0
- package/src/engine/renderers/Indicator/stoch.ts +6 -71
- package/src/engine/renderers/Indicator/structure.ts +2 -2
- package/src/engine/renderers/Indicator/supertrend.ts +3 -3
- package/src/engine/renderers/Indicator/tema.ts +5 -26
- package/src/engine/renderers/Indicator/trix.ts +3 -3
- package/src/engine/renderers/Indicator/vma.ts +3 -22
- package/src/engine/renderers/Indicator/volumeProfile.ts +2 -2
- package/src/engine/renderers/Indicator/vwap.ts +3 -21
- package/src/engine/renderers/Indicator/wma.ts +5 -26
- package/src/engine/renderers/Indicator/wmsr.ts +9 -30
- package/src/engine/renderers/Indicator/zones.ts +2 -2
- package/src/engine/renderers/candle.ts +1 -1
- package/src/engine/renderers/comparisonLine.ts +1 -0
- package/src/engine/renderers/crosshair.ts +1 -1
- package/src/engine/renderers/extremaMarkers.ts +1 -0
- package/src/engine/renderers/lastPrice.ts +5 -2
- package/src/engine/renderers/leftYAxis.ts +77 -0
- package/src/engine/renderers/subVolume.ts +3 -3
- package/src/engine/renderers/timeAxis.ts +16 -13
- package/src/engine/renderers/timeShare.ts +271 -0
- package/src/engine/renderers/yAxis.ts +9 -1
- package/src/engine/scale/price.ts +2 -2
- package/src/engine/theme/fonts.ts +1 -1
- package/src/engine/utils/klineConfig.ts +1 -5
- package/src/engine/viewport/chartViewportManager.ts +6 -5
- package/src/index.ts +1 -0
- package/src/mcp/chartBridge.ts +2 -1
- package/src/plugin/types.ts +1 -0
- package/src/semantic/types.ts +1 -1
- package/src/tokens/__tests__/__snapshots__/baseline.test.ts.snap +15 -1
- package/src/tokens/theme-base.ts +36 -0
- package/src/tokens/theme-china.ts +4 -0
- package/src/tokens/theme-dark.ts +13 -33
- package/src/tokens/theme-light.ts +13 -33
- package/src/tokens/types.ts +9 -0
- package/src/types/price.ts +13 -0
- package/src/utils/dateFormat.ts +27 -4
- package/src/utils/kLineDraw/axis.ts +40 -107
- package/src/utils/uuid.ts +8 -0
- package/src/utils/volumePrice.ts +2 -2
- package/src/version.ts +1 -1
|
@@ -16,6 +16,7 @@ import { InteractionController } from '../controller/interaction'
|
|
|
16
16
|
import { UpdateLevel } from '../layout/pane'
|
|
17
17
|
import type { VisibleRange } from '../layout/pane'
|
|
18
18
|
import { DrawingStore } from '../drawing'
|
|
19
|
+
import type { ChartModeHandler } from '../modes/types'
|
|
19
20
|
import { createMainIndicatorLegendRendererPlugin } from '../renderers/Indicator/mainIndicatorLegend'
|
|
20
21
|
import { createDrawingRendererPlugin, createDrawingLabelOverlayPlugin } from '../drawing/plugin'
|
|
21
22
|
import { createGridLinesRendererPlugin } from '../renderers/gridLines'
|
|
@@ -25,6 +26,7 @@ import { createLastPriceLineRendererPlugin, createLastPriceLabelRegistrarPlugin
|
|
|
25
26
|
import { createCustomMarkersRenderer } from '../renderers/customMarkers'
|
|
26
27
|
import { createExtremaMarkersRendererPlugin } from '../renderers/extremaMarkers'
|
|
27
28
|
import { createYAxisRendererPlugin } from '../renderers/yAxis'
|
|
29
|
+
import { createLeftYAxisRendererPlugin } from '../renderers/leftYAxis'
|
|
28
30
|
import { createCrosshairRendererPlugin } from '../renderers/crosshair'
|
|
29
31
|
import { createTimeAxisRendererPlugin } from '../renderers/timeAxis'
|
|
30
32
|
|
|
@@ -33,7 +35,7 @@ type ResolvedChartOptions = Omit<ChartOptions, 'kWidth' | 'kGap'> & {
|
|
|
33
35
|
kGap: number
|
|
34
36
|
}
|
|
35
37
|
|
|
36
|
-
|
|
38
|
+
type FrameContext = {
|
|
37
39
|
vp: Viewport
|
|
38
40
|
range: VisibleRange
|
|
39
41
|
kLinePositions: KLinePositions
|
|
@@ -62,6 +64,7 @@ export interface RendererDependencies {
|
|
|
62
64
|
getViewportManager: () => ChartViewportManager
|
|
63
65
|
getDataManager: () => ChartDataManager
|
|
64
66
|
getIndicatorManager: () => ChartIndicatorManager
|
|
67
|
+
getActiveMode: () => ChartModeHandler
|
|
65
68
|
}
|
|
66
69
|
|
|
67
70
|
export class ChartRenderer {
|
|
@@ -127,6 +130,19 @@ export class ChartRenderer {
|
|
|
127
130
|
price: interaction.crosshairPrice,
|
|
128
131
|
}),
|
|
129
132
|
}))
|
|
133
|
+
this.useDrawingPlugin(createLeftYAxisRendererPlugin({
|
|
134
|
+
axisWidth: opt.leftAxisWidth,
|
|
135
|
+
yPaddingPx: opt.yPaddingPx,
|
|
136
|
+
getCrosshair: () => {
|
|
137
|
+
const pos = interaction.crosshairPos
|
|
138
|
+
const price = interaction.crosshairPrice
|
|
139
|
+
const activePaneId = interaction.activePaneId
|
|
140
|
+
if (pos && price !== null) {
|
|
141
|
+
return { y: pos.y, price, activePaneId }
|
|
142
|
+
}
|
|
143
|
+
return null
|
|
144
|
+
},
|
|
145
|
+
}))
|
|
130
146
|
this.useDrawingPlugin(createTimeAxisRendererPlugin({
|
|
131
147
|
height: opt.bottomAxisHeight,
|
|
132
148
|
getCrosshair: () => {
|
|
@@ -203,19 +219,24 @@ export class ChartRenderer {
|
|
|
203
219
|
|
|
204
220
|
const frame = this.prepareFrameData(level)
|
|
205
221
|
if (!frame) {
|
|
206
|
-
|
|
222
|
+
const dataManager = this.deps.getDataManager()
|
|
223
|
+
if (dataManager.getInternalData().length === 0 && dataManager.getTimeShareData().length === 0) this.clearAllCanvases()
|
|
207
224
|
return
|
|
208
225
|
}
|
|
209
226
|
|
|
210
227
|
const { vp, range, kLinePositions, kLineCenters, kBarRects, kWidthPx, useCachedFrame } = frame
|
|
211
228
|
|
|
212
|
-
this.deps.getInteraction().setKLinePositions(kLinePositions, range, kWidthPx)
|
|
229
|
+
this.deps.getInteraction().setKLinePositions(kLinePositions, range, kWidthPx, kLineCenters)
|
|
213
230
|
|
|
214
|
-
const
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
231
|
+
const dataManager = this.deps.getDataManager()
|
|
232
|
+
const mode = this.deps.getActiveMode()
|
|
233
|
+
if (mode.useIndicatorScheduler) {
|
|
234
|
+
const indicatorManager = this.deps.getIndicatorManager()
|
|
235
|
+
indicatorManager.indicatorSchedulerAccessor.setActiveMainIndicators(
|
|
236
|
+
[...indicatorManager.mainIndicatorsSignalPeek.entries()].map(([id, entry]) => ({ id, params: entry.params })),
|
|
237
|
+
)
|
|
238
|
+
}
|
|
239
|
+
const mainIndicatorRange = useCachedFrame ? null : this.deps.getIndicatorManager().indicatorSchedulerAccessor.getMainIndicatorPriceRange()
|
|
219
240
|
const hasCrosshair = this.deps.getInteraction().getCrosshairIndex() !== null
|
|
220
241
|
|
|
221
242
|
const { sharedXAxisLabels, sharedXAxisRanges } = this.renderPanes(
|
|
@@ -233,7 +254,7 @@ export class ChartRenderer {
|
|
|
233
254
|
const vp = useCachedFrame ? this.cachedDrawFrame!.viewport : this.deps.getViewportManager().computeViewport()
|
|
234
255
|
if (!vp) return null
|
|
235
256
|
|
|
236
|
-
const internalData = this.deps.getDataManager().
|
|
257
|
+
const internalData = this.deps.getDataManager().getRenderData() as KLineData[]
|
|
237
258
|
if (internalData.length === 0) return null
|
|
238
259
|
|
|
239
260
|
const opt = this.deps.getOption()
|
|
@@ -253,13 +274,16 @@ export class ChartRenderer {
|
|
|
253
274
|
const range = { start: Math.max(0, rawRange.start), end: rawRange.end }
|
|
254
275
|
|
|
255
276
|
const dataManager = this.deps.getDataManager()
|
|
277
|
+
const mode = this.deps.getActiveMode()
|
|
256
278
|
if (!useCachedFrame && (
|
|
257
279
|
range.start !== dataManager.lastVisibleRange.start
|
|
258
280
|
|| range.end !== dataManager.lastVisibleRange.end
|
|
259
281
|
|| rawRange.start !== dataManager.lastRawVisibleRange.start
|
|
260
282
|
|| rawRange.end !== dataManager.lastRawVisibleRange.end
|
|
261
283
|
)) {
|
|
262
|
-
|
|
284
|
+
if (mode.useIndicatorScheduler) {
|
|
285
|
+
this.deps.getIndicatorManager().indicatorSchedulerAccessor.updateVisibleRange(range)
|
|
286
|
+
}
|
|
263
287
|
dataManager.lastVisibleRange = range
|
|
264
288
|
dataManager.lastRawVisibleRange = rawRange
|
|
265
289
|
this.checkVisibleRangeGapWhenIdle()
|
|
@@ -295,7 +319,34 @@ export class ChartRenderer {
|
|
|
295
319
|
kBarRects[i] = { x: barLeftPx / vp.dpr, width: barWidthPx / vp.dpr }
|
|
296
320
|
}
|
|
297
321
|
|
|
298
|
-
|
|
322
|
+
if (mode.debugName === 'TimeShare') {
|
|
323
|
+
const totalWidth = vp.plotWidth
|
|
324
|
+
const count = kLineCenters.length
|
|
325
|
+
if (count > 0) {
|
|
326
|
+
const dpr = vp.dpr
|
|
327
|
+
const step = totalWidth / count
|
|
328
|
+
for (let i = 0; i < count; i++) {
|
|
329
|
+
kLineCenters[i] = Math.round((i + 0.5) * step * dpr) / dpr
|
|
330
|
+
kLinePositions[i] = Math.round(i * step * dpr) / dpr
|
|
331
|
+
}
|
|
332
|
+
kWidthPx = Math.round(totalWidth * dpr / count)
|
|
333
|
+
|
|
334
|
+
const logicalBarWidth = Math.max(1, step * 0.6)
|
|
335
|
+
const barWidthPx = Math.round(logicalBarWidth * dpr)
|
|
336
|
+
const halfBarPx = Math.floor(barWidthPx / 2)
|
|
337
|
+
for (let i = 0; i < count; i++) {
|
|
338
|
+
const centerPx = Math.round(kLineCenters[i] * dpr)
|
|
339
|
+
kBarRects[i] = {
|
|
340
|
+
x: (centerPx - halfBarPx) / dpr,
|
|
341
|
+
width: barWidthPx / dpr,
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
} else {
|
|
345
|
+
kWidthPx = getPhysicalKLineConfig(opt.kWidth, opt.kGap, vp.dpr).kWidthPx
|
|
346
|
+
}
|
|
347
|
+
} else {
|
|
348
|
+
kWidthPx = getPhysicalKLineConfig(opt.kWidth, opt.kGap, vp.dpr).kWidthPx
|
|
349
|
+
}
|
|
299
350
|
this.cachedDrawFrame = {
|
|
300
351
|
viewport: { ...vp },
|
|
301
352
|
range: { ...range },
|
|
@@ -316,15 +367,28 @@ export class ChartRenderer {
|
|
|
316
367
|
}
|
|
317
368
|
}
|
|
318
369
|
|
|
370
|
+
private clearAxisCtx(ctx: CanvasRenderingContext2D, dpr: number, width: number, height: number): void {
|
|
371
|
+
ctx.setTransform(1, 0, 0, 1, 0, 0)
|
|
372
|
+
ctx.scale(dpr, dpr)
|
|
373
|
+
ctx.clearRect(0, 0, width, height + 2 / dpr)
|
|
374
|
+
}
|
|
375
|
+
|
|
319
376
|
clearAllCanvases(): void {
|
|
320
377
|
const vp = this.deps.getViewportManager().computeViewport()
|
|
321
378
|
if (!vp) return
|
|
322
379
|
for (const r of this.deps.getPaneRenderers()) {
|
|
323
|
-
const { mainCtx, overlayCtx, yAxisCtx } = r.getContexts()
|
|
380
|
+
const { mainCtx, overlayCtx, yAxisCtx, leftAxisCtx } = r.getContexts()
|
|
324
381
|
const pane = r.getPane()
|
|
325
382
|
mainCtx?.clearRect(0, 0, vp.plotWidth + 1, pane.height + 2 / vp.dpr)
|
|
326
383
|
overlayCtx?.clearRect(0, 0, vp.plotWidth + 1, pane.height + 2 / vp.dpr)
|
|
327
384
|
yAxisCtx?.clearRect(0, 0, vp.plotWidth + 1, pane.height + 2 / vp.dpr)
|
|
385
|
+
if (leftAxisCtx) {
|
|
386
|
+
const leftCanvas = leftAxisCtx.canvas
|
|
387
|
+
if (leftCanvas) {
|
|
388
|
+
const laW = leftCanvas.width / vp.dpr
|
|
389
|
+
leftAxisCtx.clearRect(0, 0, laW, pane.height + 2 / vp.dpr)
|
|
390
|
+
}
|
|
391
|
+
}
|
|
328
392
|
}
|
|
329
393
|
const xCtx = this.xAxisCtx
|
|
330
394
|
if (xCtx) {
|
|
@@ -354,17 +418,18 @@ export class ChartRenderer {
|
|
|
354
418
|
const dataManager = this.deps.getDataManager()
|
|
355
419
|
const rendererPluginManager = this.deps.getRendererPluginManager()
|
|
356
420
|
const pluginHost = this.deps.getPluginHost()
|
|
421
|
+
const mode = this.deps.getActiveMode()
|
|
357
422
|
|
|
358
423
|
for (const renderer of this.deps.getPaneRenderers()) {
|
|
359
424
|
const pane = renderer.getPane()
|
|
360
|
-
const { mainCtx, overlayCtx, yAxisCtx } = renderer.getContexts()
|
|
425
|
+
const { mainCtx, overlayCtx, yAxisCtx, leftAxisCtx } = renderer.getContexts()
|
|
361
426
|
const { candleSurface, lineSurface } = renderer.getWebGL()
|
|
362
427
|
|
|
363
428
|
if (!useCachedFrame) {
|
|
364
|
-
const indicatorRange = pane.role === 'price' ? mainIndicatorRange : null
|
|
429
|
+
const indicatorRange = pane.role === 'price' && mode.useIndicatorScheduler ? mainIndicatorRange : null
|
|
365
430
|
const comparisonRange = pane.id === 'main' ? dataManager.getComparisonEquivalentPriceRange(range) : null
|
|
366
431
|
const mergedRange = this.mergeNumericRanges(indicatorRange, comparisonRange)
|
|
367
|
-
|
|
432
|
+
mode.updatePaneRange(pane as any, range, dataManager, mergedRange)
|
|
368
433
|
if (pane.id === 'main' && this.settings.disableMainPaneVerticalScroll) {
|
|
369
434
|
pane.yAxis.resetTransform()
|
|
370
435
|
}
|
|
@@ -390,9 +455,11 @@ export class ChartRenderer {
|
|
|
390
455
|
|
|
391
456
|
if (yAxisCtx && !useCachedFrame) {
|
|
392
457
|
const yAxisWidth = yAxisCtx.canvas.width / vp.dpr
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
458
|
+
this.clearAxisCtx(yAxisCtx, vp.dpr, yAxisWidth, pane.height)
|
|
459
|
+
}
|
|
460
|
+
if (leftAxisCtx && !useCachedFrame) {
|
|
461
|
+
const leftAxisWidth = leftAxisCtx.canvas.width / vp.dpr
|
|
462
|
+
this.clearAxisCtx(leftAxisCtx, vp.dpr, leftAxisWidth, pane.height)
|
|
396
463
|
}
|
|
397
464
|
|
|
398
465
|
const opt = this.deps.getOption()
|
|
@@ -400,7 +467,7 @@ export class ChartRenderer {
|
|
|
400
467
|
ctx: mainCtx!,
|
|
401
468
|
overlayCtx: overlayCtx ?? undefined,
|
|
402
469
|
pane: wrapPaneInfo(pane),
|
|
403
|
-
data: dataManager.
|
|
470
|
+
data: dataManager.getRenderData(),
|
|
404
471
|
period: dataManager.currentPeriod,
|
|
405
472
|
comparisonData: dataManager.getComparisonData(),
|
|
406
473
|
comparisonSymbols: dataManager.getComparisonSpecs(),
|
|
@@ -417,6 +484,7 @@ export class ChartRenderer {
|
|
|
417
484
|
markerManager: this.markerManager,
|
|
418
485
|
crosshairIndex: this.deps.getInteraction().getCrosshairIndex(),
|
|
419
486
|
yAxisCtx: yAxisCtx ?? undefined,
|
|
487
|
+
leftAxisCtx: leftAxisCtx ?? undefined,
|
|
420
488
|
candleWebGLSurface: candleSurface ?? undefined,
|
|
421
489
|
lineWebGLSurface: lineSurface ?? undefined,
|
|
422
490
|
zoomLevel: this.deps.getCurrentZoomLevel(),
|
|
@@ -446,6 +514,11 @@ export class ChartRenderer {
|
|
|
446
514
|
if (yAxisErrors.length > 0) {
|
|
447
515
|
pluginHost.events.emit('renderer:error', { paneId: pane.id, errors: yAxisErrors })
|
|
448
516
|
}
|
|
517
|
+
|
|
518
|
+
const leftAxisErrors = rendererPluginManager.renderPlugin('leftYAxis', context)
|
|
519
|
+
if (leftAxisErrors.length > 0) {
|
|
520
|
+
pluginHost.events.emit('renderer:error', { paneId: pane.id, errors: leftAxisErrors })
|
|
521
|
+
}
|
|
449
522
|
}
|
|
450
523
|
}
|
|
451
524
|
|
|
@@ -498,7 +571,7 @@ export class ChartRenderer {
|
|
|
498
571
|
priceRange: { maxPrice: 0, minPrice: 0 },
|
|
499
572
|
},
|
|
500
573
|
period: this.deps.getDataManager().currentPeriod,
|
|
501
|
-
data: this.deps.getDataManager().
|
|
574
|
+
data: this.deps.getDataManager().getRenderData(),
|
|
502
575
|
range,
|
|
503
576
|
scrollLeft: vp.scrollLeft,
|
|
504
577
|
kWidth: opt.kWidth,
|
|
@@ -10,13 +10,13 @@ import { resolveStateKey } from '../../indicators/indicatorMetadata'
|
|
|
10
10
|
import type { IndicatorScheduler, ATRSchedulerConfig } from '../../indicators/scheduler'
|
|
11
11
|
import { createAtrScaleRendererPlugin } from './scale/atr_scale'
|
|
12
12
|
import { calcATRData } from '../../indicators/calculators'
|
|
13
|
-
import
|
|
13
|
+
import { createSingleLineTitleInfo } from './shared/titleInfo'
|
|
14
14
|
|
|
15
15
|
type LinePoint = { x: number; y: number }
|
|
16
16
|
|
|
17
17
|
const ATR_COLOR = '#d97706'
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
interface ATRRendererOptions {
|
|
20
20
|
paneId?: string
|
|
21
21
|
}
|
|
22
22
|
|
|
@@ -34,7 +34,7 @@ function getATRStateKey(host: PluginHost | null, paneId: string): string | null
|
|
|
34
34
|
return resolveStateKey(meta.stateKey, paneId)
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
function createATRRendererPlugin(options: ATRRendererOptions = {}): RendererPluginWithHost {
|
|
38
38
|
const { paneId = 'sub_ATR' } = options
|
|
39
39
|
let pluginHost: PluginHost | null = null
|
|
40
40
|
|
|
@@ -206,32 +206,7 @@ function drawWithCanvas2D(
|
|
|
206
206
|
ctx.restore()
|
|
207
207
|
}
|
|
208
208
|
|
|
209
|
-
|
|
210
|
-
* 获取 ATR 标题信息(供 paneTitle 使用)
|
|
211
|
-
*/
|
|
212
|
-
export function getATRTitleInfo(
|
|
213
|
-
_data: KLineData[],
|
|
214
|
-
index: number | null,
|
|
215
|
-
params: Record<string, number | boolean | string>,
|
|
216
|
-
pluginHost: PluginHost,
|
|
217
|
-
paneId: string,
|
|
218
|
-
): { name: string; params: number[]; values: Array<{ label: string; value: number; color: string }> } | null {
|
|
219
|
-
if (index === null) return null
|
|
220
|
-
const period = (params.period as number) ?? 14
|
|
221
|
-
const state = pluginHost.getSharedState<ATRRenderState>(createATRStateKey(paneId))
|
|
222
|
-
if (!state) return null
|
|
223
|
-
|
|
224
|
-
const atr = state.series[index]
|
|
225
|
-
if (atr === undefined) return null
|
|
226
|
-
|
|
227
|
-
return {
|
|
228
|
-
name: 'ATR',
|
|
229
|
-
params: [period],
|
|
230
|
-
values: [
|
|
231
|
-
{ label: 'ATR', value: atr, color: ATR_COLOR },
|
|
232
|
-
],
|
|
233
|
-
}
|
|
234
|
-
}
|
|
209
|
+
const getATRTitleInfo = createSingleLineTitleInfo({ createStateKey: createATRStateKey, name: 'ATR', defaultPeriod: 14, color: ATR_COLOR })
|
|
235
210
|
|
|
236
211
|
@Indicator({
|
|
237
212
|
name: 'atr',
|
|
@@ -9,6 +9,7 @@ import { resolveStateKey } from '../../indicators/indicatorMetadata'
|
|
|
9
9
|
import type { IndicatorPriceRangeComputer, IndicatorRenderStateComposer, GetTitleInfoFn, TitleInfo, TitleValueItem } from '../../indicators/indicatorMetadata'
|
|
10
10
|
import type { BOLLSchedulerConfig, IndicatorScheduler } from '../../indicators/scheduler'
|
|
11
11
|
import { calcBOLLData } from '../../indicators/calculators'
|
|
12
|
+
import { getRgbaAlpha, toOpaqueRgba, compositeLineSurface } from './shared/webglBand'
|
|
12
13
|
|
|
13
14
|
type LinePoint = { x: number; y: number }
|
|
14
15
|
|
|
@@ -20,28 +21,6 @@ interface PriceData {
|
|
|
20
21
|
lower: number
|
|
21
22
|
}
|
|
22
23
|
|
|
23
|
-
function getRgbaAlpha(color: string): number {
|
|
24
|
-
const match = color.match(/^rgba\([^,]+,[^,]+,[^,]+,\s*([\d.]+)\)$/i)
|
|
25
|
-
if (!match) return 1
|
|
26
|
-
const alpha = Number(match[1])
|
|
27
|
-
return Number.isFinite(alpha) ? alpha : 1
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
function toOpaqueRgba(color: string): string {
|
|
31
|
-
return color.replace(/,\s*[\d.]+\s*\)$/i, ', 1)')
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
function compositeLineSurface(
|
|
35
|
-
context: RenderContext,
|
|
36
|
-
surface: NonNullable<RenderContext['lineWebGLSurface']>,
|
|
37
|
-
alpha = 1
|
|
38
|
-
): void {
|
|
39
|
-
surface.compositeTo(context.ctx, {
|
|
40
|
-
alpha,
|
|
41
|
-
imageSmoothingEnabled: false,
|
|
42
|
-
})
|
|
43
|
-
}
|
|
44
|
-
|
|
45
24
|
function drawBOLLWithWebGL(
|
|
46
25
|
context: RenderContext,
|
|
47
26
|
data: {
|
|
@@ -110,7 +89,7 @@ function buildPriceCacheKey(
|
|
|
110
89
|
return `${range.start}|${range.end}|${dataLength}|${lastTimestamp}|${period}`
|
|
111
90
|
}
|
|
112
91
|
|
|
113
|
-
|
|
92
|
+
function getBOLLStateKey(host: PluginHost | null): string | null {
|
|
114
93
|
const scheduler = host?.getService<IndicatorScheduler>('indicatorScheduler')
|
|
115
94
|
if (!scheduler) {
|
|
116
95
|
console.warn('[BOLLRenderer] Scheduler not available via service locator')
|
|
@@ -155,7 +134,7 @@ const composeBOLLRenderState: IndicatorRenderStateComposer = (bundle, range, tim
|
|
|
155
134
|
}
|
|
156
135
|
}
|
|
157
136
|
|
|
158
|
-
|
|
137
|
+
const getBOLLTitleInfo: GetTitleInfoFn = (
|
|
159
138
|
_data: KLineData[],
|
|
160
139
|
index: number | null,
|
|
161
140
|
_params: Record<string, number | boolean | string>,
|
|
@@ -9,11 +9,11 @@ import { resolveStateKey } from '../../indicators/indicatorMetadata'
|
|
|
9
9
|
import type { IndicatorScheduler, CCISchedulerConfig } from '../../indicators/scheduler'
|
|
10
10
|
import { createCciScaleRendererPlugin } from './scale/cci_scale'
|
|
11
11
|
import { calcCCIData } from '../../indicators/calculators'
|
|
12
|
-
import
|
|
12
|
+
import { createSingleLineTitleInfo } from './shared/titleInfo'
|
|
13
13
|
|
|
14
14
|
type LinePoint = { x: number; y: number }
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
interface CCIRendererOptions {
|
|
17
17
|
/** 目标 pane ID(默认 'sub') */
|
|
18
18
|
paneId?: string
|
|
19
19
|
}
|
|
@@ -35,7 +35,7 @@ function getCCIStateKey(host: PluginHost | null, paneId: string): string | null
|
|
|
35
35
|
/**
|
|
36
36
|
* 创建 CCI 渲染器插件
|
|
37
37
|
*/
|
|
38
|
-
|
|
38
|
+
function createCCIRendererPlugin(options: CCIRendererOptions = {}): RendererPluginWithHost {
|
|
39
39
|
const { paneId = 'sub' } = options
|
|
40
40
|
let pluginHost: PluginHost | null = null
|
|
41
41
|
|
|
@@ -240,30 +240,12 @@ function drawCCILineWithCanvas2D(
|
|
|
240
240
|
/**
|
|
241
241
|
* 获取 CCI 标题信息(供 paneTitle 使用)
|
|
242
242
|
*/
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
): { name: string; params: number[]; values: Array<{ label: string; value: number; color: string }> } | null {
|
|
250
|
-
if (index === null) return null
|
|
251
|
-
const period = (params.period as number) ?? 14
|
|
252
|
-
const colors = resolveThemeColors('light')
|
|
253
|
-
const state = pluginHost.getSharedState<CCIRenderState>(createCCIStateKey(paneId))
|
|
254
|
-
if (!state) return null
|
|
255
|
-
|
|
256
|
-
const cci = state.series[index]
|
|
257
|
-
if (cci === undefined) return null
|
|
258
|
-
|
|
259
|
-
return {
|
|
260
|
-
name: 'CCI',
|
|
261
|
-
params: [period],
|
|
262
|
-
values: [
|
|
263
|
-
{ label: 'CCI', value: cci, color: colors.cci.cci },
|
|
264
|
-
],
|
|
265
|
-
}
|
|
266
|
-
}
|
|
243
|
+
const getCCITitleInfo = createSingleLineTitleInfo({
|
|
244
|
+
createStateKey: createCCIStateKey,
|
|
245
|
+
name: 'CCI',
|
|
246
|
+
defaultPeriod: 14,
|
|
247
|
+
getColor: (colors) => colors.cci.cci,
|
|
248
|
+
})
|
|
267
249
|
|
|
268
250
|
@Indicator({
|
|
269
251
|
name: 'cci',
|
|
@@ -2,8 +2,7 @@ import type { RendererPluginWithHost, RenderContext, PluginHost } from '../../..
|
|
|
2
2
|
import { RENDERER_PRIORITY } from '../../../plugin'
|
|
3
3
|
import type { ChaikinVolRenderState } from '../../indicators/chaikinVolState'
|
|
4
4
|
import { createChaikinVolStateKey, EMPTY_CHAIKIN_VOL_STATE } from '../../indicators/chaikinVolState'
|
|
5
|
-
import
|
|
6
|
-
import type { KLineData } from '../../../types/price'
|
|
5
|
+
import { createSingleLineTitleInfo } from './shared/titleInfo'
|
|
7
6
|
import { Indicator } from '../../indicators/indicatorDefinitionRegistry'
|
|
8
7
|
import { resolveStateKey } from '../../indicators/indicatorMetadata'
|
|
9
8
|
import { createSparseVisibleStateComposer } from '../../indicators/visibleStateComposers'
|
|
@@ -28,7 +27,7 @@ function getChaikinVolStateKey(host: PluginHost | null, paneId: string): string
|
|
|
28
27
|
return resolveStateKey(meta.stateKey, paneId)
|
|
29
28
|
}
|
|
30
29
|
|
|
31
|
-
|
|
30
|
+
function createChaikinVolRendererPlugin(options: { paneId?: string } = {}): RendererPluginWithHost {
|
|
32
31
|
const { paneId = 'sub_ChaikinVol' } = options
|
|
33
32
|
let pluginHost: PluginHost | null = null
|
|
34
33
|
|
|
@@ -126,26 +125,7 @@ export function createChaikinVolRendererPlugin(options: { paneId?: string } = {}
|
|
|
126
125
|
}
|
|
127
126
|
}
|
|
128
127
|
|
|
129
|
-
|
|
130
|
-
_data: KLineData[],
|
|
131
|
-
index: number | null,
|
|
132
|
-
params: Record<string, number | boolean | string>,
|
|
133
|
-
host: PluginHost,
|
|
134
|
-
paneId: string,
|
|
135
|
-
): TitleInfo | null {
|
|
136
|
-
if (index === null) return null
|
|
137
|
-
const emaPeriod = (params.emaPeriod as number) ?? 10
|
|
138
|
-
const rocPeriod = (params.rocPeriod as number) ?? 10
|
|
139
|
-
const state = host.getSharedState<ChaikinVolRenderState>(createChaikinVolStateKey(paneId))
|
|
140
|
-
const value = state?.series[index]
|
|
141
|
-
if (value === undefined) return null
|
|
142
|
-
|
|
143
|
-
return {
|
|
144
|
-
name: 'ChaikinVol',
|
|
145
|
-
params: [emaPeriod, rocPeriod],
|
|
146
|
-
values: [{ label: 'ChaikinVol', value, color: CHAIKIN_VOL_COLOR }],
|
|
147
|
-
}
|
|
148
|
-
}
|
|
128
|
+
const getChaikinVolTitleInfo = createSingleLineTitleInfo({ createStateKey: createChaikinVolStateKey, name: 'ChaikinVol', getParams: (p) => [(p.emaPeriod as number) ?? 10, (p.rocPeriod as number) ?? 10], color: CHAIKIN_VOL_COLOR })
|
|
149
129
|
|
|
150
130
|
@Indicator({
|
|
151
131
|
name: 'chaikinVol',
|
|
@@ -2,8 +2,7 @@ import type { RendererPluginWithHost, RenderContext, PluginHost } from '../../..
|
|
|
2
2
|
import { RENDERER_PRIORITY } from '../../../plugin'
|
|
3
3
|
import type { CMFRenderState } from '../../indicators/cmfState'
|
|
4
4
|
import { createCMFStateKey, EMPTY_CMF_STATE } from '../../indicators/cmfState'
|
|
5
|
-
import
|
|
6
|
-
import type { KLineData } from '../../../types/price'
|
|
5
|
+
import { createSingleLineTitleInfo } from './shared/titleInfo'
|
|
7
6
|
import { Indicator } from '../../indicators/indicatorDefinitionRegistry'
|
|
8
7
|
import { createFixedRangeSparseVisibleStateComposer } from '../../indicators/visibleStateComposers'
|
|
9
8
|
import { resolveStateKey } from '../../indicators/indicatorMetadata'
|
|
@@ -28,7 +27,7 @@ function getCMFStateKey(host: PluginHost | null, paneId: string): string | null
|
|
|
28
27
|
return resolveStateKey(meta.stateKey, paneId)
|
|
29
28
|
}
|
|
30
29
|
|
|
31
|
-
|
|
30
|
+
function createCMFRendererPlugin(options: { paneId?: string } = {}): RendererPluginWithHost {
|
|
32
31
|
const { paneId = 'sub_CMF' } = options
|
|
33
32
|
let pluginHost: PluginHost | null = null
|
|
34
33
|
|
|
@@ -125,25 +124,7 @@ export function createCMFRendererPlugin(options: { paneId?: string } = {}): Rend
|
|
|
125
124
|
}
|
|
126
125
|
}
|
|
127
126
|
|
|
128
|
-
|
|
129
|
-
_data: KLineData[],
|
|
130
|
-
index: number | null,
|
|
131
|
-
params: Record<string, number | boolean | string>,
|
|
132
|
-
host: PluginHost,
|
|
133
|
-
paneId: string,
|
|
134
|
-
): TitleInfo | null {
|
|
135
|
-
if (index === null) return null
|
|
136
|
-
const period = (params.period as number) ?? 20
|
|
137
|
-
const state = host.getSharedState<CMFRenderState>(createCMFStateKey(paneId))
|
|
138
|
-
const value = state?.series[index]
|
|
139
|
-
if (value === undefined) return null
|
|
140
|
-
|
|
141
|
-
return {
|
|
142
|
-
name: 'CMF',
|
|
143
|
-
params: [period],
|
|
144
|
-
values: [{ label: 'CMF', value, color: CMF_COLOR }],
|
|
145
|
-
}
|
|
146
|
-
}
|
|
127
|
+
const getCMFTitleInfo = createSingleLineTitleInfo({ createStateKey: createCMFStateKey, name: 'CMF', defaultPeriod: 20, color: CMF_COLOR })
|
|
147
128
|
|
|
148
129
|
@Indicator({
|
|
149
130
|
name: 'cmf',
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { RendererPluginWithHost, RenderContext, PluginHost } from '../../../plugin'
|
|
2
|
-
import
|
|
2
|
+
import { createSingleLineTitleInfo } from './shared/titleInfo'
|
|
3
3
|
import { RENDERER_PRIORITY } from '../../../plugin'
|
|
4
4
|
import type { DEMARenderState } from '../../indicators/demaState'
|
|
5
5
|
import { createDEMAStateKey, EMPTY_DEMA_STATE } from '../../indicators/demaState'
|
|
6
6
|
import { Indicator } from '../../indicators/indicatorDefinitionRegistry'
|
|
7
|
-
import { resolveStateKey
|
|
7
|
+
import { resolveStateKey } from '../../indicators/indicatorMetadata'
|
|
8
8
|
import { createSparseVisibleStateComposer } from '../../indicators/visibleStateComposers'
|
|
9
9
|
import type { IndicatorScheduler, DEMASchedulerConfig } from '../../indicators/scheduler'
|
|
10
10
|
import { calcDEMAData } from '../../indicators/calculators'
|
|
@@ -13,7 +13,7 @@ const DEMA_COLOR = '#6366f1'
|
|
|
13
13
|
|
|
14
14
|
type Point = { x: number; y: number }
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
interface DEMARendererOptions {
|
|
17
17
|
paneId?: string
|
|
18
18
|
}
|
|
19
19
|
|
|
@@ -31,7 +31,7 @@ function getDEMAStateKey(host: PluginHost | null, paneId: string): string | null
|
|
|
31
31
|
return resolveStateKey(meta.stateKey, paneId)
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
function createDEMARendererPlugin(options: DEMARendererOptions = {}): RendererPluginWithHost {
|
|
35
35
|
const { paneId = 'main' } = options
|
|
36
36
|
let pluginHost: PluginHost | null = null
|
|
37
37
|
|
|
@@ -122,28 +122,7 @@ export function createDEMARendererPlugin(options: DEMARendererOptions = {}): Ren
|
|
|
122
122
|
}
|
|
123
123
|
}
|
|
124
124
|
|
|
125
|
-
|
|
126
|
-
_data: KLineData[],
|
|
127
|
-
index: number | null,
|
|
128
|
-
_params: Record<string, number | boolean | string>,
|
|
129
|
-
pluginHost: PluginHost,
|
|
130
|
-
paneId: string,
|
|
131
|
-
): TitleInfo | null => {
|
|
132
|
-
if (index === null) return null
|
|
133
|
-
|
|
134
|
-
const stateKey = createDEMAStateKey(paneId)
|
|
135
|
-
const state = pluginHost?.getSharedState<DEMARenderState>(stateKey)
|
|
136
|
-
if (!state || state.visibleMin > state.visibleMax) return null
|
|
137
|
-
|
|
138
|
-
const value = state.series[index]
|
|
139
|
-
if (value === undefined) return null
|
|
140
|
-
|
|
141
|
-
return {
|
|
142
|
-
name: 'DEMA',
|
|
143
|
-
params: [state.params.period],
|
|
144
|
-
values: [{ label: 'DEMA', value, color: '#6366f1' }],
|
|
145
|
-
}
|
|
146
|
-
}
|
|
125
|
+
const getDEMATitleInfo = createSingleLineTitleInfo({ createStateKey: createDEMAStateKey, name: 'DEMA', getParams: (p) => [p.period as number], color: DEMA_COLOR })
|
|
147
126
|
|
|
148
127
|
@Indicator({
|
|
149
128
|
name: 'dema',
|
|
@@ -15,7 +15,7 @@ const DONCHIAN_LOWER_COLOR = '#0891b2'
|
|
|
15
15
|
|
|
16
16
|
type Point = { x: number; y: number }
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
interface DonchianRendererOptions { paneId?: string }
|
|
19
19
|
|
|
20
20
|
function getDonchianStateKey(host: PluginHost | null, paneId: string): string | null {
|
|
21
21
|
const scheduler = host?.getService<IndicatorScheduler>('indicatorScheduler')
|
|
@@ -31,7 +31,7 @@ function getDonchianStateKey(host: PluginHost | null, paneId: string): string |
|
|
|
31
31
|
return resolveStateKey(meta.stateKey, paneId)
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
function createDonchianRendererPlugin(options: DonchianRendererOptions = {}): RendererPluginWithHost {
|
|
35
35
|
const { paneId = 'main' } = options
|
|
36
36
|
let pluginHost: PluginHost | null = null
|
|
37
37
|
|
|
@@ -124,7 +124,7 @@ function drawLine(ctx: CanvasRenderingContext2D, pts: Point[], color: string): v
|
|
|
124
124
|
ctx.stroke()
|
|
125
125
|
}
|
|
126
126
|
|
|
127
|
-
|
|
127
|
+
function getDonchianTitleInfo(
|
|
128
128
|
_data: KLineData[],
|
|
129
129
|
index: number | null,
|
|
130
130
|
params: Record<string, number | boolean | string>,
|
|
@@ -9,31 +9,10 @@ import { resolveStateKey } from '../../indicators/indicatorMetadata'
|
|
|
9
9
|
import type { IndicatorPriceRangeComputer, IndicatorRenderStateComposer, GetTitleInfoFn, TitleInfo, TitleValueItem } from '../../indicators/indicatorMetadata'
|
|
10
10
|
import type { ENESchedulerConfig, IndicatorScheduler } from '../../indicators/scheduler'
|
|
11
11
|
import { calcENEData } from '../../indicators/calculators'
|
|
12
|
+
import { getRgbaAlpha, toOpaqueRgba, compositeLineSurface } from './shared/webglBand'
|
|
12
13
|
|
|
13
14
|
type LinePoint = { x: number; y: number }
|
|
14
15
|
|
|
15
|
-
function getRgbaAlpha(color: string): number {
|
|
16
|
-
const match = color.match(/^rgba\([^,]+,[^,]+,[^,]+,\s*([\d.]+)\)$/i)
|
|
17
|
-
if (!match) return 1
|
|
18
|
-
const alpha = Number(match[1])
|
|
19
|
-
return Number.isFinite(alpha) ? alpha : 1
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
function toOpaqueRgba(color: string): string {
|
|
23
|
-
return color.replace(/,\s*[\d.]+\s*\)$/i, ', 1)')
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
function compositeLineSurface(
|
|
27
|
-
context: RenderContext,
|
|
28
|
-
surface: NonNullable<RenderContext['lineWebGLSurface']>,
|
|
29
|
-
alpha = 1
|
|
30
|
-
): void {
|
|
31
|
-
surface.compositeTo(context.ctx, {
|
|
32
|
-
alpha,
|
|
33
|
-
imageSmoothingEnabled: false,
|
|
34
|
-
})
|
|
35
|
-
}
|
|
36
|
-
|
|
37
16
|
function drawENEWithWebGL(
|
|
38
17
|
context: RenderContext,
|
|
39
18
|
data: {
|
|
@@ -94,7 +73,7 @@ function drawENEWithWebGL(
|
|
|
94
73
|
* 3. 配置变更通过外部 IndicatorScheduler 处理
|
|
95
74
|
* 4. 纯绘制函数,无副作用
|
|
96
75
|
*/
|
|
97
|
-
|
|
76
|
+
function getENEStateKey(host: PluginHost | null): string | null {
|
|
98
77
|
const scheduler = host?.getService<IndicatorScheduler>('indicatorScheduler')
|
|
99
78
|
if (!scheduler) {
|
|
100
79
|
console.warn('[ENERenderer] Scheduler not available via service locator')
|
|
@@ -289,7 +268,7 @@ export function createENERendererPlugin(): RendererPluginWithHost {
|
|
|
289
268
|
}
|
|
290
269
|
}
|
|
291
270
|
|
|
292
|
-
|
|
271
|
+
const getENETitleInfo: GetTitleInfoFn = (
|
|
293
272
|
_data: KLineData[],
|
|
294
273
|
index: number | null,
|
|
295
274
|
_params: Record<string, number | boolean | string>,
|
|
@@ -34,7 +34,7 @@ function buildEXPMACacheKey(
|
|
|
34
34
|
].join('|')
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
function getEXPMAStateKey(host: PluginHost | null): string | null {
|
|
38
38
|
const scheduler = host?.getService<IndicatorScheduler>('indicatorScheduler')
|
|
39
39
|
if (!scheduler) {
|
|
40
40
|
console.warn('[EXPMARenderer] Scheduler not available via service locator')
|
|
@@ -215,7 +215,7 @@ export function createEXPMARendererPlugin(): RendererPluginWithHost {
|
|
|
215
215
|
}
|
|
216
216
|
}
|
|
217
217
|
|
|
218
|
-
|
|
218
|
+
const getEXPMATitleInfo: GetTitleInfoFn = (
|
|
219
219
|
_data: KLineData[],
|
|
220
220
|
index: number | null,
|
|
221
221
|
_params: Record<string, number | boolean | string>,
|