@363045841yyt/klinechart-core 0.7.12-alpha.1 → 0.7.13

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.
Files changed (277) hide show
  1. package/dist/controllers/createIndicatorSelectorController.d.ts.map +1 -1
  2. package/dist/controllers/createIndicatorSelectorController.js +4 -6
  3. package/dist/controllers/createIndicatorSelectorController.js.map +1 -1
  4. package/dist/controllers/index.d.ts +0 -1
  5. package/dist/controllers/index.d.ts.map +1 -1
  6. package/dist/controllers/index.js +0 -1
  7. package/dist/controllers/index.js.map +1 -1
  8. package/dist/engine/chart.d.ts +6 -2
  9. package/dist/engine/chart.d.ts.map +1 -1
  10. package/dist/engine/chart.js +26 -23
  11. package/dist/engine/chart.js.map +1 -1
  12. package/dist/engine/indicators/indicator.worker.js +32 -4
  13. package/dist/engine/indicators/indicator.worker.js.map +1 -1
  14. package/dist/engine/indicators/indicatorDefinitionRegistry.d.ts +5 -3
  15. package/dist/engine/indicators/indicatorDefinitionRegistry.d.ts.map +1 -1
  16. package/dist/engine/indicators/indicatorDefinitionRegistry.js +26 -1
  17. package/dist/engine/indicators/indicatorDefinitionRegistry.js.map +1 -1
  18. package/dist/engine/indicators/indicatorMetadata.d.ts +54 -1
  19. package/dist/engine/indicators/indicatorMetadata.d.ts.map +1 -1
  20. package/dist/engine/indicators/indicatorMetadata.js.map +1 -1
  21. package/dist/engine/indicators/indicatorRuntime.d.ts +12 -117
  22. package/dist/engine/indicators/indicatorRuntime.d.ts.map +1 -1
  23. package/dist/engine/indicators/indicatorRuntime.js +124 -1308
  24. package/dist/engine/indicators/indicatorRuntime.js.map +1 -1
  25. package/dist/engine/indicators/scheduler.d.ts +19 -143
  26. package/dist/engine/indicators/scheduler.d.ts.map +1 -1
  27. package/dist/engine/indicators/scheduler.js +81 -434
  28. package/dist/engine/indicators/scheduler.js.map +1 -1
  29. package/dist/engine/indicators/stateComposer.d.ts.map +1 -1
  30. package/dist/engine/indicators/stateComposer.js +15 -47
  31. package/dist/engine/indicators/stateComposer.js.map +1 -1
  32. package/dist/engine/indicators/workerProtocol.d.ts +12 -36
  33. package/dist/engine/indicators/workerProtocol.d.ts.map +1 -1
  34. package/dist/engine/indicators/workerProtocol.js.map +1 -1
  35. package/dist/engine/renderers/Indicator/atr.d.ts +2 -1
  36. package/dist/engine/renderers/Indicator/atr.d.ts.map +1 -1
  37. package/dist/engine/renderers/Indicator/atr.js +11 -9
  38. package/dist/engine/renderers/Indicator/atr.js.map +1 -1
  39. package/dist/engine/renderers/Indicator/boll.d.ts +4 -1
  40. package/dist/engine/renderers/Indicator/boll.d.ts.map +1 -1
  41. package/dist/engine/renderers/Indicator/boll.js +24 -10
  42. package/dist/engine/renderers/Indicator/boll.js.map +1 -1
  43. package/dist/engine/renderers/Indicator/cci.d.ts +2 -1
  44. package/dist/engine/renderers/Indicator/cci.d.ts.map +1 -1
  45. package/dist/engine/renderers/Indicator/cci.js +12 -10
  46. package/dist/engine/renderers/Indicator/cci.js.map +1 -1
  47. package/dist/engine/renderers/Indicator/chaikinVol.d.ts +4 -1
  48. package/dist/engine/renderers/Indicator/chaikinVol.d.ts.map +1 -1
  49. package/dist/engine/renderers/Indicator/chaikinVol.js +21 -7
  50. package/dist/engine/renderers/Indicator/chaikinVol.js.map +1 -1
  51. package/dist/engine/renderers/Indicator/cmf.d.ts +4 -1
  52. package/dist/engine/renderers/Indicator/cmf.d.ts.map +1 -1
  53. package/dist/engine/renderers/Indicator/cmf.js +20 -7
  54. package/dist/engine/renderers/Indicator/cmf.js.map +1 -1
  55. package/dist/engine/renderers/Indicator/dema.d.ts +2 -0
  56. package/dist/engine/renderers/Indicator/dema.d.ts.map +1 -1
  57. package/dist/engine/renderers/Indicator/dema.js +19 -8
  58. package/dist/engine/renderers/Indicator/dema.js.map +1 -1
  59. package/dist/engine/renderers/Indicator/donchian.d.ts +4 -1
  60. package/dist/engine/renderers/Indicator/donchian.d.ts.map +1 -1
  61. package/dist/engine/renderers/Indicator/donchian.js +20 -8
  62. package/dist/engine/renderers/Indicator/donchian.js.map +1 -1
  63. package/dist/engine/renderers/Indicator/ene.d.ts +12 -1
  64. package/dist/engine/renderers/Indicator/ene.d.ts.map +1 -1
  65. package/dist/engine/renderers/Indicator/ene.js +25 -11
  66. package/dist/engine/renderers/Indicator/ene.js.map +1 -1
  67. package/dist/engine/renderers/Indicator/expma.d.ts +4 -1
  68. package/dist/engine/renderers/Indicator/expma.d.ts.map +1 -1
  69. package/dist/engine/renderers/Indicator/expma.js +22 -9
  70. package/dist/engine/renderers/Indicator/expma.js.map +1 -1
  71. package/dist/engine/renderers/Indicator/fastk.d.ts +2 -1
  72. package/dist/engine/renderers/Indicator/fastk.d.ts.map +1 -1
  73. package/dist/engine/renderers/Indicator/fastk.js +12 -10
  74. package/dist/engine/renderers/Indicator/fastk.js.map +1 -1
  75. package/dist/engine/renderers/Indicator/fib.d.ts +2 -0
  76. package/dist/engine/renderers/Indicator/fib.d.ts.map +1 -1
  77. package/dist/engine/renderers/Indicator/fib.js +26 -8
  78. package/dist/engine/renderers/Indicator/fib.js.map +1 -1
  79. package/dist/engine/renderers/Indicator/hma.d.ts +2 -0
  80. package/dist/engine/renderers/Indicator/hma.d.ts.map +1 -1
  81. package/dist/engine/renderers/Indicator/hma.js +19 -8
  82. package/dist/engine/renderers/Indicator/hma.js.map +1 -1
  83. package/dist/engine/renderers/Indicator/hv.d.ts +4 -1
  84. package/dist/engine/renderers/Indicator/hv.d.ts.map +1 -1
  85. package/dist/engine/renderers/Indicator/hv.js +18 -8
  86. package/dist/engine/renderers/Indicator/hv.js.map +1 -1
  87. package/dist/engine/renderers/Indicator/ichimoku.d.ts +4 -1
  88. package/dist/engine/renderers/Indicator/ichimoku.d.ts.map +1 -1
  89. package/dist/engine/renderers/Indicator/ichimoku.js +27 -8
  90. package/dist/engine/renderers/Indicator/ichimoku.js.map +1 -1
  91. package/dist/engine/renderers/Indicator/index.d.ts +27 -28
  92. package/dist/engine/renderers/Indicator/index.d.ts.map +1 -1
  93. package/dist/engine/renderers/Indicator/index.js +27 -28
  94. package/dist/engine/renderers/Indicator/index.js.map +1 -1
  95. package/dist/engine/renderers/Indicator/kama.d.ts +2 -0
  96. package/dist/engine/renderers/Indicator/kama.d.ts.map +1 -1
  97. package/dist/engine/renderers/Indicator/kama.js +19 -8
  98. package/dist/engine/renderers/Indicator/kama.js.map +1 -1
  99. package/dist/engine/renderers/Indicator/keltner.d.ts +4 -1
  100. package/dist/engine/renderers/Indicator/keltner.d.ts.map +1 -1
  101. package/dist/engine/renderers/Indicator/keltner.js +20 -8
  102. package/dist/engine/renderers/Indicator/keltner.js.map +1 -1
  103. package/dist/engine/renderers/Indicator/kst.d.ts +2 -1
  104. package/dist/engine/renderers/Indicator/kst.d.ts.map +1 -1
  105. package/dist/engine/renderers/Indicator/kst.js +13 -11
  106. package/dist/engine/renderers/Indicator/kst.js.map +1 -1
  107. package/dist/engine/renderers/Indicator/ma.d.ts +4 -1
  108. package/dist/engine/renderers/Indicator/ma.d.ts.map +1 -1
  109. package/dist/engine/renderers/Indicator/ma.js +36 -8
  110. package/dist/engine/renderers/Indicator/ma.js.map +1 -1
  111. package/dist/engine/renderers/Indicator/macd.d.ts +1 -1
  112. package/dist/engine/renderers/Indicator/macd.d.ts.map +1 -1
  113. package/dist/engine/renderers/Indicator/macd.js +9 -10
  114. package/dist/engine/renderers/Indicator/macd.js.map +1 -1
  115. package/dist/engine/renderers/Indicator/mainIndicatorLegend.d.ts.map +1 -1
  116. package/dist/engine/renderers/Indicator/mainIndicatorLegend.js +38 -136
  117. package/dist/engine/renderers/Indicator/mainIndicatorLegend.js.map +1 -1
  118. package/dist/engine/renderers/Indicator/mfi.d.ts +4 -1
  119. package/dist/engine/renderers/Indicator/mfi.d.ts.map +1 -1
  120. package/dist/engine/renderers/Indicator/mfi.js +20 -7
  121. package/dist/engine/renderers/Indicator/mfi.js.map +1 -1
  122. package/dist/engine/renderers/Indicator/mom.d.ts +2 -1
  123. package/dist/engine/renderers/Indicator/mom.d.ts.map +1 -1
  124. package/dist/engine/renderers/Indicator/mom.js +12 -10
  125. package/dist/engine/renderers/Indicator/mom.js.map +1 -1
  126. package/dist/engine/renderers/Indicator/obv.d.ts +4 -1
  127. package/dist/engine/renderers/Indicator/obv.d.ts.map +1 -1
  128. package/dist/engine/renderers/Indicator/obv.js +19 -7
  129. package/dist/engine/renderers/Indicator/obv.js.map +1 -1
  130. package/dist/engine/renderers/Indicator/parkinson.d.ts +4 -1
  131. package/dist/engine/renderers/Indicator/parkinson.d.ts.map +1 -1
  132. package/dist/engine/renderers/Indicator/parkinson.js +18 -8
  133. package/dist/engine/renderers/Indicator/parkinson.js.map +1 -1
  134. package/dist/engine/renderers/Indicator/pivot.d.ts +2 -0
  135. package/dist/engine/renderers/Indicator/pivot.d.ts.map +1 -1
  136. package/dist/engine/renderers/Indicator/pivot.js +43 -8
  137. package/dist/engine/renderers/Indicator/pivot.js.map +1 -1
  138. package/dist/engine/renderers/Indicator/pvt.d.ts +4 -1
  139. package/dist/engine/renderers/Indicator/pvt.d.ts.map +1 -1
  140. package/dist/engine/renderers/Indicator/pvt.js +19 -7
  141. package/dist/engine/renderers/Indicator/pvt.js.map +1 -1
  142. package/dist/engine/renderers/Indicator/roc.d.ts +4 -1
  143. package/dist/engine/renderers/Indicator/roc.d.ts.map +1 -1
  144. package/dist/engine/renderers/Indicator/roc.js +20 -7
  145. package/dist/engine/renderers/Indicator/roc.js.map +1 -1
  146. package/dist/engine/renderers/Indicator/rsi.d.ts +2 -1
  147. package/dist/engine/renderers/Indicator/rsi.d.ts.map +1 -1
  148. package/dist/engine/renderers/Indicator/rsi.js +14 -11
  149. package/dist/engine/renderers/Indicator/rsi.js.map +1 -1
  150. package/dist/engine/renderers/Indicator/sar.d.ts +4 -1
  151. package/dist/engine/renderers/Indicator/sar.d.ts.map +1 -1
  152. package/dist/engine/renderers/Indicator/sar.js +18 -8
  153. package/dist/engine/renderers/Indicator/sar.js.map +1 -1
  154. package/dist/engine/renderers/Indicator/stoch.d.ts +2 -1
  155. package/dist/engine/renderers/Indicator/stoch.d.ts.map +1 -1
  156. package/dist/engine/renderers/Indicator/stoch.js +10 -11
  157. package/dist/engine/renderers/Indicator/stoch.js.map +1 -1
  158. package/dist/engine/renderers/Indicator/structure.d.ts +4 -1
  159. package/dist/engine/renderers/Indicator/structure.d.ts.map +1 -1
  160. package/dist/engine/renderers/Indicator/structure.js +21 -8
  161. package/dist/engine/renderers/Indicator/structure.js.map +1 -1
  162. package/dist/engine/renderers/Indicator/supertrend.d.ts +4 -1
  163. package/dist/engine/renderers/Indicator/supertrend.d.ts.map +1 -1
  164. package/dist/engine/renderers/Indicator/supertrend.js +18 -8
  165. package/dist/engine/renderers/Indicator/supertrend.js.map +1 -1
  166. package/dist/engine/renderers/Indicator/tema.d.ts +2 -0
  167. package/dist/engine/renderers/Indicator/tema.d.ts.map +1 -1
  168. package/dist/engine/renderers/Indicator/tema.js +19 -8
  169. package/dist/engine/renderers/Indicator/tema.js.map +1 -1
  170. package/dist/engine/renderers/Indicator/trix.d.ts +4 -1
  171. package/dist/engine/renderers/Indicator/trix.d.ts.map +1 -1
  172. package/dist/engine/renderers/Indicator/trix.js +30 -8
  173. package/dist/engine/renderers/Indicator/trix.js.map +1 -1
  174. package/dist/engine/renderers/Indicator/vma.d.ts +4 -1
  175. package/dist/engine/renderers/Indicator/vma.d.ts.map +1 -1
  176. package/dist/engine/renderers/Indicator/vma.js +20 -7
  177. package/dist/engine/renderers/Indicator/vma.js.map +1 -1
  178. package/dist/engine/renderers/Indicator/volumeProfile.d.ts +4 -1
  179. package/dist/engine/renderers/Indicator/volumeProfile.d.ts.map +1 -1
  180. package/dist/engine/renderers/Indicator/volumeProfile.js +28 -8
  181. package/dist/engine/renderers/Indicator/volumeProfile.js.map +1 -1
  182. package/dist/engine/renderers/Indicator/vwap.d.ts +4 -1
  183. package/dist/engine/renderers/Indicator/vwap.d.ts.map +1 -1
  184. package/dist/engine/renderers/Indicator/vwap.js +19 -7
  185. package/dist/engine/renderers/Indicator/vwap.js.map +1 -1
  186. package/dist/engine/renderers/Indicator/wma.d.ts +2 -0
  187. package/dist/engine/renderers/Indicator/wma.d.ts.map +1 -1
  188. package/dist/engine/renderers/Indicator/wma.js +19 -8
  189. package/dist/engine/renderers/Indicator/wma.js.map +1 -1
  190. package/dist/engine/renderers/Indicator/wmsr.d.ts +2 -1
  191. package/dist/engine/renderers/Indicator/wmsr.d.ts.map +1 -1
  192. package/dist/engine/renderers/Indicator/wmsr.js +12 -10
  193. package/dist/engine/renderers/Indicator/wmsr.js.map +1 -1
  194. package/dist/engine/renderers/Indicator/zones.d.ts +2 -0
  195. package/dist/engine/renderers/Indicator/zones.d.ts.map +1 -1
  196. package/dist/engine/renderers/Indicator/zones.js +24 -8
  197. package/dist/engine/renderers/Indicator/zones.js.map +1 -1
  198. package/dist/engine/renderers/paneTitle.d.ts +4 -10
  199. package/dist/engine/renderers/paneTitle.d.ts.map +1 -1
  200. package/dist/engine/renderers/paneTitle.js +28 -6
  201. package/dist/engine/renderers/paneTitle.js.map +1 -1
  202. package/dist/engine/renderers/subVolume.js +0 -3
  203. package/dist/engine/renderers/subVolume.js.map +1 -1
  204. package/dist/version.d.ts +1 -1
  205. package/dist/version.d.ts.map +1 -1
  206. package/dist/version.js +1 -1
  207. package/dist/version.js.map +1 -1
  208. package/package.json +4 -4
  209. package/src/controllers/__tests__/indicatorSelector.test.ts +4 -3
  210. package/src/controllers/createIndicatorSelectorController.ts +4 -6
  211. package/src/controllers/index.ts +0 -4
  212. package/src/engine/chart.ts +30 -22
  213. package/src/engine/indicators/__tests__/registerBuiltins.test.ts +14 -23
  214. package/src/engine/indicators/__tests__/scheduler.test.ts +14 -14
  215. package/src/engine/indicators/__tests__/stateComposer.test.ts +7 -4
  216. package/src/engine/indicators/indicator.worker.ts +36 -4
  217. package/src/engine/indicators/indicatorDefinitionRegistry.ts +38 -3
  218. package/src/engine/indicators/indicatorMetadata.ts +66 -1
  219. package/src/engine/indicators/indicatorRuntime.ts +121 -1447
  220. package/src/engine/indicators/scheduler.ts +85 -489
  221. package/src/engine/indicators/stateComposer.ts +16 -60
  222. package/src/engine/indicators/workerProtocol.ts +14 -36
  223. package/src/engine/renderers/Indicator/atr.ts +14 -11
  224. package/src/engine/renderers/Indicator/boll.ts +33 -10
  225. package/src/engine/renderers/Indicator/cci.ts +15 -14
  226. package/src/engine/renderers/Indicator/chaikinVol.ts +29 -7
  227. package/src/engine/renderers/Indicator/cmf.ts +28 -7
  228. package/src/engine/renderers/Indicator/dema.ts +28 -9
  229. package/src/engine/renderers/Indicator/donchian.ts +28 -9
  230. package/src/engine/renderers/Indicator/ene.ts +34 -11
  231. package/src/engine/renderers/Indicator/expma.ts +31 -9
  232. package/src/engine/renderers/Indicator/fastk.ts +15 -14
  233. package/src/engine/renderers/Indicator/fib.ts +29 -9
  234. package/src/engine/renderers/Indicator/hma.ts +28 -9
  235. package/src/engine/renderers/Indicator/hv.ts +27 -8
  236. package/src/engine/renderers/Indicator/ichimoku.ts +31 -9
  237. package/src/engine/renderers/Indicator/index.ts +27 -28
  238. package/src/engine/renderers/Indicator/kama.ts +28 -9
  239. package/src/engine/renderers/Indicator/keltner.ts +28 -9
  240. package/src/engine/renderers/Indicator/kst.ts +16 -19
  241. package/src/engine/renderers/Indicator/ma.ts +44 -9
  242. package/src/engine/renderers/Indicator/macd.ts +31 -36
  243. package/src/engine/renderers/Indicator/mainIndicatorLegend.ts +43 -162
  244. package/src/engine/renderers/Indicator/mfi.ts +28 -7
  245. package/src/engine/renderers/Indicator/mom.ts +15 -14
  246. package/src/engine/renderers/Indicator/obv.ts +27 -7
  247. package/src/engine/renderers/Indicator/parkinson.ts +27 -8
  248. package/src/engine/renderers/Indicator/pivot.ts +47 -9
  249. package/src/engine/renderers/Indicator/pvt.ts +27 -7
  250. package/src/engine/renderers/Indicator/roc.ts +29 -7
  251. package/src/engine/renderers/Indicator/rsi.ts +14 -17
  252. package/src/engine/renderers/Indicator/sar.ts +26 -9
  253. package/src/engine/renderers/Indicator/stoch.ts +13 -16
  254. package/src/engine/renderers/Indicator/structure.ts +31 -8
  255. package/src/engine/renderers/Indicator/supertrend.ts +26 -9
  256. package/src/engine/renderers/Indicator/tema.ts +28 -9
  257. package/src/engine/renderers/Indicator/trix.ts +39 -8
  258. package/src/engine/renderers/Indicator/vma.ts +28 -7
  259. package/src/engine/renderers/Indicator/volumeProfile.ts +40 -8
  260. package/src/engine/renderers/Indicator/vwap.ts +27 -7
  261. package/src/engine/renderers/Indicator/wma.ts +28 -9
  262. package/src/engine/renderers/Indicator/wmsr.ts +15 -14
  263. package/src/engine/renderers/Indicator/zones.ts +29 -9
  264. package/src/engine/renderers/__tests__/mainIndicatorLegend.renderer.test.ts +142 -79
  265. package/src/engine/renderers/paneTitle.ts +43 -18
  266. package/src/engine/renderers/subVolume.ts +0 -2
  267. package/src/version.ts +1 -1
  268. package/dist/engine/renderers/Indicator/macdLegend.d.ts +0 -13
  269. package/dist/engine/renderers/Indicator/macdLegend.d.ts.map +0 -1
  270. package/dist/engine/renderers/Indicator/macdLegend.js +0 -116
  271. package/dist/engine/renderers/Indicator/macdLegend.js.map +0 -1
  272. package/dist/engine/renderers/Indicator/subPaneConfig.d.ts +0 -16
  273. package/dist/engine/renderers/Indicator/subPaneConfig.d.ts.map +0 -1
  274. package/dist/engine/renderers/Indicator/subPaneConfig.js +0 -194
  275. package/dist/engine/renderers/Indicator/subPaneConfig.js.map +0 -1
  276. package/src/engine/renderers/Indicator/macdLegend.ts +0 -141
  277. package/src/engine/renderers/Indicator/subPaneConfig.ts +0 -265
