@363045841yyt/klinechart-core 0.7.3 → 0.7.5
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/README.md +201 -201
- package/README.zh-CN.md +201 -201
- package/dist/controllers/index.d.ts +1 -0
- package/dist/controllers/index.d.ts.map +1 -1
- package/dist/controllers/index.js +1 -0
- package/dist/controllers/index.js.map +1 -1
- package/dist/engine/chart.d.ts +11 -19
- package/dist/engine/chart.d.ts.map +1 -1
- package/dist/engine/chart.js +92 -109
- package/dist/engine/chart.js.map +1 -1
- package/dist/engine/renderers/Indicator/indicatorData.d.ts +1 -0
- package/dist/engine/renderers/Indicator/indicatorData.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/indicatorData.js +1 -1
- package/dist/engine/renderers/Indicator/indicatorData.js.map +1 -1
- package/dist/engine/renderers/webgl/candleSurface.js +47 -47
- package/dist/engine/subPaneManager.d.ts +4 -0
- package/dist/engine/subPaneManager.d.ts.map +1 -1
- package/dist/engine/subPaneManager.js +13 -0
- package/dist/engine/subPaneManager.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -2
- package/dist/version.js.map +1 -1
- package/package.json +129 -122
- package/src/__tests__/signal.test.ts +124 -124
- package/src/config/chartSettings.ts +66 -66
- package/src/controllers/__tests__/drawing.test.ts +214 -214
- package/src/controllers/__tests__/indicatorSelector.test.ts +481 -481
- package/src/controllers/__tests__/toolbar.test.ts +225 -225
- package/src/controllers/createChartController.ts +665 -665
- package/src/controllers/createDrawingController.ts +96 -96
- package/src/controllers/createIndicatorSelectorController.ts +307 -307
- package/src/controllers/createToolbarController.ts +146 -146
- package/src/controllers/index.ts +20 -19
- package/src/controllers/types.ts +284 -284
- package/src/engine/__tests__/chart.dpr.test.ts +401 -401
- package/src/engine/__tests__/paneRenderer.resize.test.ts +92 -92
- package/src/engine/chart-store.ts +121 -121
- package/src/engine/chart.d.ts +617 -617
- package/src/engine/chart.ts +2803 -2815
- package/src/engine/controller/__tests__/interaction.dpr.test.ts +259 -259
- package/src/engine/controller/interaction.ts +722 -722
- package/src/engine/controller/markerInteraction.ts +130 -130
- package/src/engine/controller/pinchTracker.ts +82 -82
- package/src/engine/controller/tooltipPosition.ts +48 -48
- package/src/engine/draw/__tests__/pixelAlign.spec.ts +176 -176
- package/src/engine/draw/pixelAlign.ts +259 -259
- package/src/engine/drawing/index.ts +655 -655
- package/src/engine/drawing/interaction.ts +842 -842
- package/src/engine/drawing/plugin.ts +343 -343
- package/src/engine/indicators/__tests__/__fixtures__/golden/atr.json +38 -38
- package/src/engine/indicators/__tests__/__fixtures__/golden/dema.json +14 -14
- package/src/engine/indicators/__tests__/__fixtures__/golden/hma.json +14 -14
- package/src/engine/indicators/__tests__/__fixtures__/golden/index.ts +55 -55
- package/src/engine/indicators/__tests__/__fixtures__/golden/kama.json +14 -14
- package/src/engine/indicators/__tests__/__fixtures__/golden/tema.json +14 -14
- package/src/engine/indicators/__tests__/__fixtures__/golden/wma.json +40 -40
- package/src/engine/indicators/__tests__/__fixtures__/synthetic.ts +65 -65
- package/src/engine/indicators/__tests__/_propertyAssertions.ts +76 -76
- package/src/engine/indicators/__tests__/atr.test.ts +153 -153
- package/src/engine/indicators/__tests__/calculators.test.ts +614 -614
- package/src/engine/indicators/__tests__/cmf-mfi.test.ts +100 -100
- package/src/engine/indicators/__tests__/dema.test.ts +73 -73
- package/src/engine/indicators/__tests__/donchian.test.ts +70 -70
- package/src/engine/indicators/__tests__/hma.test.ts +73 -73
- package/src/engine/indicators/__tests__/ichimoku.test.ts +105 -105
- package/src/engine/indicators/__tests__/kama.test.ts +80 -80
- package/src/engine/indicators/__tests__/keltner.test.ts +65 -65
- package/src/engine/indicators/__tests__/pivot-fib.test.ts +110 -110
- package/src/engine/indicators/__tests__/roc.test.ts +68 -68
- package/src/engine/indicators/__tests__/sar.test.ts +86 -86
- package/src/engine/indicators/__tests__/scheduler.test.ts +831 -831
- package/src/engine/indicators/__tests__/soa.test.ts +533 -533
- package/src/engine/indicators/__tests__/structure.test.ts +110 -110
- package/src/engine/indicators/__tests__/supertrend.test.ts +65 -65
- package/src/engine/indicators/__tests__/tema.test.ts +68 -68
- package/src/engine/indicators/__tests__/trix.test.ts +70 -70
- package/src/engine/indicators/__tests__/volatility.test.ts +117 -117
- package/src/engine/indicators/__tests__/volume.test.ts +115 -115
- package/src/engine/indicators/__tests__/volumeProfile.test.ts +74 -74
- package/src/engine/indicators/__tests__/vwap.test.ts +69 -69
- package/src/engine/indicators/__tests__/wma.test.ts +112 -112
- package/src/engine/indicators/__tests__/zones.test.ts +95 -95
- package/src/engine/indicators/atrState.ts +27 -27
- package/src/engine/indicators/bollState.ts +51 -51
- package/src/engine/indicators/calculators.ts +2593 -2593
- package/src/engine/indicators/cciState.ts +25 -25
- package/src/engine/indicators/chaikinVolState.ts +32 -32
- package/src/engine/indicators/cmfState.ts +27 -27
- package/src/engine/indicators/demaState.ts +27 -27
- package/src/engine/indicators/donchianState.ts +43 -43
- package/src/engine/indicators/eneState.ts +43 -43
- package/src/engine/indicators/expmaState.ts +43 -43
- package/src/engine/indicators/fastkState.ts +25 -25
- package/src/engine/indicators/fibState.ts +41 -41
- package/src/engine/indicators/hmaState.ts +27 -27
- package/src/engine/indicators/hvState.ts +28 -28
- package/src/engine/indicators/ichimokuState.ts +70 -70
- package/src/engine/indicators/indicator.worker.ts +169 -169
- package/src/engine/indicators/indicatorDefinitionRegistry.ts +62 -62
- package/src/engine/indicators/indicatorMetadata.ts +110 -110
- package/src/engine/indicators/indicatorRegistry.ts +106 -106
- package/src/engine/indicators/indicatorRuntime.ts +1548 -1548
- package/src/engine/indicators/kamaState.ts +34 -34
- package/src/engine/indicators/keltnerState.ts +49 -49
- package/src/engine/indicators/kstState.ts +42 -42
- package/src/engine/indicators/maState.ts +36 -36
- package/src/engine/indicators/macdState.ts +76 -76
- package/src/engine/indicators/mfiState.ts +27 -27
- package/src/engine/indicators/momState.ts +25 -25
- package/src/engine/indicators/obvState.ts +25 -25
- package/src/engine/indicators/parkinsonState.ts +28 -28
- package/src/engine/indicators/pivotState.ts +51 -51
- package/src/engine/indicators/pvtState.ts +25 -25
- package/src/engine/indicators/rocState.ts +27 -27
- package/src/engine/indicators/rsiState.ts +65 -65
- package/src/engine/indicators/sarState.ts +41 -41
- package/src/engine/indicators/scheduler.ts +1205 -1205
- package/src/engine/indicators/soa.ts +352 -352
- package/src/engine/indicators/stateComposer.ts +1262 -1262
- package/src/engine/indicators/stochState.ts +26 -26
- package/src/engine/indicators/structureState.ts +69 -69
- package/src/engine/indicators/supertrendState.ts +37 -37
- package/src/engine/indicators/temaState.ts +27 -27
- package/src/engine/indicators/trixState.ts +35 -35
- package/src/engine/indicators/vmaState.ts +27 -27
- package/src/engine/indicators/volumeProfileState.ts +63 -63
- package/src/engine/indicators/vwapState.ts +29 -29
- package/src/engine/indicators/wmaState.ts +27 -27
- package/src/engine/indicators/wmsrState.ts +25 -25
- package/src/engine/indicators/workerProtocol.ts +613 -613
- package/src/engine/indicators/zonesState.ts +47 -47
- package/src/engine/layout/pane.ts +161 -161
- package/src/engine/marker/registry.ts +265 -265
- package/src/engine/paneRenderer.ts +169 -169
- package/src/engine/renderers/Indicator/atr.ts +237 -237
- package/src/engine/renderers/Indicator/boll.ts +317 -317
- package/src/engine/renderers/Indicator/cci.ts +275 -275
- package/src/engine/renderers/Indicator/chaikinVol.ts +138 -138
- package/src/engine/renderers/Indicator/cmf.ts +137 -137
- package/src/engine/renderers/Indicator/dema.ts +136 -136
- package/src/engine/renderers/Indicator/donchian.ts +137 -137
- package/src/engine/renderers/Indicator/ene.ts +271 -271
- package/src/engine/renderers/Indicator/expma.ts +197 -197
- package/src/engine/renderers/Indicator/fastk.ts +316 -316
- package/src/engine/renderers/Indicator/fib.ts +141 -141
- package/src/engine/renderers/Indicator/hma.ts +136 -136
- package/src/engine/renderers/Indicator/hv.ts +124 -124
- package/src/engine/renderers/Indicator/ichimoku.ts +181 -181
- package/src/engine/renderers/Indicator/index.ts +241 -241
- package/src/engine/renderers/Indicator/indicatorData.ts +650 -650
- package/src/engine/renderers/Indicator/kama.ts +136 -136
- package/src/engine/renderers/Indicator/keltner.ts +137 -137
- package/src/engine/renderers/Indicator/kst.ts +302 -302
- package/src/engine/renderers/Indicator/ma.ts +200 -200
- package/src/engine/renderers/Indicator/macd.ts +477 -477
- package/src/engine/renderers/Indicator/macdLegend.ts +141 -141
- package/src/engine/renderers/Indicator/mainIndicatorLegend.ts +272 -272
- package/src/engine/renderers/Indicator/mfi.ts +142 -142
- package/src/engine/renderers/Indicator/mom.ts +311 -311
- package/src/engine/renderers/Indicator/obv.ts +123 -123
- package/src/engine/renderers/Indicator/parkinson.ts +124 -124
- package/src/engine/renderers/Indicator/pivot.ts +131 -131
- package/src/engine/renderers/Indicator/pvt.ts +123 -123
- package/src/engine/renderers/Indicator/roc.ts +143 -143
- package/src/engine/renderers/Indicator/rsi.ts +390 -390
- package/src/engine/renderers/Indicator/sar.ts +113 -113
- package/src/engine/renderers/Indicator/scale/atr_scale.ts +19 -19
- package/src/engine/renderers/Indicator/scale/cci_scale.ts +19 -19
- package/src/engine/renderers/Indicator/scale/fastk_scale.ts +19 -19
- package/src/engine/renderers/Indicator/scale/indicator_scale.ts +204 -204
- package/src/engine/renderers/Indicator/scale/kst_scale.ts +19 -19
- package/src/engine/renderers/Indicator/scale/macd_scale.ts +22 -22
- package/src/engine/renderers/Indicator/scale/mom_scale.ts +19 -19
- package/src/engine/renderers/Indicator/scale/rsi_scale.ts +19 -19
- package/src/engine/renderers/Indicator/scale/stoch_scale.ts +19 -19
- package/src/engine/renderers/Indicator/scale/volume_scale.ts +26 -26
- package/src/engine/renderers/Indicator/scale/wmsr_scale.ts +19 -19
- package/src/engine/renderers/Indicator/stoch.ts +359 -359
- package/src/engine/renderers/Indicator/structure.ts +126 -126
- package/src/engine/renderers/Indicator/subPaneConfig.ts +265 -265
- package/src/engine/renderers/Indicator/supertrend.ts +115 -115
- package/src/engine/renderers/Indicator/tema.ts +136 -136
- package/src/engine/renderers/Indicator/trix.ts +158 -158
- package/src/engine/renderers/Indicator/vma.ts +124 -124
- package/src/engine/renderers/Indicator/volumeProfile.ts +125 -125
- package/src/engine/renderers/Indicator/vwap.ts +123 -123
- package/src/engine/renderers/Indicator/wma.ts +136 -136
- package/src/engine/renderers/Indicator/wmsr.ts +328 -328
- package/src/engine/renderers/Indicator/zones.ts +104 -104
- package/src/engine/renderers/__tests__/boll.renderer.test.ts +314 -314
- package/src/engine/renderers/__tests__/ene.renderer.test.ts +305 -305
- package/src/engine/renderers/__tests__/expma.renderer.test.ts +279 -279
- package/src/engine/renderers/__tests__/ma.renderer.test.ts +426 -426
- package/src/engine/renderers/__tests__/mainIndicatorLegend.renderer.test.ts +502 -502
- package/src/engine/renderers/__tests__/yAxis.renderer.test.ts +173 -173
- package/src/engine/renderers/candle.ts +459 -459
- package/src/engine/renderers/crosshair.ts +69 -69
- package/src/engine/renderers/customMarkers.ts +162 -162
- package/src/engine/renderers/extremaMarkers.ts +246 -246
- package/src/engine/renderers/gridLines.ts +90 -90
- package/src/engine/renderers/lastPrice.ts +97 -97
- package/src/engine/renderers/paneTitle.ts +136 -136
- package/src/engine/renderers/subVolume.ts +236 -236
- package/src/engine/renderers/timeAxis.ts +121 -121
- package/src/engine/renderers/webgl/candleSurface.ts +955 -955
- package/src/engine/renderers/webgl/sharedWebGLSurface.ts +146 -146
- package/src/engine/renderers/yAxis.ts +105 -105
- package/src/engine/scale/__tests__/logFormula.spec.ts +148 -148
- package/src/engine/scale/logFormula.ts +130 -130
- package/src/engine/scale/price.ts +39 -39
- package/src/engine/scale/priceScale.ts +264 -264
- package/src/engine/subPaneManager.ts +442 -427
- package/src/engine/theme/colors.ts +642 -642
- package/src/engine/theme/fonts.ts +20 -20
- package/src/engine/utils/klineConfig.ts +49 -49
- package/src/engine/utils/tickCount.ts +11 -11
- package/src/engine/utils/tickPosition.ts +214 -214
- package/src/engine/utils/zoom.ts +83 -83
- package/src/engine/viewport/viewport.ts +67 -67
- package/src/index.ts +3 -3
- package/src/plugin/ConfigManager.ts +93 -93
- package/src/plugin/EventBus.ts +77 -77
- package/src/plugin/HookSystem.ts +106 -106
- package/src/plugin/PluginHost.ts +243 -243
- package/src/plugin/PluginRegistry.ts +92 -92
- package/src/plugin/StateStore.ts +73 -73
- package/src/plugin/index.ts +19 -19
- package/src/plugin/rendererPluginManager.ts +368 -368
- package/src/plugin/stateKeys.ts +8 -8
- package/src/plugin/types.ts +526 -526
- package/src/reactivity/index.ts +2 -2
- package/src/reactivity/signal.ts +119 -119
- package/src/semantic/controller.ts +251 -251
- package/src/semantic/drawShape.ts +260 -260
- package/src/semantic/index.ts +28 -28
- package/src/semantic/schema.json +256 -256
- package/src/semantic/types.ts +251 -251
- package/src/semantic/validator.ts +349 -349
- package/src/types/kLine.ts +13 -13
- package/src/types/price.ts +56 -56
- package/src/types/volumePrice.ts +33 -33
- package/src/utils/dateFormat.ts +208 -208
- package/src/utils/kLineDraw/axis.ts +562 -562
- package/src/utils/priceToY.ts +34 -34
- package/src/utils/volumePrice.ts +202 -202
- package/src/version.ts +1 -1
|
@@ -1,47 +1,47 @@
|
|
|
1
|
-
import type { BaseIndicatorState } from '../../plugin'
|
|
2
|
-
import { createIndicatorStateKey } from '../../plugin/stateKeys'
|
|
3
|
-
|
|
4
|
-
export type ZoneKind = 'FVG_BULL' | 'FVG_BEAR' | 'OB_BULL' | 'OB_BEAR'
|
|
5
|
-
|
|
6
|
-
export interface Zone {
|
|
7
|
-
kind: ZoneKind
|
|
8
|
-
startIndex: number
|
|
9
|
-
endIndex?: number // undefined = zone still active (not yet filled/mitigated)
|
|
10
|
-
high: number
|
|
11
|
-
low: number
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export interface ZonesRenderState extends BaseIndicatorState {
|
|
15
|
-
timestamp: number
|
|
16
|
-
series: Zone[]
|
|
17
|
-
params: {
|
|
18
|
-
showFVG: boolean
|
|
19
|
-
showOB: boolean
|
|
20
|
-
showFilledZones: boolean
|
|
21
|
-
obLookback: number // bars to look back for the OB candle before a BOS
|
|
22
|
-
}
|
|
23
|
-
valueMin: number
|
|
24
|
-
valueMax: number
|
|
25
|
-
visibleMin: number
|
|
26
|
-
visibleMax: number
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export const createZonesStateKey = (paneId: string) =>
|
|
30
|
-
createIndicatorStateKey('zones', paneId)
|
|
31
|
-
|
|
32
|
-
export const DEFAULT_ZONES_OB_LOOKBACK = 5
|
|
33
|
-
|
|
34
|
-
export const EMPTY_ZONES_STATE: ZonesRenderState = {
|
|
35
|
-
timestamp: 0,
|
|
36
|
-
series: [],
|
|
37
|
-
params: {
|
|
38
|
-
showFVG: true,
|
|
39
|
-
showOB: true,
|
|
40
|
-
showFilledZones: false,
|
|
41
|
-
obLookback: DEFAULT_ZONES_OB_LOOKBACK,
|
|
42
|
-
},
|
|
43
|
-
valueMin: 0,
|
|
44
|
-
valueMax: 1,
|
|
45
|
-
visibleMin: Infinity,
|
|
46
|
-
visibleMax: -Infinity,
|
|
47
|
-
}
|
|
1
|
+
import type { BaseIndicatorState } from '../../plugin'
|
|
2
|
+
import { createIndicatorStateKey } from '../../plugin/stateKeys'
|
|
3
|
+
|
|
4
|
+
export type ZoneKind = 'FVG_BULL' | 'FVG_BEAR' | 'OB_BULL' | 'OB_BEAR'
|
|
5
|
+
|
|
6
|
+
export interface Zone {
|
|
7
|
+
kind: ZoneKind
|
|
8
|
+
startIndex: number
|
|
9
|
+
endIndex?: number // undefined = zone still active (not yet filled/mitigated)
|
|
10
|
+
high: number
|
|
11
|
+
low: number
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface ZonesRenderState extends BaseIndicatorState {
|
|
15
|
+
timestamp: number
|
|
16
|
+
series: Zone[]
|
|
17
|
+
params: {
|
|
18
|
+
showFVG: boolean
|
|
19
|
+
showOB: boolean
|
|
20
|
+
showFilledZones: boolean
|
|
21
|
+
obLookback: number // bars to look back for the OB candle before a BOS
|
|
22
|
+
}
|
|
23
|
+
valueMin: number
|
|
24
|
+
valueMax: number
|
|
25
|
+
visibleMin: number
|
|
26
|
+
visibleMax: number
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export const createZonesStateKey = (paneId: string) =>
|
|
30
|
+
createIndicatorStateKey('zones', paneId)
|
|
31
|
+
|
|
32
|
+
export const DEFAULT_ZONES_OB_LOOKBACK = 5
|
|
33
|
+
|
|
34
|
+
export const EMPTY_ZONES_STATE: ZonesRenderState = {
|
|
35
|
+
timestamp: 0,
|
|
36
|
+
series: [],
|
|
37
|
+
params: {
|
|
38
|
+
showFVG: true,
|
|
39
|
+
showOB: true,
|
|
40
|
+
showFilledZones: false,
|
|
41
|
+
obLookback: DEFAULT_ZONES_OB_LOOKBACK,
|
|
42
|
+
},
|
|
43
|
+
valueMin: 0,
|
|
44
|
+
valueMax: 1,
|
|
45
|
+
visibleMin: Infinity,
|
|
46
|
+
visibleMax: -Infinity,
|
|
47
|
+
}
|
|
@@ -1,161 +1,161 @@
|
|
|
1
|
-
import type { KLineData } from '../../types/price'
|
|
2
|
-
import { getVisiblePriceRange } from '../viewport/viewport'
|
|
3
|
-
import type { PriceRange } from '../scale/price'
|
|
4
|
-
import { PriceScale } from '../scale/priceScale'
|
|
5
|
-
import type { MarkerManager } from '../marker/registry'
|
|
6
|
-
import type { PaneCapabilities, PaneRole } from '../../plugin'
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* 更新级别枚举 - 用于双层 Canvas 架构
|
|
10
|
-
* Main: 只更新主画布(K线、指标等静态内容)
|
|
11
|
-
* Overlay: 只更新覆盖层(十字线、Tooltip等动态内容)
|
|
12
|
-
* All: 更新所有层
|
|
13
|
-
*/
|
|
14
|
-
export enum UpdateLevel {
|
|
15
|
-
Main = 'main',
|
|
16
|
-
Overlay = 'overlay',
|
|
17
|
-
All = 'all'
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export type VisibleRange = { start: number; end: number }
|
|
21
|
-
|
|
22
|
-
export interface PaneInitOptions {
|
|
23
|
-
role?: PaneRole
|
|
24
|
-
capabilities?: Partial<PaneCapabilities>
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
function defaultCapabilitiesByRole(role: PaneRole): PaneCapabilities {
|
|
28
|
-
if (role === 'price') {
|
|
29
|
-
return {
|
|
30
|
-
showPriceAxisTicks: true,
|
|
31
|
-
showCrosshairPriceLabel: true,
|
|
32
|
-
candleHitTest: true,
|
|
33
|
-
supportsPriceTranslate: true,
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
if (role === 'indicator') {
|
|
37
|
-
return {
|
|
38
|
-
showPriceAxisTicks: false,
|
|
39
|
-
showCrosshairPriceLabel: true,
|
|
40
|
-
candleHitTest: false,
|
|
41
|
-
supportsPriceTranslate: true,
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
return {
|
|
45
|
-
showPriceAxisTicks: false,
|
|
46
|
-
showCrosshairPriceLabel: false,
|
|
47
|
-
candleHitTest: false,
|
|
48
|
-
supportsPriceTranslate: false,
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Pane 级渲染器接口:在单个 pane 的坐标系中绘制内容
|
|
54
|
-
*/
|
|
55
|
-
export interface PaneRenderer {
|
|
56
|
-
/**
|
|
57
|
-
* 在指定 pane 坐标系中绘制内容
|
|
58
|
-
* @param ctx Canvas 绘图上下文,Chart 已执行 translate(0, pane.top),y=0 对应 pane 顶部
|
|
59
|
-
* @param pane 当前 pane 实例
|
|
60
|
-
* @param data 全量 K 线数据
|
|
61
|
-
* @param range 当前视口可见的索引范围
|
|
62
|
-
* @param scrollLeft 滚动偏移量,renderer 内部如需 world 坐标需执行 ctx.translate(-scrollLeft, 0)
|
|
63
|
-
* @param kWidth K 线宽度
|
|
64
|
-
* @param kGap K 线间隔
|
|
65
|
-
* @param dpr 设备像素比
|
|
66
|
-
* @param paneWidth pane 宽度
|
|
67
|
-
* @param kLinePositions 可选,K 线起始 x 坐标数组(由 Chart 统一计算)
|
|
68
|
-
*/
|
|
69
|
-
draw(args: {
|
|
70
|
-
ctx: CanvasRenderingContext2D
|
|
71
|
-
pane: Pane
|
|
72
|
-
data: KLineData[]
|
|
73
|
-
range: VisibleRange
|
|
74
|
-
scrollLeft: number
|
|
75
|
-
kWidth: number
|
|
76
|
-
kGap: number
|
|
77
|
-
dpr: number
|
|
78
|
-
paneWidth: number
|
|
79
|
-
kLinePositions: number[]
|
|
80
|
-
markerManager?: MarkerManager
|
|
81
|
-
}): void
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* Pane:代表一个"窗口区域"(主图 / 副图)
|
|
86
|
-
*/
|
|
87
|
-
export class Pane {
|
|
88
|
-
readonly id: string
|
|
89
|
-
readonly role: PaneRole
|
|
90
|
-
readonly capabilities: PaneCapabilities
|
|
91
|
-
top = 0
|
|
92
|
-
height = 0
|
|
93
|
-
|
|
94
|
-
/** 当前 pane 的可视价格范围(用于右侧轴、以及渲染器内部) */
|
|
95
|
-
priceRange: PriceRange = { maxPrice: 100, minPrice: 0 }
|
|
96
|
-
|
|
97
|
-
/** pane 独立 Y 轴 */
|
|
98
|
-
readonly yAxis = new PriceScale()
|
|
99
|
-
|
|
100
|
-
/** 该 pane 的渲染器列表 */
|
|
101
|
-
readonly renderers: PaneRenderer[] = []
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* 创建 pane 实例
|
|
105
|
-
* @param id pane 标识符(例如 'main'、'sub'),用于在 Chart/Interaction 中识别 pane
|
|
106
|
-
*/
|
|
107
|
-
constructor(id: string, options: PaneInitOptions = {}) {
|
|
108
|
-
this.id = id
|
|
109
|
-
this.role = options.role ?? (id === 'main' ? 'price' : 'indicator')
|
|
110
|
-
this.capabilities = {
|
|
111
|
-
...defaultCapabilitiesByRole(this.role),
|
|
112
|
-
...(options.capabilities ?? {}),
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* 设置 pane 的垂直布局
|
|
118
|
-
* @param top 相对 plotCanvas 顶部的偏移(逻辑像素)
|
|
119
|
-
* @param height pane 高度(逻辑像素)
|
|
120
|
-
*/
|
|
121
|
-
setLayout(top: number, height: number) {
|
|
122
|
-
this.top = top
|
|
123
|
-
this.height = Math.max(1, height)
|
|
124
|
-
this.yAxis.setHeight(this.height)
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
/**
|
|
128
|
-
* 设置 Y 轴上下 padding
|
|
129
|
-
* @param top 上内边距,影响 priceToY 映射的顶部留白
|
|
130
|
-
* @param bottom 下内边距,影响 priceToY 映射的底部留白
|
|
131
|
-
*/
|
|
132
|
-
setPadding(top: number, bottom: number) {
|
|
133
|
-
this.yAxis.setPadding(top, bottom)
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
/**
|
|
137
|
-
* 注册一个 pane 级渲染器
|
|
138
|
-
* @param renderer pane 级渲染器实例
|
|
139
|
-
*/
|
|
140
|
-
addRenderer(renderer: PaneRenderer) {
|
|
141
|
-
this.renderers.push(renderer)
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
/**
|
|
145
|
-
* 根据当前可见索引区间更新 priceRange 并同步到 yAxis
|
|
146
|
-
* @param data 全量 K 线数据
|
|
147
|
-
* @param range 当前视口可见的索引范围(由 getVisibleRange 计算)
|
|
148
|
-
* @param indicatorRange 可选的指标极值范围,与K线极值合并
|
|
149
|
-
*/
|
|
150
|
-
updateRange(data: KLineData[], range: VisibleRange, indicatorRange?: { min: number; max: number } | null) {
|
|
151
|
-
this.priceRange = getVisiblePriceRange(data, range.start, range.end)
|
|
152
|
-
|
|
153
|
-
// 如果有指标极值,合并到价格范围
|
|
154
|
-
if (indicatorRange && Number.isFinite(indicatorRange.min) && Number.isFinite(indicatorRange.max)) {
|
|
155
|
-
this.priceRange.minPrice = Math.min(this.priceRange.minPrice, indicatorRange.min)
|
|
156
|
-
this.priceRange.maxPrice = Math.max(this.priceRange.maxPrice, indicatorRange.max)
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
this.yAxis.setRange(this.priceRange)
|
|
160
|
-
}
|
|
161
|
-
}
|
|
1
|
+
import type { KLineData } from '../../types/price'
|
|
2
|
+
import { getVisiblePriceRange } from '../viewport/viewport'
|
|
3
|
+
import type { PriceRange } from '../scale/price'
|
|
4
|
+
import { PriceScale } from '../scale/priceScale'
|
|
5
|
+
import type { MarkerManager } from '../marker/registry'
|
|
6
|
+
import type { PaneCapabilities, PaneRole } from '../../plugin'
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* 更新级别枚举 - 用于双层 Canvas 架构
|
|
10
|
+
* Main: 只更新主画布(K线、指标等静态内容)
|
|
11
|
+
* Overlay: 只更新覆盖层(十字线、Tooltip等动态内容)
|
|
12
|
+
* All: 更新所有层
|
|
13
|
+
*/
|
|
14
|
+
export enum UpdateLevel {
|
|
15
|
+
Main = 'main',
|
|
16
|
+
Overlay = 'overlay',
|
|
17
|
+
All = 'all'
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export type VisibleRange = { start: number; end: number }
|
|
21
|
+
|
|
22
|
+
export interface PaneInitOptions {
|
|
23
|
+
role?: PaneRole
|
|
24
|
+
capabilities?: Partial<PaneCapabilities>
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function defaultCapabilitiesByRole(role: PaneRole): PaneCapabilities {
|
|
28
|
+
if (role === 'price') {
|
|
29
|
+
return {
|
|
30
|
+
showPriceAxisTicks: true,
|
|
31
|
+
showCrosshairPriceLabel: true,
|
|
32
|
+
candleHitTest: true,
|
|
33
|
+
supportsPriceTranslate: true,
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
if (role === 'indicator') {
|
|
37
|
+
return {
|
|
38
|
+
showPriceAxisTicks: false,
|
|
39
|
+
showCrosshairPriceLabel: true,
|
|
40
|
+
candleHitTest: false,
|
|
41
|
+
supportsPriceTranslate: true,
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
showPriceAxisTicks: false,
|
|
46
|
+
showCrosshairPriceLabel: false,
|
|
47
|
+
candleHitTest: false,
|
|
48
|
+
supportsPriceTranslate: false,
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Pane 级渲染器接口:在单个 pane 的坐标系中绘制内容
|
|
54
|
+
*/
|
|
55
|
+
export interface PaneRenderer {
|
|
56
|
+
/**
|
|
57
|
+
* 在指定 pane 坐标系中绘制内容
|
|
58
|
+
* @param ctx Canvas 绘图上下文,Chart 已执行 translate(0, pane.top),y=0 对应 pane 顶部
|
|
59
|
+
* @param pane 当前 pane 实例
|
|
60
|
+
* @param data 全量 K 线数据
|
|
61
|
+
* @param range 当前视口可见的索引范围
|
|
62
|
+
* @param scrollLeft 滚动偏移量,renderer 内部如需 world 坐标需执行 ctx.translate(-scrollLeft, 0)
|
|
63
|
+
* @param kWidth K 线宽度
|
|
64
|
+
* @param kGap K 线间隔
|
|
65
|
+
* @param dpr 设备像素比
|
|
66
|
+
* @param paneWidth pane 宽度
|
|
67
|
+
* @param kLinePositions 可选,K 线起始 x 坐标数组(由 Chart 统一计算)
|
|
68
|
+
*/
|
|
69
|
+
draw(args: {
|
|
70
|
+
ctx: CanvasRenderingContext2D
|
|
71
|
+
pane: Pane
|
|
72
|
+
data: KLineData[]
|
|
73
|
+
range: VisibleRange
|
|
74
|
+
scrollLeft: number
|
|
75
|
+
kWidth: number
|
|
76
|
+
kGap: number
|
|
77
|
+
dpr: number
|
|
78
|
+
paneWidth: number
|
|
79
|
+
kLinePositions: number[]
|
|
80
|
+
markerManager?: MarkerManager
|
|
81
|
+
}): void
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Pane:代表一个"窗口区域"(主图 / 副图)
|
|
86
|
+
*/
|
|
87
|
+
export class Pane {
|
|
88
|
+
readonly id: string
|
|
89
|
+
readonly role: PaneRole
|
|
90
|
+
readonly capabilities: PaneCapabilities
|
|
91
|
+
top = 0
|
|
92
|
+
height = 0
|
|
93
|
+
|
|
94
|
+
/** 当前 pane 的可视价格范围(用于右侧轴、以及渲染器内部) */
|
|
95
|
+
priceRange: PriceRange = { maxPrice: 100, minPrice: 0 }
|
|
96
|
+
|
|
97
|
+
/** pane 独立 Y 轴 */
|
|
98
|
+
readonly yAxis = new PriceScale()
|
|
99
|
+
|
|
100
|
+
/** 该 pane 的渲染器列表 */
|
|
101
|
+
readonly renderers: PaneRenderer[] = []
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* 创建 pane 实例
|
|
105
|
+
* @param id pane 标识符(例如 'main'、'sub'),用于在 Chart/Interaction 中识别 pane
|
|
106
|
+
*/
|
|
107
|
+
constructor(id: string, options: PaneInitOptions = {}) {
|
|
108
|
+
this.id = id
|
|
109
|
+
this.role = options.role ?? (id === 'main' ? 'price' : 'indicator')
|
|
110
|
+
this.capabilities = {
|
|
111
|
+
...defaultCapabilitiesByRole(this.role),
|
|
112
|
+
...(options.capabilities ?? {}),
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* 设置 pane 的垂直布局
|
|
118
|
+
* @param top 相对 plotCanvas 顶部的偏移(逻辑像素)
|
|
119
|
+
* @param height pane 高度(逻辑像素)
|
|
120
|
+
*/
|
|
121
|
+
setLayout(top: number, height: number) {
|
|
122
|
+
this.top = top
|
|
123
|
+
this.height = Math.max(1, height)
|
|
124
|
+
this.yAxis.setHeight(this.height)
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* 设置 Y 轴上下 padding
|
|
129
|
+
* @param top 上内边距,影响 priceToY 映射的顶部留白
|
|
130
|
+
* @param bottom 下内边距,影响 priceToY 映射的底部留白
|
|
131
|
+
*/
|
|
132
|
+
setPadding(top: number, bottom: number) {
|
|
133
|
+
this.yAxis.setPadding(top, bottom)
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* 注册一个 pane 级渲染器
|
|
138
|
+
* @param renderer pane 级渲染器实例
|
|
139
|
+
*/
|
|
140
|
+
addRenderer(renderer: PaneRenderer) {
|
|
141
|
+
this.renderers.push(renderer)
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* 根据当前可见索引区间更新 priceRange 并同步到 yAxis
|
|
146
|
+
* @param data 全量 K 线数据
|
|
147
|
+
* @param range 当前视口可见的索引范围(由 getVisibleRange 计算)
|
|
148
|
+
* @param indicatorRange 可选的指标极值范围,与K线极值合并
|
|
149
|
+
*/
|
|
150
|
+
updateRange(data: KLineData[], range: VisibleRange, indicatorRange?: { min: number; max: number } | null) {
|
|
151
|
+
this.priceRange = getVisiblePriceRange(data, range.start, range.end)
|
|
152
|
+
|
|
153
|
+
// 如果有指标极值,合并到价格范围
|
|
154
|
+
if (indicatorRange && Number.isFinite(indicatorRange.min) && Number.isFinite(indicatorRange.max)) {
|
|
155
|
+
this.priceRange.minPrice = Math.min(this.priceRange.minPrice, indicatorRange.min)
|
|
156
|
+
this.priceRange.maxPrice = Math.max(this.priceRange.maxPrice, indicatorRange.max)
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
this.yAxis.setRange(this.priceRange)
|
|
160
|
+
}
|
|
161
|
+
}
|