@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
@@ -20,53 +20,13 @@ import type { IndicatorWorkerResponse } from './workerProtocol'
20
20
  import { isWorkerResponse, PROTOCOL_VERSION } from './workerProtocol'
21
21
  import { composeRenderStates, composeVisibleSubIndicatorStates, computeMainIndicatorPriceRange } from './stateComposer'
22
22
  import type {
23
- BOLLSchedulerConfig,
24
- EXPMASchedulerConfig,
25
- ENESchedulerConfig,
26
- RSISchedulerConfig,
27
- CCISchedulerConfig,
28
- STOCHSchedulerConfig,
29
- MOMSchedulerConfig,
30
- WMSRSchedulerConfig,
31
- KSTSchedulerConfig,
32
- FASTKSchedulerConfig,
33
- MACDSchedulerConfig,
34
- ATRSchedulerConfig,
35
- WMASchedulerConfig,
36
- DEMASchedulerConfig,
37
- TEMASchedulerConfig,
38
- HMASchedulerConfig,
39
- KAMASchedulerConfig,
40
- SARSchedulerConfig,
41
- SuperTrendSchedulerConfig,
42
- KeltnerSchedulerConfig,
43
- DonchianSchedulerConfig,
44
- IchimokuSchedulerConfig,
45
- ROCSchedulerConfig,
46
- TRIXSchedulerConfig,
47
- HVSchedulerConfig,
48
- ParkinsonSchedulerConfig,
49
- ChaikinVolSchedulerConfig,
50
- VMASchedulerConfig,
51
- OBVSchedulerConfig,
52
- PVTSchedulerConfig,
53
- VWAPSchedulerConfig,
54
- CMFSchedulerConfig,
55
- MFISchedulerConfig,
56
- PivotSchedulerConfig,
57
- FibSchedulerConfig,
58
- StructureSchedulerConfig,
59
- ZonesSchedulerConfig,
60
- VolumeProfileSchedulerConfig,
61
23
  IndicatorConfigSnapshot,
62
24
  IndicatorSeriesBundle,
25
+ SerializedRuntimeDescriptor,
63
26
  } from './workerProtocol'
64
- import type { MAFlags } from './calculators'
65
27
  import { IndicatorRegistry } from './indicatorRegistry'
66
28
  import { resolveStateKey, type IndicatorMetadata } from './indicatorMetadata'
67
29
  import type { BaseIndicatorState } from '../../plugin'
68
- import IndicatorWorker from './indicator.worker.ts?worker'
69
-
70
30
  // Default constants for default config
71
31
  import { DEFAULT_ATR_PERIOD } from './atrState'
72
32
  import { DEFAULT_WMA_PERIOD } from './wmaState'