@@ -7,10 +7,12 @@ import type {
7
7
  IndicatorWorkerRequest,
8
8
  IndicatorWorkerResponse,
9
9
  IndicatorConfigSnapshot,
10
+ SerializedRuntimeDescriptor,
10
11
  } from './workerProtocol'
11
12
  import { PROTOCOL_VERSION } from './workerProtocol'
12
13
  import type { KLineData } from '../../types/price'
13
- import { IndicatorRuntime } from './indicatorRuntime'
14
+ import { IndicatorRuntime, CALCULATOR_MAP, createWorkerCompute } from './indicatorRuntime'
15
+ import type { IndicatorRuntimeDescriptor } from './indicatorMetadata'
14
16
 
15
17
  // Worker 全局作用域
16
18
  const ctx = self as unknown as Worker
@@ -28,14 +30,40 @@ function postResponse(response: IndicatorWorkerResponse): void {
28
30
  /**
29
31
  * 处理初始化
30
32
  */
31
- function handleInit(): void {
32
- runtime = new IndicatorRuntime()
33
+ function handleInit(msg?: { descriptors?: SerializedRuntimeDescriptor[] }): void {
34
+ const serializedDescs = msg?.descriptors ?? []
35
+ const descriptors: IndicatorRuntimeDescriptor[] = serializedDescs.map(d => ({
36
+ configKey: d.configKey as any,
37
+ paneIdKey: d.paneIdKey as any,
38
+ defaultConfig: d.defaultConfig,
39
+ computeKey: d.computeKey,
40
+ compute: createWorkerCompute(d),
41
+ }))
42
+ runtime = new IndicatorRuntime(descriptors)
33
43
  postResponse({
34
44
  type: 'ready',
35
45
  protocolVersion: PROTOCOL_VERSION,
36
46
  })
37
47
  }
38
48
 
49
+ function handleAddDescriptor(descriptor: SerializedRuntimeDescriptor): void {
50
+ if (!runtime) {
51
+ postResponse({
52
+ type: 'error',
53
+ stage: 'init',
54
+ message: 'Runtime not initialized',
55
+ })
56
+ return
57
+ }
58
+ runtime.addDescriptor({
59
+ configKey: descriptor.configKey as any,
60
+ paneIdKey: descriptor.paneIdKey as any,
61
+ defaultConfig: descriptor.defaultConfig,
62
+ computeKey: descriptor.computeKey,
63
+ compute: createWorkerCompute(descriptor),
64
+ })
65
+ }
66
+
39
67
  /**
40
68
  * 处理设置数据
41
69
  */
@@ -135,7 +163,11 @@ ctx.onmessage = (event: MessageEvent<IndicatorWorkerRequest>) => {
135
163
 
136
164
  switch (msg.type) {
137
165
  case 'init':
138
- handleInit()
166
+ handleInit(msg)
167
+ break
168
+
169
+ case 'addDescriptor':
170
+ handleAddDescriptor(msg.descriptor)
139
171
  break
140
172
 
141
173
  case 'setData':
@@ -5,17 +5,21 @@ import type {
5
5
  RendererFactory,
6
6
  ScaleRendererFactory,
7
7
  IndicatorConfigUpdater,
8
+ IndicatorRuntimeDescriptor,
9
+ GetTitleInfoFn,
8
10
  } from './indicatorMetadata'
9
11
  import type { PluginHost } from '../../plugin'
12
+ import { createIndicatorStateKey } from '../../plugin/stateKeys'
13
+ import { resolveStateKey } from './indicatorMetadata'
10
14
 
11
15
  export type IndicatorDefinitionConfig<T = unknown> = {
12
16
  name: string
13
17
  aliases?: readonly string[]
14
18
  displayName: string
15
19
  category: IndicatorCategory
16
- stateKey: StateKey
20
+ stateKey?: StateKey
17
21
  defaultPaneId: string
18
- paneIdField?: keyof import('./workerProtocol').IndicatorConfigSnapshot
22
+ paneIdField?: string
19
23
  allowMainPane?: boolean
20
24
  scaleRendererFactory?: ScaleRendererFactory
21
25
  scale?: IndicatorMetadata['scale']
@@ -23,7 +27,9 @@ export type IndicatorDefinitionConfig<T = unknown> = {
23
27
  applyResult?: (host: PluginHost, state: unknown, paneId: string) => void
24
28
  mainPane?: IndicatorMetadata['mainPane']
25
29
  visibleState?: IndicatorMetadata['visibleState']
30
+ runtime?: IndicatorRuntimeDescriptor
26
31
  semantic?: IndicatorMetadata<T>['semantic']
32
+ getTitleInfo?: GetTitleInfoFn
27
33
  }
28
34
 
29
35
  type IndicatorDefinitionClass = {
@@ -73,12 +79,41 @@ export function Indicator(config: IndicatorDefinitionConfig) {
73
79
  const normalizedName = normalizeIndicatorId(config.name)
74
80
  removeAliasesFor(normalizedName)
75
81
 
82
+ // 自动生成 stateKey
83
+ const stateKey: StateKey = config.stateKey ?? (
84
+ config.category === 'main'
85
+ ? createIndicatorStateKey(config.name, 'main')
86
+ : (paneId: string) => createIndicatorStateKey(config.name, paneId)
87
+ )
88
+
89
+ // runtime.configKey 默认等于 name
90
+ const runtime = config.runtime && {
91
+ ...config.runtime,
92
+ configKey: config.runtime.configKey ?? config.name,
93
+ }
94
+
95
+ // 有 runtime 时自动生成 updateConfig / applyResult
96
+ const updateConfig = runtime
97
+ ? (config.updateConfig ?? ((scheduler: any, params: any, paneId?: string) => {
98
+ scheduler.updateIndicatorConfig(config.name, params, paneId)
99
+ }))
100
+ : config.updateConfig
101
+
102
+ const applyResult = runtime
103
+ ? (config.applyResult ?? ((host: any, state: any, paneId: string) => {
104
+ host.setSharedState(resolveStateKey(stateKey, paneId), state as any, 'indicator_scheduler')
105
+ }))
106
+ : config.applyResult
107
+
76
108
  indicatorDefinitions.set(normalizedName, {
77
109
  ...config,
110
+ stateKey,
111
+ runtime,
112
+ updateConfig,
113
+ applyResult,
78
114
  rendererFactory,
79
115
  paneIdField: config.paneIdField,
80
116
  allowMainPane: config.allowMainPane,
81
- applyResult: config.applyResult,
82
117
  })
83
118
  indexAlias(config.name, normalizedName)
84
119
  indexAlias(config.displayName, normalizedName)
@@ -7,6 +7,7 @@
7
7
 
8
8
  import type { PluginHost, RendererPluginWithHost } from '../../plugin'
9
9
  import type { IndicatorConfigSnapshot, IndicatorSeriesBundle } from './workerProtocol'
10
+ import type { KLineData } from '../../types/price'
10
11
 
11
12
  export type IndicatorId = string
12
13
 
@@ -85,6 +86,56 @@ export type IndicatorVisibleStateComposer = (
85
86
  context: IndicatorVisibleStateComposeContext,
86
87
  ) => unknown
87
88
 
89
+ /**
90
+ * 标题值项:颜色 + 数值 + 标签
91
+ */
92
+ export interface TitleValueItem {
93
+ label: string
94
+ value: number
95
+ color: string
96
+ }
97
+
98
+ /**
99
+ * 标题信息:指标名称 + 参数 + 各线实时值
100
+ */
101
+ export interface TitleInfo {
102
+ name: string
103
+ params?: number[]
104
+ values?: TitleValueItem[]
105
+ }
106
+
107
+ /**
108
+ * 获取标题信息的回调类型
109
+ */
110
+ export type GetTitleInfoFn = (
111
+ data: KLineData[],
112
+ index: number | null,
113
+ params: Record<string, number | boolean | string>,
114
+ host: PluginHost,
115
+ paneId: string,
116
+ ) => TitleInfo | null
117
+
118
+ /**
119
+ * 指标计算描述符
120
+ * 描述每个指标的计算逻辑,供 IndicatorRuntime 驱动
121
+ *
122
+ * - 主线程:直接调用 compute
123
+ * - Worker:用 computeKey 从 calculators 模块映射到实际函数
124
+ * - 自定义运行时指标:无 computeKey,仅主线程 inline 运行
125
+ */
126
+ export interface IndicatorRuntimeDescriptor<C = any> {
127
+ /** configSnapshot 中的 key,默认等于 name(如 'macd') */
128
+ configKey?: string
129
+ /** paneId 在 configSnapshot 中的 key(如 'macdPaneId'),可省略 */
130
+ paneIdKey?: string
131
+ /** 默认配置值 */
132
+ defaultConfig: C
133
+ /** 计算函数(主线程直接调用,Worker 用 computeKey 桥接) */
134
+ compute: (data: KLineData[], config: C) => unknown
135
+ /** Worker 端计算键名,映射到 calculators 模块的导出 */
136
+ computeKey: string
137
+ }
138
+
88
139
  /**
89
140
  * 指标元数据接口
90
141
  */
@@ -121,7 +172,7 @@ export interface IndicatorMetadata<T = unknown> {
121
172
  * 在 configSnapshot 中的 paneId 字段名
122
173
  * 用于从配置中获取当前 pane ID
123
174
  */
124
- paneIdField?: keyof IndicatorConfigSnapshot
175
+ paneIdField?: string
125
176
 
126
177
  /**
127
178
  * 渲染器工厂函数
@@ -190,12 +241,26 @@ export interface IndicatorMetadata<T = unknown> {
190
241
  compose: IndicatorVisibleStateComposer
191
242
  }
192
243
 
244
+ /**
245
+ * 计算描述符(可选)
246
+ * 提供后,IndicatorRuntime 可据此自动调度计算,无需手写展开
247
+ */
248
+ runtime?: IndicatorRuntimeDescriptor
249
+
193
250
  /**
194
251
  * 语义配置应用入口。
195
252
  */
196
253
  semantic?: {
197
254
  apply?: (chart: IndicatorSemanticChartAdapter, indicator: T) => void
198
255
  }
256
+
257
+ /**
258
+ * 标题信息获取回调(决定 pane 标题栏显示内容)
259
+ * - 副图指标:由 paneTitle 渲染器调用
260
+ * - 主图指标:由 mainIndicatorLegend 渲染器调用
261
+ * 未提供时 fallback 到 displayName
262
+ */
263
+ getTitleInfo?: GetTitleInfoFn
199
264
  }
200
265
 
201
266
  /**