@363045841yyt/klinechart-core 0.7.9 → 0.7.11
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/engine/chart.d.ts.map +1 -1
- package/dist/engine/chart.js +39 -229
- package/dist/engine/chart.js.map +1 -1
- package/dist/engine/indicators/indicatorDefinitionRegistry.d.ts +10 -3
- package/dist/engine/indicators/indicatorDefinitionRegistry.d.ts.map +1 -1
- package/dist/engine/indicators/indicatorDefinitionRegistry.js +29 -2
- package/dist/engine/indicators/indicatorDefinitionRegistry.js.map +1 -1
- package/dist/engine/indicators/indicatorMetadata.d.ts +79 -2
- package/dist/engine/indicators/indicatorMetadata.d.ts.map +1 -1
- package/dist/engine/indicators/indicatorMetadata.js.map +1 -1
- package/dist/engine/indicators/indicatorRegistry.d.ts +5 -0
- package/dist/engine/indicators/indicatorRegistry.d.ts.map +1 -1
- package/dist/engine/indicators/indicatorRegistry.js +49 -5
- package/dist/engine/indicators/indicatorRegistry.js.map +1 -1
- package/dist/engine/indicators/registerBuiltins.d.ts +42 -0
- package/dist/engine/indicators/registerBuiltins.d.ts.map +1 -0
- package/dist/engine/indicators/registerBuiltins.js +46 -0
- package/dist/engine/indicators/registerBuiltins.js.map +1 -0
- package/dist/engine/indicators/scheduler.d.ts +2 -2
- package/dist/engine/indicators/scheduler.d.ts.map +1 -1
- package/dist/engine/indicators/scheduler.js +41 -11
- package/dist/engine/indicators/scheduler.js.map +1 -1
- package/dist/engine/indicators/stateComposer.d.ts +6 -4
- package/dist/engine/indicators/stateComposer.d.ts.map +1 -1
- package/dist/engine/indicators/stateComposer.js +80 -984
- package/dist/engine/indicators/stateComposer.js.map +1 -1
- package/dist/engine/indicators/visibleStateComposers.d.ts +145 -0
- package/dist/engine/indicators/visibleStateComposers.d.ts.map +1 -0
- package/dist/engine/indicators/visibleStateComposers.js +469 -0
- package/dist/engine/indicators/visibleStateComposers.js.map +1 -0
- package/dist/engine/renderers/Indicator/atr.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/atr.js +8 -0
- package/dist/engine/renderers/Indicator/atr.js.map +1 -1
- package/dist/engine/renderers/Indicator/boll.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/boll.js +47 -0
- package/dist/engine/renderers/Indicator/boll.js.map +1 -1
- package/dist/engine/renderers/Indicator/cci.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/cci.js +8 -1
- package/dist/engine/renderers/Indicator/cci.js.map +1 -1
- package/dist/engine/renderers/Indicator/chaikinVol.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/chaikinVol.js +7 -1
- package/dist/engine/renderers/Indicator/chaikinVol.js.map +1 -1
- package/dist/engine/renderers/Indicator/cmf.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/cmf.js +7 -1
- package/dist/engine/renderers/Indicator/cmf.js.map +1 -1
- package/dist/engine/renderers/Indicator/dema.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/dema.js +8 -1
- package/dist/engine/renderers/Indicator/dema.js.map +1 -1
- package/dist/engine/renderers/Indicator/donchian.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/donchian.js +8 -1
- package/dist/engine/renderers/Indicator/donchian.js.map +1 -1
- package/dist/engine/renderers/Indicator/ene.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/ene.js +45 -0
- package/dist/engine/renderers/Indicator/ene.js.map +1 -1
- package/dist/engine/renderers/Indicator/expma.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/expma.js +45 -0
- package/dist/engine/renderers/Indicator/expma.js.map +1 -1
- package/dist/engine/renderers/Indicator/fastk.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/fastk.js +8 -1
- package/dist/engine/renderers/Indicator/fastk.js.map +1 -1
- package/dist/engine/renderers/Indicator/fib.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/fib.js +8 -1
- package/dist/engine/renderers/Indicator/fib.js.map +1 -1
- package/dist/engine/renderers/Indicator/hma.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/hma.js +8 -1
- package/dist/engine/renderers/Indicator/hma.js.map +1 -1
- package/dist/engine/renderers/Indicator/hv.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/hv.js +7 -0
- package/dist/engine/renderers/Indicator/hv.js.map +1 -1
- package/dist/engine/renderers/Indicator/ichimoku.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/ichimoku.js +8 -1
- package/dist/engine/renderers/Indicator/ichimoku.js.map +1 -1
- package/dist/engine/renderers/Indicator/index.d.ts +7 -2
- package/dist/engine/renderers/Indicator/index.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/index.js +2 -114
- package/dist/engine/renderers/Indicator/index.js.map +1 -1
- package/dist/engine/renderers/Indicator/kama.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/kama.js +8 -1
- package/dist/engine/renderers/Indicator/kama.js.map +1 -1
- package/dist/engine/renderers/Indicator/keltner.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/keltner.js +8 -1
- package/dist/engine/renderers/Indicator/keltner.js.map +1 -1
- package/dist/engine/renderers/Indicator/kst.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/kst.js +8 -0
- package/dist/engine/renderers/Indicator/kst.js.map +1 -1
- package/dist/engine/renderers/Indicator/ma.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/ma.js +63 -0
- package/dist/engine/renderers/Indicator/ma.js.map +1 -1
- package/dist/engine/renderers/Indicator/macd.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/macd.js +8 -1
- package/dist/engine/renderers/Indicator/macd.js.map +1 -1
- package/dist/engine/renderers/Indicator/mfi.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/mfi.js +7 -1
- package/dist/engine/renderers/Indicator/mfi.js.map +1 -1
- package/dist/engine/renderers/Indicator/mom.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/mom.js +8 -0
- package/dist/engine/renderers/Indicator/mom.js.map +1 -1
- package/dist/engine/renderers/Indicator/obv.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/obv.js +7 -1
- package/dist/engine/renderers/Indicator/obv.js.map +1 -1
- package/dist/engine/renderers/Indicator/parkinson.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/parkinson.js +7 -0
- package/dist/engine/renderers/Indicator/parkinson.js.map +1 -1
- package/dist/engine/renderers/Indicator/pivot.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/pivot.js +8 -1
- package/dist/engine/renderers/Indicator/pivot.js.map +1 -1
- package/dist/engine/renderers/Indicator/pvt.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/pvt.js +7 -1
- package/dist/engine/renderers/Indicator/pvt.js.map +1 -1
- package/dist/engine/renderers/Indicator/roc.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/roc.js +7 -1
- package/dist/engine/renderers/Indicator/roc.js.map +1 -1
- package/dist/engine/renderers/Indicator/rsi.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/rsi.js +8 -1
- package/dist/engine/renderers/Indicator/rsi.js.map +1 -1
- package/dist/engine/renderers/Indicator/sar.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/sar.js +8 -1
- package/dist/engine/renderers/Indicator/sar.js.map +1 -1
- package/dist/engine/renderers/Indicator/stoch.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/stoch.js +8 -1
- package/dist/engine/renderers/Indicator/stoch.js.map +1 -1
- package/dist/engine/renderers/Indicator/structure.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/structure.js +8 -1
- package/dist/engine/renderers/Indicator/structure.js.map +1 -1
- package/dist/engine/renderers/Indicator/subPaneConfig.d.ts +1 -1
- package/dist/engine/renderers/Indicator/subPaneConfig.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/subPaneConfig.js.map +1 -1
- package/dist/engine/renderers/Indicator/supertrend.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/supertrend.js +8 -1
- package/dist/engine/renderers/Indicator/supertrend.js.map +1 -1
- package/dist/engine/renderers/Indicator/tema.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/tema.js +8 -1
- package/dist/engine/renderers/Indicator/tema.js.map +1 -1
- package/dist/engine/renderers/Indicator/trix.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/trix.js +7 -0
- package/dist/engine/renderers/Indicator/trix.js.map +1 -1
- package/dist/engine/renderers/Indicator/vma.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/vma.js +7 -0
- package/dist/engine/renderers/Indicator/vma.js.map +1 -1
- package/dist/engine/renderers/Indicator/volumeProfile.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/volumeProfile.js +7 -1
- package/dist/engine/renderers/Indicator/volumeProfile.js.map +1 -1
- package/dist/engine/renderers/Indicator/vwap.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/vwap.js +7 -1
- package/dist/engine/renderers/Indicator/vwap.js.map +1 -1
- package/dist/engine/renderers/Indicator/wma.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/wma.js +8 -1
- package/dist/engine/renderers/Indicator/wma.js.map +1 -1
- package/dist/engine/renderers/Indicator/wmsr.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/wmsr.js +8 -1
- package/dist/engine/renderers/Indicator/wmsr.js.map +1 -1
- package/dist/engine/renderers/Indicator/zones.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/zones.js +8 -1
- package/dist/engine/renderers/Indicator/zones.js.map +1 -1
- package/dist/engine/renderers/extremaMarkers.d.ts.map +1 -1
- package/dist/engine/renderers/extremaMarkers.js +0 -22
- package/dist/engine/renderers/extremaMarkers.js.map +1 -1
- package/dist/engine/renderers/subVolume.d.ts.map +1 -1
- package/dist/engine/renderers/subVolume.js +3 -0
- package/dist/engine/renderers/subVolume.js.map +1 -1
- package/dist/engine/subPaneManager.d.ts +1 -0
- package/dist/engine/subPaneManager.d.ts.map +1 -1
- package/dist/engine/subPaneManager.js +30 -237
- package/dist/engine/subPaneManager.js.map +1 -1
- package/dist/semantic/controller.d.ts +9 -4
- package/dist/semantic/controller.d.ts.map +1 -1
- package/dist/semantic/controller.js +57 -53
- package/dist/semantic/controller.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +1 -1
- package/src/engine/chart.ts +49 -229
- package/src/engine/indicators/__tests__/indicatorDefinitionRegistry.test.ts +59 -0
- package/src/engine/indicators/__tests__/indicatorRegistry.test.ts +62 -0
- package/src/engine/indicators/__tests__/registerBuiltins.test.ts +380 -0
- package/src/engine/indicators/__tests__/scheduler.test.ts +62 -32
- package/src/engine/indicators/__tests__/stateComposer.test.ts +444 -0
- package/src/engine/indicators/indicatorDefinitionRegistry.ts +49 -4
- package/src/engine/indicators/indicatorMetadata.ts +107 -2
- package/src/engine/indicators/indicatorRegistry.ts +54 -5
- package/src/engine/indicators/registerBuiltins.ts +47 -0
- package/src/engine/indicators/scheduler.ts +61 -13
- package/src/engine/indicators/stateComposer.ts +110 -1040
- package/src/engine/indicators/visibleStateComposers.ts +734 -0
- package/src/engine/renderers/Indicator/__tests__/createSubIndicatorRenderer.test.ts +61 -0
- package/src/engine/renderers/Indicator/atr.ts +9 -1
- package/src/engine/renderers/Indicator/boll.ts +53 -1
- package/src/engine/renderers/Indicator/cci.ts +9 -2
- package/src/engine/renderers/Indicator/chaikinVol.ts +8 -2
- package/src/engine/renderers/Indicator/cmf.ts +8 -2
- package/src/engine/renderers/Indicator/dema.ts +9 -2
- package/src/engine/renderers/Indicator/donchian.ts +9 -2
- package/src/engine/renderers/Indicator/ene.ts +51 -1
- package/src/engine/renderers/Indicator/expma.ts +51 -1
- package/src/engine/renderers/Indicator/fastk.ts +9 -2
- package/src/engine/renderers/Indicator/fib.ts +9 -2
- package/src/engine/renderers/Indicator/hma.ts +9 -2
- package/src/engine/renderers/Indicator/hv.ts +8 -1
- package/src/engine/renderers/Indicator/ichimoku.ts +9 -2
- package/src/engine/renderers/Indicator/index.ts +9 -121
- package/src/engine/renderers/Indicator/kama.ts +9 -2
- package/src/engine/renderers/Indicator/keltner.ts +9 -2
- package/src/engine/renderers/Indicator/kst.ts +9 -1
- package/src/engine/renderers/Indicator/ma.ts +69 -0
- package/src/engine/renderers/Indicator/macd.ts +9 -2
- package/src/engine/renderers/Indicator/mfi.ts +8 -2
- package/src/engine/renderers/Indicator/mom.ts +9 -1
- package/src/engine/renderers/Indicator/obv.ts +8 -2
- package/src/engine/renderers/Indicator/parkinson.ts +8 -1
- package/src/engine/renderers/Indicator/pivot.ts +9 -2
- package/src/engine/renderers/Indicator/pvt.ts +8 -2
- package/src/engine/renderers/Indicator/roc.ts +8 -2
- package/src/engine/renderers/Indicator/rsi.ts +9 -2
- package/src/engine/renderers/Indicator/sar.ts +9 -2
- package/src/engine/renderers/Indicator/stoch.ts +9 -2
- package/src/engine/renderers/Indicator/structure.ts +9 -2
- package/src/engine/renderers/Indicator/subPaneConfig.ts +1 -1
- package/src/engine/renderers/Indicator/supertrend.ts +9 -2
- package/src/engine/renderers/Indicator/tema.ts +9 -2
- package/src/engine/renderers/Indicator/trix.ts +8 -1
- package/src/engine/renderers/Indicator/vma.ts +8 -1
- package/src/engine/renderers/Indicator/volumeProfile.ts +8 -2
- package/src/engine/renderers/Indicator/vwap.ts +8 -2
- package/src/engine/renderers/Indicator/wma.ts +9 -2
- package/src/engine/renderers/Indicator/wmsr.ts +9 -2
- package/src/engine/renderers/Indicator/zones.ts +9 -2
- package/src/engine/renderers/extremaMarkers.ts +0 -24
- package/src/engine/renderers/subVolume.ts +3 -0
- package/src/engine/subPaneManager.ts +34 -274
- package/src/semantic/__tests__/controller.test.ts +84 -0
- package/src/semantic/controller.ts +69 -65
- package/src/version.ts +1 -1
|
@@ -2,10 +2,11 @@ import { resolveThemeColors } from '../../../tokens'
|
|
|
2
2
|
import type { RendererPluginWithHost, RenderContext, PluginHost } from '../../../plugin'
|
|
3
3
|
import { RENDERER_PRIORITY } from '../../../plugin'
|
|
4
4
|
import type { StructureRenderState } from '../../indicators/structureState'
|
|
5
|
-
import { createStructureStateKey } from '../../indicators/structureState'
|
|
5
|
+
import { createStructureStateKey, EMPTY_STRUCTURE_STATE } from '../../indicators/structureState'
|
|
6
6
|
import { Indicator } from '../../indicators/indicatorDefinitionRegistry'
|
|
7
|
+
import { createFixedUnitVisibleStateComposer } from '../../indicators/visibleStateComposers'
|
|
7
8
|
import { resolveStateKey } from '../../indicators/indicatorMetadata'
|
|
8
|
-
import type { IndicatorScheduler } from '../../indicators/scheduler'
|
|
9
|
+
import type { IndicatorScheduler, StructureSchedulerConfig } from '../../indicators/scheduler'
|
|
9
10
|
|
|
10
11
|
const LABEL_FONT = '11px sans-serif'
|
|
11
12
|
|
|
@@ -117,6 +118,12 @@ export function createStructureRendererPlugin(options: { paneId?: string } = {})
|
|
|
117
118
|
defaultPaneId: 'sub_Structure',
|
|
118
119
|
paneIdField: 'structurePaneId',
|
|
119
120
|
allowMainPane: true,
|
|
121
|
+
mainPane: { rendererName: 'structure_main', toActiveConfig: (params, active) => ({ ...params, showSwingLabels: active, showBOS: active, showCHOCH: active }) },
|
|
122
|
+
scale: { indicatorKey: 'structure', label: 'Structure', decimals: 2 },
|
|
123
|
+
visibleState: { compose: createFixedUnitVisibleStateComposer('structure', EMPTY_STRUCTURE_STATE) },
|
|
124
|
+
updateConfig: (scheduler, params, paneId) => {
|
|
125
|
+
(scheduler as IndicatorScheduler).updateStructureConfig(params as Partial<StructureSchedulerConfig>, paneId)
|
|
126
|
+
},
|
|
120
127
|
applyResult: (host, state, paneId) => {
|
|
121
128
|
host.setSharedState(createStructureStateKey(paneId), state as any, 'indicator_scheduler')
|
|
122
129
|
},
|
|
@@ -31,7 +31,7 @@ export interface SubPaneIndicatorConfig {
|
|
|
31
31
|
) => TitleInfo | null
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
export const SUB_PANE_INDICATOR_CONFIGS: Record<
|
|
34
|
+
export const SUB_PANE_INDICATOR_CONFIGS: Record<string, SubPaneIndicatorConfig> = {
|
|
35
35
|
VOLUME: {
|
|
36
36
|
defaultParams: {},
|
|
37
37
|
getTitleInfo: () => ({ name: 'VOL', params: [], values: [] }),
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import type { RendererPluginWithHost, RenderContext, PluginHost } from '../../../plugin'
|
|
2
2
|
import { RENDERER_PRIORITY } from '../../../plugin'
|
|
3
3
|
import type { SuperTrendRenderState } from '../../indicators/supertrendState'
|
|
4
|
-
import { createSuperTrendStateKey } from '../../indicators/supertrendState'
|
|
4
|
+
import { createSuperTrendStateKey, EMPTY_SUPERTREND_STATE } from '../../indicators/supertrendState'
|
|
5
5
|
import { Indicator } from '../../indicators/indicatorDefinitionRegistry'
|
|
6
6
|
import { resolveStateKey } from '../../indicators/indicatorMetadata'
|
|
7
|
-
import type { IndicatorScheduler } from '../../indicators/scheduler'
|
|
7
|
+
import type { IndicatorScheduler, SuperTrendSchedulerConfig } from '../../indicators/scheduler'
|
|
8
|
+
import { createValuePointVisibleStateComposer } from '../../indicators/visibleStateComposers'
|
|
8
9
|
|
|
9
10
|
const ST_UP_COLOR = '#22c55e'
|
|
10
11
|
const ST_DOWN_COLOR = '#ef4444'
|
|
@@ -106,6 +107,12 @@ export function createSuperTrendRendererPlugin(options: SuperTrendRendererOption
|
|
|
106
107
|
defaultPaneId: 'sub_SuperTrend',
|
|
107
108
|
paneIdField: 'supertrendPaneId',
|
|
108
109
|
allowMainPane: true,
|
|
110
|
+
mainPane: { rendererName: 'supertrend_main', toActiveConfig: (params, active) => ({ ...params, showSuperTrend: active }) },
|
|
111
|
+
scale: { indicatorKey: 'supertrend', label: 'SuperTrend', decimals: 2 },
|
|
112
|
+
visibleState: { compose: createValuePointVisibleStateComposer('supertrend', EMPTY_SUPERTREND_STATE, ['value']) },
|
|
113
|
+
updateConfig: (scheduler, params, paneId) => {
|
|
114
|
+
(scheduler as IndicatorScheduler).updateSuperTrendConfig(params as Partial<SuperTrendSchedulerConfig>, paneId)
|
|
115
|
+
},
|
|
109
116
|
applyResult: (host, state, paneId) => {
|
|
110
117
|
host.setSharedState(createSuperTrendStateKey(paneId), state as any, 'indicator_scheduler')
|
|
111
118
|
},
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import type { RendererPluginWithHost, RenderContext, PluginHost } from '../../../plugin'
|
|
2
2
|
import { RENDERER_PRIORITY } from '../../../plugin'
|
|
3
3
|
import type { TEMARenderState } from '../../indicators/temaState'
|
|
4
|
-
import { createTEMAStateKey } from '../../indicators/temaState'
|
|
4
|
+
import { createTEMAStateKey, EMPTY_TEMA_STATE } from '../../indicators/temaState'
|
|
5
5
|
import { Indicator } from '../../indicators/indicatorDefinitionRegistry'
|
|
6
6
|
import { resolveStateKey } from '../../indicators/indicatorMetadata'
|
|
7
|
-
import
|
|
7
|
+
import { createSparseVisibleStateComposer } from '../../indicators/visibleStateComposers'
|
|
8
|
+
import type { IndicatorScheduler, TEMASchedulerConfig } from '../../indicators/scheduler'
|
|
8
9
|
|
|
9
10
|
const TEMA_COLOR = '#d946ef'
|
|
10
11
|
|
|
@@ -127,6 +128,12 @@ export function createTEMARendererPlugin(options: TEMARendererOptions = {}): Ren
|
|
|
127
128
|
defaultPaneId: 'main',
|
|
128
129
|
paneIdField: 'temaPaneId',
|
|
129
130
|
allowMainPane: true,
|
|
131
|
+
mainPane: { rendererName: 'tema_main', toActiveConfig: (params, active) => ({ ...params, showTEMA: active }) },
|
|
132
|
+
visibleState: { compose: createSparseVisibleStateComposer('tema', EMPTY_TEMA_STATE) },
|
|
133
|
+
scale: { indicatorKey: 'tema', label: 'TEMA', decimals: 2 },
|
|
134
|
+
updateConfig: (scheduler, params, paneId) => {
|
|
135
|
+
(scheduler as IndicatorScheduler).updateTEMAConfig(params as Partial<TEMASchedulerConfig>, paneId)
|
|
136
|
+
},
|
|
130
137
|
applyResult: (host, state, paneId) => {
|
|
131
138
|
host.setSharedState(createTEMAStateKey(paneId), state as any, 'indicator_scheduler')
|
|
132
139
|
},
|
|
@@ -2,9 +2,11 @@ import type { RendererPluginWithHost, RenderContext, PluginHost } from '../../..
|
|
|
2
2
|
import { RENDERER_PRIORITY } from '../../../plugin'
|
|
3
3
|
import type { TRIXRenderState } from '../../indicators/trixState'
|
|
4
4
|
import { createTRIXStateKey } from '../../indicators/trixState'
|
|
5
|
+
import { EMPTY_TRIX_STATE } from '../../indicators/trixState'
|
|
6
|
+
import { createDualSparseVisibleStateComposer } from '../../indicators/visibleStateComposers'
|
|
5
7
|
import { Indicator } from '../../indicators/indicatorDefinitionRegistry'
|
|
6
8
|
import { resolveStateKey } from '../../indicators/indicatorMetadata'
|
|
7
|
-
import type { IndicatorScheduler } from '../../indicators/scheduler'
|
|
9
|
+
import type { IndicatorScheduler, TRIXSchedulerConfig } from '../../indicators/scheduler'
|
|
8
10
|
|
|
9
11
|
const TRIX_COLOR = '#e11d48'
|
|
10
12
|
const SIGNAL_COLOR = '#f59e0b'
|
|
@@ -149,6 +151,11 @@ function drawLine(ctx: CanvasRenderingContext2D, pts: Point[], color: string): v
|
|
|
149
151
|
stateKey: createTRIXStateKey,
|
|
150
152
|
defaultPaneId: 'sub_TRIX',
|
|
151
153
|
paneIdField: 'trixPaneId',
|
|
154
|
+
scale: { indicatorKey: 'trix', label: 'TRIX', decimals: 6 },
|
|
155
|
+
updateConfig: (scheduler, params, paneId) => {
|
|
156
|
+
(scheduler as IndicatorScheduler).updateTRIXConfig(params as Partial<TRIXSchedulerConfig>, paneId)
|
|
157
|
+
},
|
|
158
|
+
visibleState: { compose: createDualSparseVisibleStateComposer('trix', EMPTY_TRIX_STATE) },
|
|
152
159
|
applyResult: (host, state, paneId) => {
|
|
153
160
|
host.setSharedState(createTRIXStateKey(paneId), state as any, 'indicator_scheduler')
|
|
154
161
|
},
|
|
@@ -2,9 +2,11 @@ import type { RendererPluginWithHost, RenderContext, PluginHost } from '../../..
|
|
|
2
2
|
import { RENDERER_PRIORITY } from '../../../plugin'
|
|
3
3
|
import type { VMARenderState } from '../../indicators/vmaState'
|
|
4
4
|
import { createVMAStateKey } from '../../indicators/vmaState'
|
|
5
|
+
import { EMPTY_VMA_STATE } from '../../indicators/vmaState'
|
|
6
|
+
import { createNonNegativeSparseVisibleStateComposer } from '../../indicators/visibleStateComposers'
|
|
5
7
|
import { Indicator } from '../../indicators/indicatorDefinitionRegistry'
|
|
6
8
|
import { resolveStateKey } from '../../indicators/indicatorMetadata'
|
|
7
|
-
import type { IndicatorScheduler } from '../../indicators/scheduler'
|
|
9
|
+
import type { IndicatorScheduler, VMASchedulerConfig } from '../../indicators/scheduler'
|
|
8
10
|
|
|
9
11
|
const VMA_COLOR = '#0ea5e9'
|
|
10
12
|
|
|
@@ -115,6 +117,11 @@ export function createVMARendererPlugin(options: { paneId?: string } = {}): Rend
|
|
|
115
117
|
stateKey: createVMAStateKey,
|
|
116
118
|
defaultPaneId: 'sub_VMA',
|
|
117
119
|
paneIdField: 'vmaPaneId',
|
|
120
|
+
scale: { indicatorKey: 'vma', label: 'VMA', decimals: 0 },
|
|
121
|
+
updateConfig: (scheduler, params, paneId) => {
|
|
122
|
+
(scheduler as IndicatorScheduler).updateVMAConfig(params as Partial<VMASchedulerConfig>, paneId)
|
|
123
|
+
},
|
|
124
|
+
visibleState: { compose: createNonNegativeSparseVisibleStateComposer('vma', EMPTY_VMA_STATE) },
|
|
118
125
|
applyResult: (host, state, paneId) => {
|
|
119
126
|
host.setSharedState(createVMAStateKey(paneId), state as any, 'indicator_scheduler')
|
|
120
127
|
},
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import type { RendererPluginWithHost, RenderContext, PluginHost } from '../../../plugin'
|
|
2
2
|
import { RENDERER_PRIORITY } from '../../../plugin'
|
|
3
3
|
import type { VolumeProfileRenderState } from '../../indicators/volumeProfileState'
|
|
4
|
-
import { createVolumeProfileStateKey } from '../../indicators/volumeProfileState'
|
|
4
|
+
import { createVolumeProfileStateKey, EMPTY_VOLUME_PROFILE_STATE } from '../../indicators/volumeProfileState'
|
|
5
5
|
import { Indicator } from '../../indicators/indicatorDefinitionRegistry'
|
|
6
|
+
import { createVolumeProfileVisibleStateComposer } from '../../indicators/visibleStateComposers'
|
|
6
7
|
import { resolveStateKey } from '../../indicators/indicatorMetadata'
|
|
7
|
-
import type { IndicatorScheduler } from '../../indicators/scheduler'
|
|
8
|
+
import type { IndicatorScheduler, VolumeProfileSchedulerConfig } from '../../indicators/scheduler'
|
|
8
9
|
|
|
9
10
|
const BAR_FILL = 'rgba(99, 102, 241, 0.35)'
|
|
10
11
|
const POC_COLOR = '#f59e0b'
|
|
@@ -116,6 +117,11 @@ export function createVolumeProfileRendererPlugin(options: { paneId?: string } =
|
|
|
116
117
|
stateKey: createVolumeProfileStateKey,
|
|
117
118
|
defaultPaneId: 'sub_VolumeProfile',
|
|
118
119
|
paneIdField: 'volumeProfilePaneId',
|
|
120
|
+
scale: { indicatorKey: 'volumeProfile', label: 'VP', decimals: 0 },
|
|
121
|
+
visibleState: { compose: createVolumeProfileVisibleStateComposer('volumeProfile', EMPTY_VOLUME_PROFILE_STATE) },
|
|
122
|
+
updateConfig: (scheduler, params, paneId) => {
|
|
123
|
+
(scheduler as IndicatorScheduler).updateVolumeProfileConfig(params as Partial<VolumeProfileSchedulerConfig>, paneId)
|
|
124
|
+
},
|
|
119
125
|
applyResult: (host, state, paneId) => {
|
|
120
126
|
host.setSharedState(createVolumeProfileStateKey(paneId), state as any, 'indicator_scheduler')
|
|
121
127
|
},
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import type { RendererPluginWithHost, RenderContext, PluginHost } from '../../../plugin'
|
|
2
2
|
import { RENDERER_PRIORITY } from '../../../plugin'
|
|
3
3
|
import type { VWAPRenderState } from '../../indicators/vwapState'
|
|
4
|
-
import { createVWAPStateKey } from '../../indicators/vwapState'
|
|
4
|
+
import { createVWAPStateKey, EMPTY_VWAP_STATE } from '../../indicators/vwapState'
|
|
5
5
|
import { Indicator } from '../../indicators/indicatorDefinitionRegistry'
|
|
6
6
|
import { resolveStateKey } from '../../indicators/indicatorMetadata'
|
|
7
|
-
import
|
|
7
|
+
import { createSparseVisibleStateComposer } from '../../indicators/visibleStateComposers'
|
|
8
|
+
import type { IndicatorScheduler, VWAPSchedulerConfig } from '../../indicators/scheduler'
|
|
8
9
|
|
|
9
10
|
const VWAP_COLOR = '#ec4899'
|
|
10
11
|
|
|
@@ -114,6 +115,11 @@ export function createVWAPRendererPlugin(options: { paneId?: string } = {}): Ren
|
|
|
114
115
|
stateKey: createVWAPStateKey,
|
|
115
116
|
defaultPaneId: 'sub_VWAP',
|
|
116
117
|
paneIdField: 'vwapPaneId',
|
|
118
|
+
visibleState: { compose: createSparseVisibleStateComposer('vwap', EMPTY_VWAP_STATE) },
|
|
119
|
+
scale: { indicatorKey: 'vwap', label: 'VWAP', decimals: 2 },
|
|
120
|
+
updateConfig: (scheduler, params, paneId) => {
|
|
121
|
+
(scheduler as IndicatorScheduler).updateVWAPConfig(params as Partial<VWAPSchedulerConfig>, paneId)
|
|
122
|
+
},
|
|
117
123
|
applyResult: (host, state, paneId) => {
|
|
118
124
|
host.setSharedState(createVWAPStateKey(paneId), state as any, 'indicator_scheduler')
|
|
119
125
|
},
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import type { RendererPluginWithHost, RenderContext, PluginHost } from '../../../plugin'
|
|
2
2
|
import { RENDERER_PRIORITY } from '../../../plugin'
|
|
3
3
|
import type { WMARenderState } from '../../indicators/wmaState'
|
|
4
|
-
import { createWMAStateKey } from '../../indicators/wmaState'
|
|
4
|
+
import { createWMAStateKey, EMPTY_WMA_STATE } from '../../indicators/wmaState'
|
|
5
5
|
import { Indicator } from '../../indicators/indicatorDefinitionRegistry'
|
|
6
6
|
import { resolveStateKey } from '../../indicators/indicatorMetadata'
|
|
7
|
-
import
|
|
7
|
+
import { createSparseVisibleStateComposer } from '../../indicators/visibleStateComposers'
|
|
8
|
+
import type { IndicatorScheduler, WMASchedulerConfig } from '../../indicators/scheduler'
|
|
8
9
|
|
|
9
10
|
const WMA_COLOR = '#10b981'
|
|
10
11
|
|
|
@@ -127,6 +128,12 @@ export function createWMARendererPlugin(options: WMARendererOptions = {}): Rende
|
|
|
127
128
|
defaultPaneId: 'main',
|
|
128
129
|
paneIdField: 'wmaPaneId',
|
|
129
130
|
allowMainPane: true,
|
|
131
|
+
mainPane: { rendererName: 'wma_main', toActiveConfig: (params, active) => ({ ...params, showWMA: active }) },
|
|
132
|
+
visibleState: { compose: createSparseVisibleStateComposer('wma', EMPTY_WMA_STATE) },
|
|
133
|
+
scale: { indicatorKey: 'wma', label: 'WMA', decimals: 2 },
|
|
134
|
+
updateConfig: (scheduler, params, paneId) => {
|
|
135
|
+
(scheduler as IndicatorScheduler).updateWMAConfig(params as Partial<WMASchedulerConfig>, paneId)
|
|
136
|
+
},
|
|
130
137
|
applyResult: (host, state, paneId) => {
|
|
131
138
|
host.setSharedState(createWMAStateKey(paneId), state as any, 'indicator_scheduler')
|
|
132
139
|
},
|
|
@@ -3,10 +3,12 @@ import { RENDERER_PRIORITY } from '../../../plugin'
|
|
|
3
3
|
import { resolveThemeColors } from '../../../tokens'
|
|
4
4
|
import { alignToPhysicalPixelCenter } from '../../draw/pixelAlign'
|
|
5
5
|
import type { WMSRRenderState } from '../../indicators/wmsrState'
|
|
6
|
-
import { createWMSRStateKey } from '../../indicators/wmsrState'
|
|
6
|
+
import { createWMSRStateKey, EMPTY_WMSR_STATE } from '../../indicators/wmsrState'
|
|
7
7
|
import { Indicator } from '../../indicators/indicatorDefinitionRegistry'
|
|
8
|
+
import { createFixedRangeSparseVisibleStateComposer } from '../../indicators/visibleStateComposers'
|
|
8
9
|
import { resolveStateKey } from '../../indicators/indicatorMetadata'
|
|
9
|
-
import type { IndicatorScheduler } from '../../indicators/scheduler'
|
|
10
|
+
import type { IndicatorScheduler, WMSRSchedulerConfig } from '../../indicators/scheduler'
|
|
11
|
+
import { createWmsrScaleRendererPlugin } from './scale/wmsr_scale'
|
|
10
12
|
|
|
11
13
|
type LinePoint = { x: number; y: number }
|
|
12
14
|
|
|
@@ -320,6 +322,11 @@ export function getWMSRTitleInfo(
|
|
|
320
322
|
stateKey: createWMSRStateKey,
|
|
321
323
|
defaultPaneId: 'sub_WMSR',
|
|
322
324
|
paneIdField: 'wmsrPaneId',
|
|
325
|
+
visibleState: { compose: createFixedRangeSparseVisibleStateComposer('wmsr', EMPTY_WMSR_STATE) },
|
|
326
|
+
scaleRendererFactory: createWmsrScaleRendererPlugin,
|
|
327
|
+
updateConfig: (scheduler, params, paneId) => {
|
|
328
|
+
(scheduler as IndicatorScheduler).updateWMSRConfig(params as Partial<WMSRSchedulerConfig>, paneId)
|
|
329
|
+
},
|
|
323
330
|
applyResult: (host, state, paneId) => {
|
|
324
331
|
host.setSharedState(createWMSRStateKey(paneId), state as any, 'indicator_scheduler')
|
|
325
332
|
},
|
|
@@ -2,10 +2,11 @@ import { resolveThemeColors } from '../../../tokens'
|
|
|
2
2
|
import type { RendererPluginWithHost, RenderContext, PluginHost } from '../../../plugin'
|
|
3
3
|
import { RENDERER_PRIORITY } from '../../../plugin'
|
|
4
4
|
import type { ZonesRenderState } from '../../indicators/zonesState'
|
|
5
|
-
import { createZonesStateKey } from '../../indicators/zonesState'
|
|
5
|
+
import { createZonesStateKey, EMPTY_ZONES_STATE } from '../../indicators/zonesState'
|
|
6
6
|
import { Indicator } from '../../indicators/indicatorDefinitionRegistry'
|
|
7
|
+
import { createFixedUnitVisibleStateComposer } from '../../indicators/visibleStateComposers'
|
|
7
8
|
import { resolveStateKey } from '../../indicators/indicatorMetadata'
|
|
8
|
-
import type { IndicatorScheduler } from '../../indicators/scheduler'
|
|
9
|
+
import type { IndicatorScheduler, ZonesSchedulerConfig } from '../../indicators/scheduler'
|
|
9
10
|
|
|
10
11
|
function getZonesStateKey(host: PluginHost | null, paneId: string): string | null {
|
|
11
12
|
const scheduler = host?.getService<IndicatorScheduler>('indicatorScheduler')
|
|
@@ -96,6 +97,12 @@ export function createZonesRendererPlugin(options: { paneId?: string } = {}): Re
|
|
|
96
97
|
defaultPaneId: 'main',
|
|
97
98
|
paneIdField: 'zonesPaneId',
|
|
98
99
|
allowMainPane: true,
|
|
100
|
+
mainPane: { rendererName: 'zones_main', toActiveConfig: (params, active) => ({ ...params, showFVG: active, showOB: active, showFilledZones: active }) },
|
|
101
|
+
scale: { indicatorKey: 'zones', label: 'Zones', decimals: 2 },
|
|
102
|
+
visibleState: { compose: createFixedUnitVisibleStateComposer('zones', EMPTY_ZONES_STATE) },
|
|
103
|
+
updateConfig: (scheduler, params, paneId) => {
|
|
104
|
+
(scheduler as IndicatorScheduler).updateZonesConfig(params as Partial<ZonesSchedulerConfig>, paneId)
|
|
105
|
+
},
|
|
99
106
|
applyResult: (host, state, paneId) => {
|
|
100
107
|
host.setSharedState(createZonesStateKey(paneId), state as any, 'indicator_scheduler')
|
|
101
108
|
},
|
|
@@ -144,30 +144,6 @@ export function createExtremaMarkersRendererPlugin(): RendererPlugin {
|
|
|
144
144
|
return kLineCenters[localIdx]!
|
|
145
145
|
}
|
|
146
146
|
|
|
147
|
-
if (!context.yAxisLabels) context.yAxisLabels = []
|
|
148
|
-
|
|
149
|
-
context.yAxisLabels.push({
|
|
150
|
-
dataIndex: maxIndex,
|
|
151
|
-
price: max,
|
|
152
|
-
y: pane.yAxis.priceToY(max),
|
|
153
|
-
style: {
|
|
154
|
-
bgColor: colors.lastPriceLabel.bg,
|
|
155
|
-
borderColor: colors.price.lastPrice,
|
|
156
|
-
textColor: colors.price.lastPrice,
|
|
157
|
-
}
|
|
158
|
-
})
|
|
159
|
-
|
|
160
|
-
context.yAxisLabels.push({
|
|
161
|
-
dataIndex: minIndex,
|
|
162
|
-
price: min,
|
|
163
|
-
y: pane.yAxis.priceToY(min),
|
|
164
|
-
style: {
|
|
165
|
-
bgColor: colors.lastPriceLabel.bg,
|
|
166
|
-
borderColor: colors.price.lastPrice,
|
|
167
|
-
textColor: colors.price.lastPrice,
|
|
168
|
-
}
|
|
169
|
-
})
|
|
170
|
-
|
|
171
147
|
// 收集所有 marker 数据
|
|
172
148
|
const markers: MarkerData[] = []
|
|
173
149
|
|
|
@@ -6,6 +6,7 @@ import { resolveThemeColors } from '../../tokens'
|
|
|
6
6
|
import { Indicator } from '../indicators/indicatorDefinitionRegistry'
|
|
7
7
|
import { resolveStateKey } from '../indicators/indicatorMetadata'
|
|
8
8
|
import type { IndicatorScheduler } from '../indicators/scheduler'
|
|
9
|
+
import { createVolumeScaleRendererPlugin } from './Indicator/scale/volume_scale'
|
|
9
10
|
|
|
10
11
|
export interface VolumeRendererOptions {
|
|
11
12
|
/** 目标 pane ID(默认 'sub') */
|
|
@@ -233,6 +234,8 @@ function judgeColor(dayData: KLineData, upColor: string, downColor: string, neut
|
|
|
233
234
|
category: 'volume',
|
|
234
235
|
stateKey: (paneId: string) => createIndicatorStateKey('volume', paneId),
|
|
235
236
|
defaultPaneId: 'sub',
|
|
237
|
+
scaleRendererFactory: createVolumeScaleRendererPlugin,
|
|
238
|
+
updateConfig: () => {},
|
|
236
239
|
})
|
|
237
240
|
class VolumeIndicatorDefinition {
|
|
238
241
|
static rendererFactory = createVolumeRendererPlugin
|