@@ -149,7 +109,7 @@ export type {
149
109
  export class IndicatorScheduler {
150
110
  private pluginHost: PluginHost | null = null
151
111
  private visibleRange: VisibleRange = { start: 0, end: 0 }
152
- private activeMainIndicators: Set<string> = new Set()
112
+ private activeMainIndicators = new Map<string, Record<string, number | boolean | string>>()
153
113
 
154
114
  // 版本控制
155
115
  private dataVersion = 0
@@ -160,6 +120,7 @@ export class IndicatorScheduler {
160
120
  // 当前数据和配置快照
161
121
  private currentData: KLineData[] = []
162
122
  private configSnapshot: IndicatorConfigSnapshot = this.getDefaultConfig()
123
+ private paneIdOverrides = new Map<string, string>()
163
124
 
164
125
  // Worker 相关
165
126
  private worker: Worker | null = null
@@ -203,6 +164,21 @@ export class IndicatorScheduler {
203
164
  console.warn(`[IndicatorScheduler] '${meta.name}' already registered, overwriting`)
204
165
  }
205
166
  this.registry.register(meta)
167
+ if (meta.runtime && this.inlineRuntime) {
168
+ this.inlineRuntime.addDescriptor(meta.runtime)
169
+ }
170
+ if (meta.runtime && this.useWorker && this.worker && this.workerReady) {
171
+ const rt = meta.runtime
172
+ this.worker.postMessage({
173
+ type: 'addDescriptor',
174
+ descriptor: {
175
+ configKey: rt.configKey ?? meta.name,
176
+ paneIdKey: rt.paneIdKey,
177
+ defaultConfig: typeof rt.defaultConfig === 'function' ? (rt.defaultConfig as () => any)() : rt.defaultConfig,
178
+ computeKey: rt.computeKey,
179
+ } as SerializedRuntimeDescriptor,
180
+ })
181
+ }
206
182
  this.configVersion++
207
183
  this.triggerRecompute()
208
184
  console.log(`[IndicatorScheduler] Registered indicator '${meta.name}' (${meta.displayName})`)
@@ -404,41 +380,6 @@ export class IndicatorScheduler {
404
380
  showPOC: true,
405
381
  showValueArea: true,
406
382
  },
407
- rsiPaneId: 'sub_RSI',
408
- cciPaneId: 'sub_CCI',
409
- stochPaneId: 'sub_STOCH',
410
- momPaneId: 'sub_MOM',
411
- wmsrPaneId: 'sub_WMSR',
412
- kstPaneId: 'sub_KST',
413
- fastkPaneId: 'sub_FASTK',
414
- macdPaneId: 'sub_MACD',
415
- atrPaneId: 'sub_ATR',
416
- wmaPaneId: 'sub_WMA',
417
- demaPaneId: 'sub_DEMA',
418
- temaPaneId: 'sub_TEMA',
419
- hmaPaneId: 'sub_HMA',
420
- kamaPaneId: 'sub_KAMA',
421
- sarPaneId: 'sub_SAR',
422
- supertrendPaneId: 'sub_SuperTrend',
423
- keltnerPaneId: 'sub_Keltner',
424
- donchianPaneId: 'sub_Donchian',
425
- ichimokuPaneId: 'sub_Ichimoku',
426
- rocPaneId: 'sub_ROC',
427
- trixPaneId: 'sub_TRIX',
428
- hvPaneId: 'sub_HV',
429
- parkinsonPaneId: 'sub_Parkinson',
430
- chaikinVolPaneId: 'sub_ChaikinVol',
431
- vmaPaneId: 'sub_VMA',
432
- obvPaneId: 'sub_OBV',
433
- pvtPaneId: 'sub_PVT',
434
- vwapPaneId: 'sub_VWAP',
435
- cmfPaneId: 'sub_CMF',
436
- mfiPaneId: 'sub_MFI',
437
- pivotPaneId: 'sub_Pivot',
438
- fibPaneId: 'sub_Fib',
439
- structurePaneId: 'sub_Structure',
440
- zonesPaneId: 'sub_Zones',
441
- volumeProfilePaneId: 'sub_VolumeProfile',
442
383
  }
443
384
  }
444
385
 
@@ -457,16 +398,15 @@ export class IndicatorScheduler {
457
398
  return false
458
399
  }
459
400
  try {
460
- // Vite 模块 Worker(使用 ?worker 导入确保输出为 .js)
461
- console.log('[IndicatorScheduler] Creating worker from IndicatorWorker')
462
- this.worker = new IndicatorWorker()
401
+ const workerUrl = new URL('./indicator.worker.js', import.meta.url)
402
+ console.log('[IndicatorScheduler] Creating worker from:', workerUrl.href)
403
+ this.worker = new Worker(workerUrl, { type: 'module' })
463
404
  console.log('[IndicatorScheduler] Worker created, waiting for ready...')
464
405
  this.worker.onmessage = (e) => this.handleWorkerMessage(e.data)
465
406
  this.worker.onerror = (err) => {
466
407
  console.error('[IndicatorScheduler] Worker error:', err)
467
408
  this.fallbackToInline()
468
409
  }
469
- // 发送 init
470
410
  this.worker.postMessage({
471
411
  type: 'init',
472
412
  protocolVersion: PROTOCOL_VERSION,
@@ -480,7 +420,10 @@ export class IndicatorScheduler {
480
420
 
481
421
  private initInlineRuntime(): void {
482
422
  console.log('[IndicatorScheduler] Using INLINE runtime (fallback)')
483
- this.inlineRuntime = new IndicatorRuntime()
423
+ const runtimeDescs = this.registry.getAll()
424
+ .filter(m => m.runtime)
425
+ .map(m => m.runtime!)
426
+ this.inlineRuntime = new IndicatorRuntime(runtimeDescs)
484
427
  this.useWorker = false
485
428
  this.workerReady = true
486
429
  }
@@ -519,7 +462,19 @@ export class IndicatorScheduler {
519
462
  this.workerReady = true
520
463
  this.useWorker = true
521
464
  console.log('[IndicatorScheduler] Worker READY - using Worker backend')
522
- // Worker 就绪后补算一次,但仅在有数据时(避免空数据产出 Infinity 极值)
465
+ for (const meta of this.registry.getAll()) {
466
+ if (!meta.runtime) continue
467
+ const rt = meta.runtime
468
+ this.worker!.postMessage({
469
+ type: 'addDescriptor',
470
+ descriptor: {
471
+ configKey: rt.configKey ?? meta.name,
472
+ paneIdKey: rt.paneIdKey,
473
+ defaultConfig: typeof rt.defaultConfig === 'function' ? (rt.defaultConfig as () => any)() : rt.defaultConfig,
474
+ computeKey: rt.computeKey,
475
+ } as SerializedRuntimeDescriptor,
476
+ })
477
+ }
523
478
  if (this.currentData.length > 0) {
524
479
  this.triggerRecompute()
525
480
  }
@@ -605,9 +560,7 @@ export class IndicatorScheduler {
605
560
  meta.displayName,
606
561
  )
607
562
 
608
- const paneId = meta.paneIdField
609
- ? (this.configSnapshot as unknown as Record<string, string>)[meta.paneIdField as string]
610
- : meta.defaultPaneId
563
+ const paneId = this.paneIdOverrides.get(meta.name) ?? meta.defaultPaneId
611
564
 
612
565
  meta.applyResult(this.pluginHost, state as BaseIndicatorState, paneId)
613
566
  }
@@ -634,9 +587,7 @@ export class IndicatorScheduler {
634
587
 
635
588
  let state: unknown
636
589
  if (meta.category === 'main') {
637
- const paneId = meta.paneIdField
638
- ? (this.configSnapshot as unknown as Record<string, string>)[meta.paneIdField as string]
639
- : meta.defaultPaneId
590
+ const paneId = this.paneIdOverrides.get(meta.name) ?? meta.defaultPaneId
640
591
  const current = this.pluginHost.getSharedState<BaseIndicatorState & { visibleMin?: number; visibleMax?: number }>(
641
592
  resolveStateKey(meta.stateKey, paneId),
642
593
  )
@@ -663,9 +614,7 @@ export class IndicatorScheduler {
663
614
  meta.displayName,
664
615
  )
665
616
 
666
- const paneId = meta.paneIdField
667
- ? (this.configSnapshot as unknown as Record<string, string>)[meta.paneIdField as string]
668
- : meta.defaultPaneId
617
+ const paneId = this.paneIdOverrides.get(meta.name) ?? meta.defaultPaneId
669
618
 
670
619
  meta.applyResult(this.pluginHost, state as BaseIndicatorState, paneId)
671
620
  if (meta.category === 'main') {
@@ -681,8 +630,7 @@ export class IndicatorScheduler {
681
630
  const activeIds = this.getActiveSubPaneIds?.() ?? []
682
631
  const mask: Record<string, boolean> = {}
683
632
  for (const meta of this.registry.getAll()) {
684
- if (!meta.paneIdField) continue
685
- const paneId = (this.configSnapshot as unknown as Record<string, string>)[meta.paneIdField as string] ?? meta.defaultPaneId
633
+ const paneId = this.paneIdOverrides.get(meta.name) ?? meta.defaultPaneId
686
634
  mask[meta.name] = activeIds.includes(paneId) || !!(meta.allowMainPane && paneId === 'main')
687
635
  }
688
636
  return mask
@@ -695,8 +643,7 @@ export class IndicatorScheduler {
695
643
 
696
644
  const cfg: Record<string, unknown> = { ...this.configSnapshot }
697
645
  for (const meta of this.registry.getAll()) {
698
- if (!meta.paneIdField) continue
699
- const paneId = cfg[meta.paneIdField] as string
646
+ const paneId = this.paneIdOverrides.get(meta.name) ?? meta.defaultPaneId
700
647
  if (!activeIds.includes(paneId) && paneId !== 'main') {
701
648
  const subCfg = { ...(cfg[meta.name] as Record<string, unknown>) }
702
649
  for (const k of Object.keys(subCfg)) {
@@ -745,427 +692,73 @@ export class IndicatorScheduler {
745
692
  }
746
693
  }
747
694
 
748
- /**
749
- * MA 配置变更
750
- */
751
- updateMAConfig(config: MAFlags): void {
752
- this.configSnapshot.ma = { ...config }
753
- this.configVersion++
754
- this.triggerRecompute()
755
- }
756
-
757
- /**
758
- * BOLL 配置变更
759
- */
760
- updateBOLLConfig(config: Partial<BOLLSchedulerConfig>): void {
761
- this.configSnapshot.boll = { ...this.configSnapshot.boll, ...config }
762
- this.configVersion++
763
- this.triggerRecompute()
764
- }
765
-
766
- /**
767
- * EXPMA 配置变更
768
- */
769
- updateEXPMAConfig(config: Partial<EXPMASchedulerConfig>): void {
770
- this.configSnapshot.expma = { ...this.configSnapshot.expma, ...config }
771
- this.configVersion++
772
- this.triggerRecompute()
773
- }
774
-
775
- /**
776
- * ENE 配置变更
777
- */
778
- updateENEConfig(config: Partial<ENESchedulerConfig>): void {
779
- this.configSnapshot.ene = { ...this.configSnapshot.ene, ...config }
780
- this.configVersion++
781
- this.triggerRecompute()
782
- }
783
-
784
- /**
785
- * RSI 配置变更
786
- */
787
- updateRSIConfig(config: Partial<RSISchedulerConfig>, paneId?: string): void {
788
- if (paneId !== undefined) {
789
- this.configSnapshot.rsiPaneId = paneId
790
- }
791
- this.configSnapshot.rsi = { ...this.configSnapshot.rsi, ...config }
792
- this.configVersion++
793
- this.triggerRecompute()
794
- }
795
-
796
- /**
797
- * CCI 配置变更
798
- */
799
- updateCCIConfig(config: Partial<CCISchedulerConfig>, paneId?: string): void {
800
- if (paneId !== undefined) {
801
- this.configSnapshot.cciPaneId = paneId
802
- }
803
- this.configSnapshot.cci = { ...this.configSnapshot.cci, ...config }
804
- this.configVersion++
805
- this.triggerRecompute()
806
- }
807
-
808
- /**
809
- * STOCH 配置变更
810
- */
811
- updateSTOCHConfig(config: Partial<STOCHSchedulerConfig>, paneId?: string): void {
812
- if (paneId !== undefined) {
813
- this.configSnapshot.stochPaneId = paneId
814
- }
815
- this.configSnapshot.stoch = { ...this.configSnapshot.stoch, ...config }
816
- this.configVersion++
817
- this.triggerRecompute()
818
- }
819
-
820
- /**
821
- * MOM 配置变更
822
- */
823
- updateMOMConfig(config: Partial<MOMSchedulerConfig>, paneId?: string): void {
824
- if (paneId !== undefined) {
825
- this.configSnapshot.momPaneId = paneId
826
- }
827
- this.configSnapshot.mom = { ...this.configSnapshot.mom, ...config }
828
- this.configVersion++
829
- this.triggerRecompute()
830
- }
831
-
832
- /**
833
- * WMSR 配置变更
834
- */
835
- updateWMSRConfig(config: Partial<WMSRSchedulerConfig>, paneId?: string): void {
836
- if (paneId !== undefined) {
837
- this.configSnapshot.wmsrPaneId = paneId
838
- }
839
- this.configSnapshot.wmsr = { ...this.configSnapshot.wmsr, ...config }
840
- this.configVersion++
841
- this.triggerRecompute()
842
- }
843
-
844
- /**
845
- * KST 配置变更
846
- */
847
- updateKSTConfig(config: Partial<KSTSchedulerConfig>, paneId?: string): void {
848
- if (paneId !== undefined) {
849
- this.configSnapshot.kstPaneId = paneId
850
- }
851
- this.configSnapshot.kst = { ...this.configSnapshot.kst, ...config }
852
- this.configVersion++
853
- this.triggerRecompute()
854
- }
855
-
856
- /**
857
- * FASTK 配置变更
858
- */
859
- updateFASTKConfig(config: Partial<FASTKSchedulerConfig>, paneId?: string): void {
860
- if (paneId !== undefined) {
861
- this.configSnapshot.fastkPaneId = paneId
862
- }
863
- this.configSnapshot.fastk = { ...this.configSnapshot.fastk, ...config }
864
- this.configVersion++
865
- this.triggerRecompute()
866
- }
867
-
868
- /**
869
- * MACD 配置变更
870
- */
871
- updateMACDConfig(config: Partial<MACDSchedulerConfig>, paneId?: string): void {
872
- if (paneId !== undefined) {
873
- this.configSnapshot.macdPaneId = paneId
874
- }
875
- this.configSnapshot.macd = { ...this.configSnapshot.macd, ...config }
876
- this.configVersion++
877
- this.triggerRecompute()
878
- }
879
-
880
- /**
881
- * ATR 配置变更
882
- */
883
- updateATRConfig(config: Partial<ATRSchedulerConfig>, paneId?: string): void {
884
- if (paneId !== undefined) {
885
- this.configSnapshot.atrPaneId = paneId
886
- }
887
- this.configSnapshot.atr = { ...this.configSnapshot.atr, ...config }
888
- this.configVersion++
889
- this.triggerRecompute()
890
- }
891
-
892
- /**
893
- * WMA 配置变更
894
- */
895
- updateWMAConfig(config: Partial<WMASchedulerConfig>, paneId?: string): void {
896
- if (paneId !== undefined) {
897
- this.configSnapshot.wmaPaneId = paneId
898
- }
899
- this.configSnapshot.wma = { ...this.configSnapshot.wma, ...config }
900
- this.configVersion++
901
- this.triggerRecompute()
902
- }
903
695
 
904
696
  /**
905
- * DEMA 配置变更
697
+ * 通用指标配置变更入口
906
698
  */
907
- updateDEMAConfig(config: Partial<DEMASchedulerConfig>, paneId?: string): void {
908
- if (paneId !== undefined) {
909
- this.configSnapshot.demaPaneId = paneId
699
+ updateIndicatorConfig(indicatorId: string, config: Record<string, unknown>, paneId?: string): void {
700
+ const meta = this.registry.get(indicatorId)
701
+ if (!meta?.runtime) {
702
+ console.warn(`[IndicatorScheduler] Unknown or unregistered indicator: ${indicatorId}`)
703
+ return
910
704
  }
911
- this.configSnapshot.dema = { ...this.configSnapshot.dema, ...config }
912
- this.configVersion++
913
- this.triggerRecompute()
914
- }
915
-
916
- /**
917
- * TEMA 配置变更
918
- */
919
- updateTEMAConfig(config: Partial<TEMASchedulerConfig>, paneId?: string): void {
705
+ const rt = meta.runtime
706
+ const configKey = rt.configKey ?? indicatorId
707
+ // Update paneId if provided
920
708
  if (paneId !== undefined) {
921
- this.configSnapshot.temaPaneId = paneId
709
+ this.paneIdOverrides.set(indicatorId, paneId)
922
710
  }
923
- this.configSnapshot.tema = { ...this.configSnapshot.tema, ...config }
924
- this.configVersion++
925
- this.triggerRecompute()
926
- }
927
-
928
- /**
929
- * HMA 配置变更
930
- */
931
- updateHMAConfig(config: Partial<HMASchedulerConfig>, paneId?: string): void {
932
- if (paneId !== undefined) {
933
- this.configSnapshot.hmaPaneId = paneId
711
+ // Merge config
712
+ ;(this.configSnapshot as any)[configKey] = {
713
+ ...((this.configSnapshot as any)[configKey] ?? {}),
714
+ ...config,
934
715
  }
935
- this.configSnapshot.hma = { ...this.configSnapshot.hma, ...config }
936
- this.configVersion++
937
- this.triggerRecompute()
938
- }
939
-
940
- /**
941
- * KAMA 配置变更
942
- */
943
- updateKAMAConfig(config: Partial<KAMASchedulerConfig>, paneId?: string): void {
944
- if (paneId !== undefined) {
945
- this.configSnapshot.kamaPaneId = paneId
946
- }
947
- this.configSnapshot.kama = { ...this.configSnapshot.kama, ...config }
948
- this.configVersion++
949
- this.triggerRecompute()
950
- }
951
-
952
- /**
953
- * SAR 配置变更
954
- */
955
- updateSARConfig(config: Partial<SARSchedulerConfig>, paneId?: string): void {
956
- if (paneId !== undefined) {
957
- this.configSnapshot.sarPaneId = paneId
958
- }
959
- this.configSnapshot.sar = { ...this.configSnapshot.sar, ...config }
960
- this.configVersion++
961
- this.triggerRecompute()
962
- }
963
-
964
- /**
965
- * SuperTrend 配置变更
966
- */
967
- updateSuperTrendConfig(config: Partial<SuperTrendSchedulerConfig>, paneId?: string): void {
968
- if (paneId !== undefined) this.configSnapshot.supertrendPaneId = paneId
969
- this.configSnapshot.supertrend = { ...this.configSnapshot.supertrend, ...config }
970
- this.configVersion++
971
- this.triggerRecompute()
972
- }
973
-
974
- /**
975
- * Keltner 配置变更
976
- */
977
- updateKeltnerConfig(config: Partial<KeltnerSchedulerConfig>, paneId?: string): void {
978
- if (paneId !== undefined) this.configSnapshot.keltnerPaneId = paneId
979
- this.configSnapshot.keltner = { ...this.configSnapshot.keltner, ...config }
980
- this.configVersion++
981
- this.triggerRecompute()
982
- }
983
-
984
- /**
985
- * Donchian 配置变更
986
- */
987
- updateDonchianConfig(config: Partial<DonchianSchedulerConfig>, paneId?: string): void {
988
- if (paneId !== undefined) this.configSnapshot.donchianPaneId = paneId
989
- this.configSnapshot.donchian = { ...this.configSnapshot.donchian, ...config }
990
- this.configVersion++
991
- this.triggerRecompute()
992
- }
993
-
994
- /**
995
- * Ichimoku 配置变更
996
- */
997
- updateIchimokuConfig(config: Partial<IchimokuSchedulerConfig>, paneId?: string): void {
998
- if (paneId !== undefined) this.configSnapshot.ichimokuPaneId = paneId
999
- this.configSnapshot.ichimoku = { ...this.configSnapshot.ichimoku, ...config }
1000
- this.configVersion++
1001
- this.triggerRecompute()
1002
- }
1003
-
1004
- /**
1005
- * ROC 配置变更
1006
- */
1007
- updateROCConfig(config: Partial<ROCSchedulerConfig>, paneId?: string): void {
1008
- if (paneId !== undefined) this.configSnapshot.rocPaneId = paneId
1009
- this.configSnapshot.roc = { ...this.configSnapshot.roc, ...config }
1010
- this.configVersion++
1011
- this.triggerRecompute()
1012
- }
1013
-
1014
- /**
1015
- * TRIX 配置变更
1016
- */
1017
- updateTRIXConfig(config: Partial<TRIXSchedulerConfig>, paneId?: string): void {
1018
- if (paneId !== undefined) this.configSnapshot.trixPaneId = paneId
1019
- this.configSnapshot.trix = { ...this.configSnapshot.trix, ...config }
1020
- this.configVersion++
1021
- this.triggerRecompute()
1022
- }
1023
-
1024
- /**
1025
- * HV 配置变更
1026
- */
1027
- updateHVConfig(config: Partial<HVSchedulerConfig>, paneId?: string): void {
1028
- if (paneId !== undefined) this.configSnapshot.hvPaneId = paneId
1029
- this.configSnapshot.hv = { ...this.configSnapshot.hv, ...config }
1030
716
  this.configVersion++
1031
717
  this.triggerRecompute()
1032
718
  }
1033
719
 
1034
720
  /**
1035
- * Parkinson 配置变更
1036
- */
1037
- updateParkinsonConfig(config: Partial<ParkinsonSchedulerConfig>, paneId?: string): void {
1038
- if (paneId !== undefined) this.configSnapshot.parkinsonPaneId = paneId
1039
- this.configSnapshot.parkinson = { ...this.configSnapshot.parkinson, ...config }
1040
- this.configVersion++
1041
- this.triggerRecompute()
1042
- }
1043
-
1044
- /**
1045
- * ChaikinVol 配置变更
721
+ * 设置当前激活的主图指标
1046
722
  */
1047
- updateChaikinVolConfig(config: Partial<ChaikinVolSchedulerConfig>, paneId?: string): void {
1048
- if (paneId !== undefined) this.configSnapshot.chaikinVolPaneId = paneId
1049
- this.configSnapshot.chaikinVol = { ...this.configSnapshot.chaikinVol, ...config }
1050
- this.configVersion++
1051
- this.triggerRecompute()
723
+ setActiveMainIndicators(indicators: Array<{ id: string; params: Record<string, number | boolean | string> }>): void {
724
+ this.activeMainIndicators = new Map(
725
+ indicators.map(i => [i.id.toLowerCase(), i.params])
726
+ )
1052
727
  }
1053
728
 
1054
729
  /**
1055
- * VMA 配置变更
730
+ * 获取主图指标价格范围
1056
731
  */
1057
- updateVMAConfig(config: Partial<VMASchedulerConfig>, paneId?: string): void {
1058
- if (paneId !== undefined) this.configSnapshot.vmaPaneId = paneId
1059
- this.configSnapshot.vma = { ...this.configSnapshot.vma, ...config }
1060
- this.configVersion++
1061
- this.triggerRecompute()
732
+ getMainIndicatorPriceRange(): { min: number; max: number } | null {
733
+ if (!this.latestResult) return null
734
+ const result = computeMainIndicatorPriceRange(
735
+ this.latestResult,
736
+ this.visibleRange,
737
+ new Set(this.activeMainIndicators.keys()),
738
+ (indicatorId) => this.registry.get(indicatorId),
739
+ )
740
+ return result
1062
741
  }
1063
742
 
1064
743
  /**
1065
- * OBV 配置变更
744
+ * 获取所有已注册的主图指标
1066
745
  */
1067
- updateOBVConfig(config: Partial<OBVSchedulerConfig>, paneId?: string): void {
1068
- if (paneId !== undefined) this.configSnapshot.obvPaneId = paneId
1069
- this.configSnapshot.obv = { ...this.configSnapshot.obv, ...config }
1070
- this.configVersion++
1071
- this.triggerRecompute()
746
+ getMainIndicators(): readonly IndicatorMetadata[] {
747
+ return this.registry.getMainIndicators()
1072
748
  }
1073
749
 
1074
750
  /**
1075
- * PVT 配置变更
751
+ * 检查主图指标是否激活
1076
752
  */
1077
- updatePVTConfig(config: Partial<PVTSchedulerConfig>, paneId?: string): void {
1078
- if (paneId !== undefined) this.configSnapshot.pvtPaneId = paneId
1079
- this.configSnapshot.pvt = { ...this.configSnapshot.pvt, ...config }
1080
- this.configVersion++
1081
- this.triggerRecompute()
753
+ isMainIndicatorActive(indicatorId: string): boolean {
754
+ return this.activeMainIndicators.has(indicatorId.toLowerCase())
1082
755
  }
1083
756
 
1084
757
  /**
1085
- * VWAP 配置变更
758
+ * 获取主图指标当前参数
1086
759
  */
1087
- updateVWAPConfig(config: Partial<VWAPSchedulerConfig>, paneId?: string): void {
1088
- if (paneId !== undefined) this.configSnapshot.vwapPaneId = paneId
1089
- this.configSnapshot.vwap = { ...this.configSnapshot.vwap, ...config }
1090
- this.configVersion++
1091
- this.triggerRecompute()
1092
- }
1093
-
1094
- /** CMF 配置变更 */
1095
- updateCMFConfig(config: Partial<CMFSchedulerConfig>, paneId?: string): void {
1096
- if (paneId !== undefined) this.configSnapshot.cmfPaneId = paneId
1097
- this.configSnapshot.cmf = { ...this.configSnapshot.cmf, ...config }
1098
- this.configVersion++
1099
- this.triggerRecompute()
1100
- }
1101
-
1102
- /** MFI 配置变更 */
1103
- updateMFIConfig(config: Partial<MFISchedulerConfig>, paneId?: string): void {
1104
- if (paneId !== undefined) this.configSnapshot.mfiPaneId = paneId
1105
- this.configSnapshot.mfi = { ...this.configSnapshot.mfi, ...config }
1106
- this.configVersion++
1107
- this.triggerRecompute()
1108
- }
1109
-
1110
- /** Pivot 配置变更 */
1111
- updatePivotConfig(config: Partial<PivotSchedulerConfig>, paneId?: string): void {
1112
- if (paneId !== undefined) this.configSnapshot.pivotPaneId = paneId
1113
- this.configSnapshot.pivot = { ...this.configSnapshot.pivot, ...config }
1114
- this.configVersion++
1115
- this.triggerRecompute()
1116
- }
1117
-
1118
- /** Fib 配置变更 */
1119
- updateFibConfig(config: Partial<FibSchedulerConfig>, paneId?: string): void {
1120
- if (paneId !== undefined) this.configSnapshot.fibPaneId = paneId
1121
- this.configSnapshot.fib = { ...this.configSnapshot.fib, ...config }
1122
- this.configVersion++
1123
- this.triggerRecompute()
1124
- }
1125
-
1126
- /** Structure 配置变更 */
1127
- updateStructureConfig(config: Partial<StructureSchedulerConfig>, paneId?: string): void {
1128
- if (paneId !== undefined) this.configSnapshot.structurePaneId = paneId
1129
- this.configSnapshot.structure = { ...this.configSnapshot.structure, ...config }
1130
- this.configVersion++
1131
- this.triggerRecompute()
1132
- }
1133
-
1134
- /** Zones 配置变更 */
1135
- updateZonesConfig(config: Partial<ZonesSchedulerConfig>, paneId?: string): void {
1136
- if (paneId !== undefined) this.configSnapshot.zonesPaneId = paneId
1137
- this.configSnapshot.zones = { ...this.configSnapshot.zones, ...config }
1138
- this.configVersion++
1139
- this.triggerRecompute()
1140
- }
1141
-
1142
- /** Volume Profile 配置变更 */
1143
- updateVolumeProfileConfig(config: Partial<VolumeProfileSchedulerConfig>, paneId?: string): void {
1144
- if (paneId !== undefined) this.configSnapshot.volumeProfilePaneId = paneId
1145
- this.configSnapshot.volumeProfile = { ...this.configSnapshot.volumeProfile, ...config }
1146
- this.configVersion++
1147
- this.triggerRecompute()
1148
- }
1149
-
1150
- /**
1151
- * 设置当前激活的主图指标
1152
- */
1153
- setActiveMainIndicators(indicators: string[]): void {
1154
- this.activeMainIndicators = new Set(indicators.map(i => i.toLowerCase()))
1155
- }
1156
-
1157
- /**
1158
- * 获取主图指标价格范围
1159
- */
1160
- getMainIndicatorPriceRange(): { min: number; max: number } | null {
1161
- if (!this.latestResult) return null
1162
- const result = computeMainIndicatorPriceRange(
1163
- this.latestResult,
1164
- this.visibleRange,
1165
- this.activeMainIndicators,
1166
- (indicatorId) => this.registry.get(indicatorId),
1167
- )
1168
- return result
760
+ getMainIndicatorParams(indicatorId: string): Record<string, number | boolean | string> {
761
+ return this.activeMainIndicators.get(indicatorId.toLowerCase()) ?? {}
1169
762
  }
1170
763
 
1171
764
  /**
@@ -1231,7 +824,10 @@ export class IndicatorScheduler {
1231
824
 
1232
825
  private computeWithInline(): void {
1233
826
  if (!this.inlineRuntime) {
1234
- this.inlineRuntime = new IndicatorRuntime()
827
+ const runtimeDescs = this.registry.getAll()
828
+ .filter(m => m.runtime)
829
+ .map(m => m.runtime!)
830
+ this.inlineRuntime = new IndicatorRuntime(runtimeDescs)
1235
831
  }
1236
832
 
1237
833
  console.log(`[IndicatorScheduler] >> INLINE compute: dataV=${this.dataVersion} configV=${this.configVersion}`)