@363045841yyt/klinechart-core 0.8.7 → 0.8.9

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 (590) hide show
  1. package/dist/config/chartSettings.d.ts +2 -5
  2. package/dist/config/chartSettings.d.ts.map +1 -1
  3. package/dist/config/chartSettings.js +1 -2
  4. package/dist/config/chartSettings.js.map +1 -1
  5. package/dist/controllers/createChartController.d.ts.map +1 -1
  6. package/dist/controllers/createChartController.js +7 -0
  7. package/dist/controllers/createChartController.js.map +1 -1
  8. package/dist/controllers/index.d.ts +1 -1
  9. package/dist/controllers/index.d.ts.map +1 -1
  10. package/dist/controllers/types.d.ts +4 -2
  11. package/dist/controllers/types.d.ts.map +1 -1
  12. package/dist/data-fetchers/dataBuffer.d.ts +6 -0
  13. package/dist/data-fetchers/dataBuffer.d.ts.map +1 -1
  14. package/dist/data-fetchers/dataBuffer.js +50 -3
  15. package/dist/data-fetchers/dataBuffer.js.map +1 -1
  16. package/dist/engine/chart.d.ts +3 -1
  17. package/dist/engine/chart.d.ts.map +1 -1
  18. package/dist/engine/chart.js +9 -45
  19. package/dist/engine/chart.js.map +1 -1
  20. package/dist/engine/controller/interaction.d.ts +62 -0
  21. package/dist/engine/controller/interaction.d.ts.map +1 -1
  22. package/dist/engine/controller/interaction.js +159 -75
  23. package/dist/engine/controller/interaction.js.map +1 -1
  24. package/dist/engine/data/chartDataManager.d.ts +4 -3
  25. package/dist/engine/data/chartDataManager.d.ts.map +1 -1
  26. package/dist/engine/data/chartDataManager.js +39 -41
  27. package/dist/engine/data/chartDataManager.js.map +1 -1
  28. package/dist/engine/drawing/index.d.ts +2 -5
  29. package/dist/engine/drawing/index.d.ts.map +1 -1
  30. package/dist/engine/drawing/index.js +2 -33
  31. package/dist/engine/drawing/index.js.map +1 -1
  32. package/dist/engine/drawing/interaction.js +1 -1
  33. package/dist/engine/drawing/interaction.js.map +1 -1
  34. package/dist/engine/drawing/linearRegression.d.ts +6 -0
  35. package/dist/engine/drawing/linearRegression.d.ts.map +1 -0
  36. package/dist/engine/drawing/linearRegression.js +34 -0
  37. package/dist/engine/drawing/linearRegression.js.map +1 -0
  38. package/dist/engine/drawing/plugin.d.ts.map +1 -1
  39. package/dist/engine/drawing/plugin.js +104 -94
  40. package/dist/engine/drawing/plugin.js.map +1 -1
  41. package/dist/engine/indicators/calculators/_shared.d.ts +3 -0
  42. package/dist/engine/indicators/calculators/_shared.d.ts.map +1 -0
  43. package/dist/engine/indicators/calculators/_shared.js +45 -0
  44. package/dist/engine/indicators/calculators/_shared.js.map +1 -0
  45. package/dist/engine/indicators/calculators/bands.d.ts +44 -0
  46. package/dist/engine/indicators/calculators/bands.d.ts.map +1 -0
  47. package/dist/engine/indicators/calculators/bands.js +268 -0
  48. package/dist/engine/indicators/calculators/bands.js.map +1 -0
  49. package/dist/engine/indicators/calculators/index.d.ts +33 -0
  50. package/dist/engine/indicators/calculators/index.d.ts.map +1 -0
  51. package/dist/engine/indicators/calculators/index.js +19 -0
  52. package/dist/engine/indicators/calculators/index.js.map +1 -0
  53. package/dist/engine/indicators/calculators/movingAverages.d.ts +21 -0
  54. package/dist/engine/indicators/calculators/movingAverages.d.ts.map +1 -0
  55. package/dist/engine/indicators/calculators/movingAverages.js +143 -0
  56. package/dist/engine/indicators/calculators/movingAverages.js.map +1 -0
  57. package/dist/engine/indicators/calculators/oscillators.d.ts +29 -0
  58. package/dist/engine/indicators/calculators/oscillators.d.ts.map +1 -0
  59. package/dist/engine/indicators/calculators/oscillators.js +349 -0
  60. package/dist/engine/indicators/calculators/oscillators.js.map +1 -0
  61. package/dist/engine/indicators/calculators/patterns.d.ts +54 -0
  62. package/dist/engine/indicators/calculators/patterns.d.ts.map +1 -0
  63. package/dist/engine/indicators/calculators/patterns.js +214 -0
  64. package/dist/engine/indicators/calculators/patterns.js.map +1 -0
  65. package/dist/engine/indicators/calculators/volatility.d.ts +6 -0
  66. package/dist/engine/indicators/calculators/volatility.d.ts.map +1 -0
  67. package/dist/engine/indicators/calculators/volatility.js +114 -0
  68. package/dist/engine/indicators/calculators/volatility.js.map +1 -0
  69. package/dist/engine/indicators/calculators/volume.d.ts +21 -0
  70. package/dist/engine/indicators/calculators/volume.d.ts.map +1 -0
  71. package/dist/engine/indicators/calculators/volume.js +218 -0
  72. package/dist/engine/indicators/calculators/volume.js.map +1 -0
  73. package/dist/engine/indicators/calculators.d.ts +1 -361
  74. package/dist/engine/indicators/calculators.d.ts.map +1 -1
  75. package/dist/engine/indicators/calculators.js +1 -1787
  76. package/dist/engine/indicators/calculators.js.map +1 -1
  77. package/dist/engine/indicators/chartIndicatorManager.d.ts.map +1 -1
  78. package/dist/engine/indicators/chartIndicatorManager.js +3 -44
  79. package/dist/engine/indicators/chartIndicatorManager.js.map +1 -1
  80. package/dist/engine/indicators/indicatorRegistry.d.ts +8 -0
  81. package/dist/engine/indicators/indicatorRegistry.d.ts.map +1 -1
  82. package/dist/engine/indicators/indicatorRegistry.js +16 -0
  83. package/dist/engine/indicators/indicatorRegistry.js.map +1 -1
  84. package/dist/engine/indicators/indicatorRuntime.js +2 -2
  85. package/dist/engine/indicators/indicatorRuntime.js.map +1 -1
  86. package/dist/engine/indicators/scheduler.d.ts +2 -2
  87. package/dist/engine/indicators/scheduler.d.ts.map +1 -1
  88. package/dist/engine/indicators/scheduler.js +15 -155
  89. package/dist/engine/indicators/scheduler.js.map +1 -1
  90. package/dist/engine/indicators/{atrState.d.ts → state/atrState.d.ts} +1 -1
  91. package/dist/engine/indicators/state/atrState.d.ts.map +1 -0
  92. package/dist/engine/indicators/{atrState.js → state/atrState.js} +1 -1
  93. package/dist/engine/indicators/state/atrState.js.map +1 -0
  94. package/dist/engine/indicators/{bollState.d.ts → state/bollState.d.ts} +4 -2
  95. package/dist/engine/indicators/state/bollState.d.ts.map +1 -0
  96. package/dist/engine/indicators/{bollState.js → state/bollState.js} +5 -3
  97. package/dist/engine/indicators/state/bollState.js.map +1 -0
  98. package/dist/engine/indicators/{cciState.d.ts → state/cciState.d.ts} +1 -1
  99. package/dist/engine/indicators/state/cciState.d.ts.map +1 -0
  100. package/dist/engine/indicators/{cciState.js → state/cciState.js} +1 -1
  101. package/dist/engine/indicators/state/cciState.js.map +1 -0
  102. package/dist/engine/indicators/{chaikinVolState.d.ts → state/chaikinVolState.d.ts} +1 -1
  103. package/dist/engine/indicators/state/chaikinVolState.d.ts.map +1 -0
  104. package/dist/engine/indicators/{chaikinVolState.js → state/chaikinVolState.js} +1 -1
  105. package/dist/engine/indicators/state/chaikinVolState.js.map +1 -0
  106. package/dist/engine/indicators/{cmfState.d.ts → state/cmfState.d.ts} +1 -1
  107. package/dist/engine/indicators/state/cmfState.d.ts.map +1 -0
  108. package/dist/engine/indicators/{cmfState.js → state/cmfState.js} +1 -1
  109. package/dist/engine/indicators/state/cmfState.js.map +1 -0
  110. package/dist/engine/indicators/{demaState.d.ts → state/demaState.d.ts} +1 -1
  111. package/dist/engine/indicators/state/demaState.d.ts.map +1 -0
  112. package/dist/engine/indicators/{demaState.js → state/demaState.js} +1 -1
  113. package/dist/engine/indicators/state/demaState.js.map +1 -0
  114. package/dist/engine/indicators/{donchianState.d.ts → state/donchianState.d.ts} +1 -1
  115. package/dist/engine/indicators/state/donchianState.d.ts.map +1 -0
  116. package/dist/engine/indicators/{donchianState.js → state/donchianState.js} +1 -1
  117. package/dist/engine/indicators/state/donchianState.js.map +1 -0
  118. package/dist/engine/indicators/{eneState.d.ts → state/eneState.d.ts} +4 -2
  119. package/dist/engine/indicators/state/eneState.d.ts.map +1 -0
  120. package/dist/engine/indicators/{eneState.js → state/eneState.js} +5 -3
  121. package/dist/engine/indicators/state/eneState.js.map +1 -0
  122. package/dist/engine/indicators/{expmaState.d.ts → state/expmaState.d.ts} +4 -2
  123. package/dist/engine/indicators/state/expmaState.d.ts.map +1 -0
  124. package/dist/engine/indicators/{expmaState.js → state/expmaState.js} +5 -3
  125. package/dist/engine/indicators/state/expmaState.js.map +1 -0
  126. package/dist/engine/indicators/{fastkState.d.ts → state/fastkState.d.ts} +1 -1
  127. package/dist/engine/indicators/state/fastkState.d.ts.map +1 -0
  128. package/dist/engine/indicators/{fastkState.js → state/fastkState.js} +1 -1
  129. package/dist/engine/indicators/state/fastkState.js.map +1 -0
  130. package/dist/engine/indicators/{fibState.d.ts → state/fibState.d.ts} +1 -1
  131. package/dist/engine/indicators/state/fibState.d.ts.map +1 -0
  132. package/dist/engine/indicators/{fibState.js → state/fibState.js} +1 -1
  133. package/dist/engine/indicators/state/fibState.js.map +1 -0
  134. package/dist/engine/indicators/{hmaState.d.ts → state/hmaState.d.ts} +1 -1
  135. package/dist/engine/indicators/state/hmaState.d.ts.map +1 -0
  136. package/dist/engine/indicators/{hmaState.js → state/hmaState.js} +1 -1
  137. package/dist/engine/indicators/state/hmaState.js.map +1 -0
  138. package/dist/engine/indicators/{hvState.d.ts → state/hvState.d.ts} +1 -1
  139. package/dist/engine/indicators/state/hvState.d.ts.map +1 -0
  140. package/dist/engine/indicators/{hvState.js → state/hvState.js} +1 -1
  141. package/dist/engine/indicators/state/hvState.js.map +1 -0
  142. package/dist/engine/indicators/{ichimokuState.d.ts → state/ichimokuState.d.ts} +1 -1
  143. package/dist/engine/indicators/state/ichimokuState.d.ts.map +1 -0
  144. package/dist/engine/indicators/{ichimokuState.js → state/ichimokuState.js} +1 -1
  145. package/dist/engine/indicators/state/ichimokuState.js.map +1 -0
  146. package/dist/engine/indicators/{kamaState.d.ts → state/kamaState.d.ts} +1 -1
  147. package/dist/engine/indicators/state/kamaState.d.ts.map +1 -0
  148. package/dist/engine/indicators/{kamaState.js → state/kamaState.js} +1 -1
  149. package/dist/engine/indicators/state/kamaState.js.map +1 -0
  150. package/dist/engine/indicators/{keltnerState.d.ts → state/keltnerState.d.ts} +1 -1
  151. package/dist/engine/indicators/state/keltnerState.d.ts.map +1 -0
  152. package/dist/engine/indicators/{keltnerState.js → state/keltnerState.js} +1 -1
  153. package/dist/engine/indicators/state/keltnerState.js.map +1 -0
  154. package/dist/engine/indicators/{kstState.d.ts → state/kstState.d.ts} +2 -2
  155. package/dist/engine/indicators/state/kstState.d.ts.map +1 -0
  156. package/dist/engine/indicators/{kstState.js → state/kstState.js} +1 -1
  157. package/dist/engine/indicators/state/kstState.js.map +1 -0
  158. package/dist/engine/indicators/{maState.d.ts → state/maState.d.ts} +1 -1
  159. package/dist/engine/indicators/state/maState.d.ts.map +1 -0
  160. package/dist/engine/indicators/{maState.js → state/maState.js} +1 -1
  161. package/dist/engine/indicators/state/maState.js.map +1 -0
  162. package/dist/engine/indicators/{macdState.d.ts → state/macdState.d.ts} +3 -19
  163. package/dist/engine/indicators/state/macdState.d.ts.map +1 -0
  164. package/dist/engine/indicators/state/macdState.js.map +1 -0
  165. package/dist/engine/indicators/{mfiState.d.ts → state/mfiState.d.ts} +1 -1
  166. package/dist/engine/indicators/state/mfiState.d.ts.map +1 -0
  167. package/dist/engine/indicators/{mfiState.js → state/mfiState.js} +1 -1
  168. package/dist/engine/indicators/state/mfiState.js.map +1 -0
  169. package/dist/engine/indicators/{momState.d.ts → state/momState.d.ts} +1 -1
  170. package/dist/engine/indicators/state/momState.d.ts.map +1 -0
  171. package/dist/engine/indicators/{momState.js → state/momState.js} +1 -1
  172. package/dist/engine/indicators/state/momState.js.map +1 -0
  173. package/dist/engine/indicators/{obvState.d.ts → state/obvState.d.ts} +1 -1
  174. package/dist/engine/indicators/state/obvState.d.ts.map +1 -0
  175. package/dist/engine/indicators/{obvState.js → state/obvState.js} +1 -1
  176. package/dist/engine/indicators/state/obvState.js.map +1 -0
  177. package/dist/engine/indicators/{parkinsonState.d.ts → state/parkinsonState.d.ts} +1 -1
  178. package/dist/engine/indicators/state/parkinsonState.d.ts.map +1 -0
  179. package/dist/engine/indicators/{parkinsonState.js → state/parkinsonState.js} +1 -1
  180. package/dist/engine/indicators/state/parkinsonState.js.map +1 -0
  181. package/dist/engine/indicators/{pivotState.d.ts → state/pivotState.d.ts} +1 -1
  182. package/dist/engine/indicators/state/pivotState.d.ts.map +1 -0
  183. package/dist/engine/indicators/{pivotState.js → state/pivotState.js} +1 -1
  184. package/dist/engine/indicators/state/pivotState.js.map +1 -0
  185. package/dist/engine/indicators/{pvtState.d.ts → state/pvtState.d.ts} +1 -1
  186. package/dist/engine/indicators/state/pvtState.d.ts.map +1 -0
  187. package/dist/engine/indicators/{pvtState.js → state/pvtState.js} +1 -1
  188. package/dist/engine/indicators/state/pvtState.js.map +1 -0
  189. package/dist/engine/indicators/{rocState.d.ts → state/rocState.d.ts} +1 -1
  190. package/dist/engine/indicators/state/rocState.d.ts.map +1 -0
  191. package/dist/engine/indicators/{rocState.js → state/rocState.js} +1 -1
  192. package/dist/engine/indicators/state/rocState.js.map +1 -0
  193. package/dist/engine/indicators/{rsiState.d.ts → state/rsiState.d.ts} +4 -1
  194. package/dist/engine/indicators/state/rsiState.d.ts.map +1 -0
  195. package/dist/engine/indicators/{rsiState.js → state/rsiState.js} +7 -4
  196. package/dist/engine/indicators/state/rsiState.js.map +1 -0
  197. package/dist/engine/indicators/{sarState.d.ts → state/sarState.d.ts} +1 -1
  198. package/dist/engine/indicators/state/sarState.d.ts.map +1 -0
  199. package/dist/engine/indicators/{sarState.js → state/sarState.js} +1 -1
  200. package/dist/engine/indicators/state/sarState.js.map +1 -0
  201. package/dist/engine/indicators/{stochState.d.ts → state/stochState.d.ts} +2 -2
  202. package/dist/engine/indicators/state/stochState.d.ts.map +1 -0
  203. package/dist/engine/indicators/{stochState.js → state/stochState.js} +1 -1
  204. package/dist/engine/indicators/state/stochState.js.map +1 -0
  205. package/dist/engine/indicators/{structureState.d.ts → state/structureState.d.ts} +1 -1
  206. package/dist/engine/indicators/state/structureState.d.ts.map +1 -0
  207. package/dist/engine/indicators/{structureState.js → state/structureState.js} +1 -1
  208. package/dist/engine/indicators/state/structureState.js.map +1 -0
  209. package/dist/engine/indicators/{supertrendState.d.ts → state/supertrendState.d.ts} +1 -1
  210. package/dist/engine/indicators/state/supertrendState.d.ts.map +1 -0
  211. package/dist/engine/indicators/{supertrendState.js → state/supertrendState.js} +1 -1
  212. package/dist/engine/indicators/state/supertrendState.js.map +1 -0
  213. package/dist/engine/indicators/{temaState.d.ts → state/temaState.d.ts} +1 -1
  214. package/dist/engine/indicators/state/temaState.d.ts.map +1 -0
  215. package/dist/engine/indicators/{temaState.js → state/temaState.js} +1 -1
  216. package/dist/engine/indicators/state/temaState.js.map +1 -0
  217. package/dist/engine/indicators/{trixState.d.ts → state/trixState.d.ts} +1 -1
  218. package/dist/engine/indicators/state/trixState.d.ts.map +1 -0
  219. package/dist/engine/indicators/{trixState.js → state/trixState.js} +1 -1
  220. package/dist/engine/indicators/state/trixState.js.map +1 -0
  221. package/dist/engine/indicators/{vmaState.d.ts → state/vmaState.d.ts} +1 -1
  222. package/dist/engine/indicators/state/vmaState.d.ts.map +1 -0
  223. package/dist/engine/indicators/{vmaState.js → state/vmaState.js} +1 -1
  224. package/dist/engine/indicators/state/vmaState.js.map +1 -0
  225. package/dist/engine/indicators/{volumeProfileState.d.ts → state/volumeProfileState.d.ts} +1 -1
  226. package/dist/engine/indicators/state/volumeProfileState.d.ts.map +1 -0
  227. package/dist/engine/indicators/{volumeProfileState.js → state/volumeProfileState.js} +1 -1
  228. package/dist/engine/indicators/state/volumeProfileState.js.map +1 -0
  229. package/dist/engine/indicators/{vwapState.d.ts → state/vwapState.d.ts} +1 -1
  230. package/dist/engine/indicators/state/vwapState.d.ts.map +1 -0
  231. package/dist/engine/indicators/{vwapState.js → state/vwapState.js} +1 -1
  232. package/dist/engine/indicators/state/vwapState.js.map +1 -0
  233. package/dist/engine/indicators/{wmaState.d.ts → state/wmaState.d.ts} +1 -1
  234. package/dist/engine/indicators/state/wmaState.d.ts.map +1 -0
  235. package/dist/engine/indicators/{wmaState.js → state/wmaState.js} +1 -1
  236. package/dist/engine/indicators/state/wmaState.js.map +1 -0
  237. package/dist/engine/indicators/{wmsrState.d.ts → state/wmsrState.d.ts} +1 -1
  238. package/dist/engine/indicators/state/wmsrState.d.ts.map +1 -0
  239. package/dist/engine/indicators/{wmsrState.js → state/wmsrState.js} +1 -1
  240. package/dist/engine/indicators/state/wmsrState.js.map +1 -0
  241. package/dist/engine/indicators/{zonesState.d.ts → state/zonesState.d.ts} +1 -1
  242. package/dist/engine/indicators/state/zonesState.d.ts.map +1 -0
  243. package/dist/engine/indicators/{zonesState.js → state/zonesState.js} +1 -1
  244. package/dist/engine/indicators/state/zonesState.js.map +1 -0
  245. package/dist/engine/indicators/stateComposer.d.ts +39 -39
  246. package/dist/engine/indicators/stateComposer.d.ts.map +1 -1
  247. package/dist/engine/indicators/visibleStateComposers.d.ts.map +1 -1
  248. package/dist/engine/indicators/visibleStateComposers.js +192 -31
  249. package/dist/engine/indicators/visibleStateComposers.js.map +1 -1
  250. package/dist/engine/layout/pane.js +2 -2
  251. package/dist/engine/layout/pane.js.map +1 -1
  252. package/dist/engine/paneRenderer.d.ts +2 -6
  253. package/dist/engine/paneRenderer.d.ts.map +1 -1
  254. package/dist/engine/paneRenderer.js.map +1 -1
  255. package/dist/engine/render/chartRenderer.d.ts.map +1 -1
  256. package/dist/engine/render/chartRenderer.js +33 -3
  257. package/dist/engine/render/chartRenderer.js.map +1 -1
  258. package/dist/engine/renderers/Indicator/atr.js +2 -2
  259. package/dist/engine/renderers/Indicator/atr.js.map +1 -1
  260. package/dist/engine/renderers/Indicator/cci.js +1 -1
  261. package/dist/engine/renderers/Indicator/cci.js.map +1 -1
  262. package/dist/engine/renderers/Indicator/chaikinVol.js +1 -1
  263. package/dist/engine/renderers/Indicator/chaikinVol.js.map +1 -1
  264. package/dist/engine/renderers/Indicator/cmf.js +1 -1
  265. package/dist/engine/renderers/Indicator/cmf.js.map +1 -1
  266. package/dist/engine/renderers/Indicator/dema.js +1 -1
  267. package/dist/engine/renderers/Indicator/dema.js.map +1 -1
  268. package/dist/engine/renderers/Indicator/donchian.js +1 -1
  269. package/dist/engine/renderers/Indicator/donchian.js.map +1 -1
  270. package/dist/engine/renderers/Indicator/fastk.js +1 -1
  271. package/dist/engine/renderers/Indicator/fastk.js.map +1 -1
  272. package/dist/engine/renderers/Indicator/fib.js +1 -1
  273. package/dist/engine/renderers/Indicator/fib.js.map +1 -1
  274. package/dist/engine/renderers/Indicator/hma.js +1 -1
  275. package/dist/engine/renderers/Indicator/hma.js.map +1 -1
  276. package/dist/engine/renderers/Indicator/hv.js +2 -2
  277. package/dist/engine/renderers/Indicator/hv.js.map +1 -1
  278. package/dist/engine/renderers/Indicator/ichimoku.js +95 -92
  279. package/dist/engine/renderers/Indicator/ichimoku.js.map +1 -1
  280. package/dist/engine/renderers/Indicator/kama.js +1 -1
  281. package/dist/engine/renderers/Indicator/kama.js.map +1 -1
  282. package/dist/engine/renderers/Indicator/keltner.js +1 -1
  283. package/dist/engine/renderers/Indicator/keltner.js.map +1 -1
  284. package/dist/engine/renderers/Indicator/kst.js +2 -2
  285. package/dist/engine/renderers/Indicator/kst.js.map +1 -1
  286. package/dist/engine/renderers/Indicator/ma.js.map +1 -1
  287. package/dist/engine/renderers/Indicator/macd.js +1 -1
  288. package/dist/engine/renderers/Indicator/macd.js.map +1 -1
  289. package/dist/engine/renderers/Indicator/mfi.js +1 -1
  290. package/dist/engine/renderers/Indicator/mfi.js.map +1 -1
  291. package/dist/engine/renderers/Indicator/mom.js +2 -2
  292. package/dist/engine/renderers/Indicator/mom.js.map +1 -1
  293. package/dist/engine/renderers/Indicator/obv.js +1 -1
  294. package/dist/engine/renderers/Indicator/obv.js.map +1 -1
  295. package/dist/engine/renderers/Indicator/parkinson.js +2 -2
  296. package/dist/engine/renderers/Indicator/parkinson.js.map +1 -1
  297. package/dist/engine/renderers/Indicator/pivot.js +1 -1
  298. package/dist/engine/renderers/Indicator/pivot.js.map +1 -1
  299. package/dist/engine/renderers/Indicator/pvt.js +1 -1
  300. package/dist/engine/renderers/Indicator/pvt.js.map +1 -1
  301. package/dist/engine/renderers/Indicator/roc.js +1 -1
  302. package/dist/engine/renderers/Indicator/roc.js.map +1 -1
  303. package/dist/engine/renderers/Indicator/rsi.js +1 -1
  304. package/dist/engine/renderers/Indicator/rsi.js.map +1 -1
  305. package/dist/engine/renderers/Indicator/sar.js +1 -1
  306. package/dist/engine/renderers/Indicator/sar.js.map +1 -1
  307. package/dist/engine/renderers/Indicator/stoch.js +1 -1
  308. package/dist/engine/renderers/Indicator/stoch.js.map +1 -1
  309. package/dist/engine/renderers/Indicator/structure.js +1 -1
  310. package/dist/engine/renderers/Indicator/structure.js.map +1 -1
  311. package/dist/engine/renderers/Indicator/supertrend.js +1 -1
  312. package/dist/engine/renderers/Indicator/supertrend.js.map +1 -1
  313. package/dist/engine/renderers/Indicator/tema.js +1 -1
  314. package/dist/engine/renderers/Indicator/tema.js.map +1 -1
  315. package/dist/engine/renderers/Indicator/trix.js +2 -2
  316. package/dist/engine/renderers/Indicator/trix.js.map +1 -1
  317. package/dist/engine/renderers/Indicator/vma.js +2 -2
  318. package/dist/engine/renderers/Indicator/vma.js.map +1 -1
  319. package/dist/engine/renderers/Indicator/volumeProfile.js +1 -1
  320. package/dist/engine/renderers/Indicator/volumeProfile.js.map +1 -1
  321. package/dist/engine/renderers/Indicator/vwap.js +1 -1
  322. package/dist/engine/renderers/Indicator/vwap.js.map +1 -1
  323. package/dist/engine/renderers/Indicator/wma.js +1 -1
  324. package/dist/engine/renderers/Indicator/wma.js.map +1 -1
  325. package/dist/engine/renderers/Indicator/wmsr.js +1 -1
  326. package/dist/engine/renderers/Indicator/wmsr.js.map +1 -1
  327. package/dist/engine/renderers/Indicator/zones.js +1 -1
  328. package/dist/engine/renderers/Indicator/zones.js.map +1 -1
  329. package/dist/engine/renderers/candle.d.ts.map +1 -1
  330. package/dist/engine/renderers/candle.js +94 -60
  331. package/dist/engine/renderers/candle.js.map +1 -1
  332. package/dist/engine/renderers/extremaMarkers.d.ts.map +1 -1
  333. package/dist/engine/renderers/extremaMarkers.js +5 -6
  334. package/dist/engine/renderers/extremaMarkers.js.map +1 -1
  335. package/dist/engine/renderers/gridLines.d.ts.map +1 -1
  336. package/dist/engine/renderers/gridLines.js +8 -36
  337. package/dist/engine/renderers/gridLines.js.map +1 -1
  338. package/dist/engine/renderers/leftYAxis.d.ts.map +1 -1
  339. package/dist/engine/renderers/leftYAxis.js +54 -21
  340. package/dist/engine/renderers/leftYAxis.js.map +1 -1
  341. package/dist/engine/renderers/timeAxis.d.ts.map +1 -1
  342. package/dist/engine/renderers/timeAxis.js +2 -0
  343. package/dist/engine/renderers/timeAxis.js.map +1 -1
  344. package/dist/engine/renderers/timeShare.js +1 -1
  345. package/dist/engine/renderers/timeShare.js.map +1 -1
  346. package/dist/engine/renderers/yAxis.d.ts.map +1 -1
  347. package/dist/engine/renderers/yAxis.js +16 -22
  348. package/dist/engine/renderers/yAxis.js.map +1 -1
  349. package/dist/engine/utils/tickPosition.d.ts +12 -0
  350. package/dist/engine/utils/tickPosition.d.ts.map +1 -1
  351. package/dist/engine/utils/tickPosition.js +15 -0
  352. package/dist/engine/utils/tickPosition.js.map +1 -1
  353. package/dist/engine/viewport/chartViewportManager.d.ts +34 -5
  354. package/dist/engine/viewport/chartViewportManager.d.ts.map +1 -1
  355. package/dist/engine/viewport/chartViewportManager.js +61 -30
  356. package/dist/engine/viewport/chartViewportManager.js.map +1 -1
  357. package/dist/mcp/chartBridge.js +1 -1
  358. package/dist/mcp/chartBridge.js.map +1 -1
  359. package/dist/plugin/types.d.ts +13 -0
  360. package/dist/plugin/types.d.ts.map +1 -1
  361. package/dist/plugin/types.js.map +1 -1
  362. package/dist/utils/dateFormat.d.ts +2 -2
  363. package/dist/utils/dateFormat.d.ts.map +1 -1
  364. package/dist/utils/dateFormat.js +6 -6
  365. package/dist/utils/dateFormat.js.map +1 -1
  366. package/dist/utils/kLineDraw/axis.d.ts +4 -0
  367. package/dist/utils/kLineDraw/axis.d.ts.map +1 -1
  368. package/dist/utils/kLineDraw/axis.js +2 -2
  369. package/dist/utils/kLineDraw/axis.js.map +1 -1
  370. package/dist/utils/volumePrice.d.ts.map +1 -1
  371. package/dist/utils/volumePrice.js +20 -3
  372. package/dist/utils/volumePrice.js.map +1 -1
  373. package/dist/version.d.ts +1 -1
  374. package/dist/version.js +1 -1
  375. package/package.json +1 -1
  376. package/src/config/chartSettings.ts +1 -2
  377. package/src/controllers/createChartController.ts +9 -2
  378. package/src/controllers/index.ts +1 -1
  379. package/src/controllers/types.ts +4 -2
  380. package/src/data-fetchers/__tests__/dataBuffer.test.ts +135 -0
  381. package/src/data-fetchers/dataBuffer.ts +61 -9
  382. package/src/engine/chart.ts +11 -46
  383. package/src/engine/controller/interaction.ts +187 -77
  384. package/src/engine/data/chartDataManager.ts +43 -43
  385. package/src/engine/drawing/index.ts +2 -36
  386. package/src/engine/drawing/interaction.ts +1 -1
  387. package/src/engine/drawing/linearRegression.ts +36 -0
  388. package/src/engine/drawing/plugin.ts +160 -97
  389. package/src/engine/indicators/__tests__/calculators.test.ts +9 -1
  390. package/src/engine/indicators/__tests__/indicatorRegistry.test.ts +10 -5
  391. package/src/engine/indicators/__tests__/scheduler.test.ts +12 -12
  392. package/src/engine/indicators/__tests__/soa.test.ts +46 -12
  393. package/src/engine/indicators/calculators/_shared.ts +44 -0
  394. package/src/engine/indicators/calculators/bands.ts +365 -0
  395. package/src/engine/indicators/calculators/index.ts +37 -0
  396. package/src/engine/indicators/calculators/movingAverages.ts +189 -0
  397. package/src/engine/indicators/calculators/oscillators.ts +446 -0
  398. package/src/engine/indicators/calculators/patterns.ts +287 -0
  399. package/src/engine/indicators/calculators/volatility.ts +150 -0
  400. package/src/engine/indicators/calculators/volume.ts +248 -0
  401. package/src/engine/indicators/calculators.ts +1 -2460
  402. package/src/engine/indicators/chartIndicatorManager.ts +3 -44
  403. package/src/engine/indicators/indicatorRegistry.ts +15 -0
  404. package/src/engine/indicators/indicatorRuntime.ts +2 -2
  405. package/src/engine/indicators/scheduler.ts +39 -154
  406. package/src/engine/indicators/{atrState.ts → state/atrState.ts} +2 -2
  407. package/src/engine/indicators/{bollState.ts → state/bollState.ts} +8 -5
  408. package/src/engine/indicators/{cciState.ts → state/cciState.ts} +2 -2
  409. package/src/engine/indicators/{chaikinVolState.ts → state/chaikinVolState.ts} +2 -2
  410. package/src/engine/indicators/{cmfState.ts → state/cmfState.ts} +2 -2
  411. package/src/engine/indicators/{demaState.ts → state/demaState.ts} +2 -2
  412. package/src/engine/indicators/{donchianState.ts → state/donchianState.ts} +2 -2
  413. package/src/engine/indicators/{eneState.ts → state/eneState.ts} +8 -5
  414. package/src/engine/indicators/{expmaState.ts → state/expmaState.ts} +8 -5
  415. package/src/engine/indicators/{fastkState.ts → state/fastkState.ts} +2 -2
  416. package/src/engine/indicators/{fibState.ts → state/fibState.ts} +2 -2
  417. package/src/engine/indicators/{hmaState.ts → state/hmaState.ts} +2 -2
  418. package/src/engine/indicators/{hvState.ts → state/hvState.ts} +2 -2
  419. package/src/engine/indicators/{ichimokuState.ts → state/ichimokuState.ts} +2 -2
  420. package/src/engine/indicators/{kamaState.ts → state/kamaState.ts} +2 -2
  421. package/src/engine/indicators/{keltnerState.ts → state/keltnerState.ts} +2 -2
  422. package/src/engine/indicators/{kstState.ts → state/kstState.ts} +3 -3
  423. package/src/engine/indicators/{maState.ts → state/maState.ts} +2 -2
  424. package/src/engine/indicators/{macdState.ts → state/macdState.ts} +3 -20
  425. package/src/engine/indicators/{mfiState.ts → state/mfiState.ts} +2 -2
  426. package/src/engine/indicators/{momState.ts → state/momState.ts} +2 -2
  427. package/src/engine/indicators/{obvState.ts → state/obvState.ts} +2 -2
  428. package/src/engine/indicators/{parkinsonState.ts → state/parkinsonState.ts} +2 -2
  429. package/src/engine/indicators/{pivotState.ts → state/pivotState.ts} +2 -2
  430. package/src/engine/indicators/{pvtState.ts → state/pvtState.ts} +2 -2
  431. package/src/engine/indicators/{rocState.ts → state/rocState.ts} +2 -2
  432. package/src/engine/indicators/{rsiState.ts → state/rsiState.ts} +9 -5
  433. package/src/engine/indicators/{sarState.ts → state/sarState.ts} +2 -2
  434. package/src/engine/indicators/{stochState.ts → state/stochState.ts} +3 -3
  435. package/src/engine/indicators/{structureState.ts → state/structureState.ts} +2 -2
  436. package/src/engine/indicators/{supertrendState.ts → state/supertrendState.ts} +2 -2
  437. package/src/engine/indicators/{temaState.ts → state/temaState.ts} +2 -2
  438. package/src/engine/indicators/{trixState.ts → state/trixState.ts} +2 -2
  439. package/src/engine/indicators/{vmaState.ts → state/vmaState.ts} +2 -2
  440. package/src/engine/indicators/{volumeProfileState.ts → state/volumeProfileState.ts} +2 -2
  441. package/src/engine/indicators/{vwapState.ts → state/vwapState.ts} +2 -2
  442. package/src/engine/indicators/{wmaState.ts → state/wmaState.ts} +2 -2
  443. package/src/engine/indicators/{wmsrState.ts → state/wmsrState.ts} +2 -2
  444. package/src/engine/indicators/{zonesState.ts → state/zonesState.ts} +2 -2
  445. package/src/engine/indicators/stateComposer.ts +39 -39
  446. package/src/engine/indicators/visibleStateComposers.ts +203 -30
  447. package/src/engine/layout/pane.ts +2 -2
  448. package/src/engine/paneRenderer.ts +2 -6
  449. package/src/engine/render/chartRenderer.ts +34 -4
  450. package/src/engine/renderers/Indicator/__tests__/createSubIndicatorRenderer.test.ts +1 -1
  451. package/src/engine/renderers/Indicator/atr.ts +3 -3
  452. package/src/engine/renderers/Indicator/boll.ts +1 -1
  453. package/src/engine/renderers/Indicator/cci.ts +2 -2
  454. package/src/engine/renderers/Indicator/chaikinVol.ts +2 -2
  455. package/src/engine/renderers/Indicator/cmf.ts +2 -2
  456. package/src/engine/renderers/Indicator/dema.ts +2 -2
  457. package/src/engine/renderers/Indicator/donchian.ts +2 -2
  458. package/src/engine/renderers/Indicator/ene.ts +1 -1
  459. package/src/engine/renderers/Indicator/expma.ts +1 -1
  460. package/src/engine/renderers/Indicator/fastk.ts +2 -2
  461. package/src/engine/renderers/Indicator/fib.ts +2 -2
  462. package/src/engine/renderers/Indicator/hma.ts +2 -2
  463. package/src/engine/renderers/Indicator/hv.ts +3 -3
  464. package/src/engine/renderers/Indicator/ichimoku.ts +111 -85
  465. package/src/engine/renderers/Indicator/kama.ts +3 -3
  466. package/src/engine/renderers/Indicator/keltner.ts +4 -4
  467. package/src/engine/renderers/Indicator/kst.ts +5 -5
  468. package/src/engine/renderers/Indicator/ma.ts +2 -2
  469. package/src/engine/renderers/Indicator/macd.ts +40 -40
  470. package/src/engine/renderers/Indicator/mfi.ts +3 -3
  471. package/src/engine/renderers/Indicator/mom.ts +4 -4
  472. package/src/engine/renderers/Indicator/obv.ts +3 -3
  473. package/src/engine/renderers/Indicator/parkinson.ts +5 -5
  474. package/src/engine/renderers/Indicator/pivot.ts +4 -4
  475. package/src/engine/renderers/Indicator/pvt.ts +3 -3
  476. package/src/engine/renderers/Indicator/roc.ts +3 -3
  477. package/src/engine/renderers/Indicator/rsi.ts +4 -4
  478. package/src/engine/renderers/Indicator/sar.ts +3 -3
  479. package/src/engine/renderers/Indicator/stoch.ts +4 -4
  480. package/src/engine/renderers/Indicator/structure.ts +24 -24
  481. package/src/engine/renderers/Indicator/supertrend.ts +4 -4
  482. package/src/engine/renderers/Indicator/tema.ts +3 -3
  483. package/src/engine/renderers/Indicator/trix.ts +34 -34
  484. package/src/engine/renderers/Indicator/vma.ts +3 -3
  485. package/src/engine/renderers/Indicator/volumeProfile.ts +28 -28
  486. package/src/engine/renderers/Indicator/vwap.ts +3 -3
  487. package/src/engine/renderers/Indicator/wma.ts +3 -3
  488. package/src/engine/renderers/Indicator/wmsr.ts +3 -3
  489. package/src/engine/renderers/Indicator/zones.ts +6 -6
  490. package/src/engine/renderers/__tests__/boll.renderer.test.ts +1 -1
  491. package/src/engine/renderers/__tests__/ene.renderer.test.ts +1 -1
  492. package/src/engine/renderers/__tests__/expma.renderer.test.ts +1 -1
  493. package/src/engine/renderers/__tests__/ma.renderer.test.ts +1 -1
  494. package/src/engine/renderers/__tests__/mainIndicatorLegend.renderer.test.ts +4 -4
  495. package/src/engine/renderers/__tests__/yAxis.renderer.test.ts +30 -26
  496. package/src/engine/renderers/candle.ts +112 -70
  497. package/src/engine/renderers/extremaMarkers.ts +5 -3
  498. package/src/engine/renderers/gridLines.ts +8 -37
  499. package/src/engine/renderers/leftYAxis.ts +61 -22
  500. package/src/engine/renderers/timeAxis.ts +2 -0
  501. package/src/engine/renderers/timeShare.ts +10 -10
  502. package/src/engine/renderers/yAxis.ts +19 -23
  503. package/src/engine/utils/tickPosition.ts +34 -0
  504. package/src/engine/viewport/chartViewportManager.ts +66 -36
  505. package/src/mcp/chartBridge.ts +1 -1
  506. package/src/plugin/types.ts +14 -0
  507. package/src/utils/__tests__/dateFormat.test.ts +164 -0
  508. package/src/utils/dateFormat.ts +12 -6
  509. package/src/utils/kLineDraw/axis.ts +6 -2
  510. package/src/utils/volumePrice.ts +19 -3
  511. package/src/version.ts +1 -1
  512. package/dist/engine/indicators/atrState.d.ts.map +0 -1
  513. package/dist/engine/indicators/atrState.js.map +0 -1
  514. package/dist/engine/indicators/bollState.d.ts.map +0 -1
  515. package/dist/engine/indicators/bollState.js.map +0 -1
  516. package/dist/engine/indicators/cciState.d.ts.map +0 -1
  517. package/dist/engine/indicators/cciState.js.map +0 -1
  518. package/dist/engine/indicators/chaikinVolState.d.ts.map +0 -1
  519. package/dist/engine/indicators/chaikinVolState.js.map +0 -1
  520. package/dist/engine/indicators/cmfState.d.ts.map +0 -1
  521. package/dist/engine/indicators/cmfState.js.map +0 -1
  522. package/dist/engine/indicators/demaState.d.ts.map +0 -1
  523. package/dist/engine/indicators/demaState.js.map +0 -1
  524. package/dist/engine/indicators/donchianState.d.ts.map +0 -1
  525. package/dist/engine/indicators/donchianState.js.map +0 -1
  526. package/dist/engine/indicators/eneState.d.ts.map +0 -1
  527. package/dist/engine/indicators/eneState.js.map +0 -1
  528. package/dist/engine/indicators/expmaState.d.ts.map +0 -1
  529. package/dist/engine/indicators/expmaState.js.map +0 -1
  530. package/dist/engine/indicators/fastkState.d.ts.map +0 -1
  531. package/dist/engine/indicators/fastkState.js.map +0 -1
  532. package/dist/engine/indicators/fibState.d.ts.map +0 -1
  533. package/dist/engine/indicators/fibState.js.map +0 -1
  534. package/dist/engine/indicators/hmaState.d.ts.map +0 -1
  535. package/dist/engine/indicators/hmaState.js.map +0 -1
  536. package/dist/engine/indicators/hvState.d.ts.map +0 -1
  537. package/dist/engine/indicators/hvState.js.map +0 -1
  538. package/dist/engine/indicators/ichimokuState.d.ts.map +0 -1
  539. package/dist/engine/indicators/ichimokuState.js.map +0 -1
  540. package/dist/engine/indicators/kamaState.d.ts.map +0 -1
  541. package/dist/engine/indicators/kamaState.js.map +0 -1
  542. package/dist/engine/indicators/keltnerState.d.ts.map +0 -1
  543. package/dist/engine/indicators/keltnerState.js.map +0 -1
  544. package/dist/engine/indicators/kstState.d.ts.map +0 -1
  545. package/dist/engine/indicators/kstState.js.map +0 -1
  546. package/dist/engine/indicators/maState.d.ts.map +0 -1
  547. package/dist/engine/indicators/maState.js.map +0 -1
  548. package/dist/engine/indicators/macdState.d.ts.map +0 -1
  549. package/dist/engine/indicators/macdState.js.map +0 -1
  550. package/dist/engine/indicators/mfiState.d.ts.map +0 -1
  551. package/dist/engine/indicators/mfiState.js.map +0 -1
  552. package/dist/engine/indicators/momState.d.ts.map +0 -1
  553. package/dist/engine/indicators/momState.js.map +0 -1
  554. package/dist/engine/indicators/obvState.d.ts.map +0 -1
  555. package/dist/engine/indicators/obvState.js.map +0 -1
  556. package/dist/engine/indicators/parkinsonState.d.ts.map +0 -1
  557. package/dist/engine/indicators/parkinsonState.js.map +0 -1
  558. package/dist/engine/indicators/pivotState.d.ts.map +0 -1
  559. package/dist/engine/indicators/pivotState.js.map +0 -1
  560. package/dist/engine/indicators/pvtState.d.ts.map +0 -1
  561. package/dist/engine/indicators/pvtState.js.map +0 -1
  562. package/dist/engine/indicators/rocState.d.ts.map +0 -1
  563. package/dist/engine/indicators/rocState.js.map +0 -1
  564. package/dist/engine/indicators/rsiState.d.ts.map +0 -1
  565. package/dist/engine/indicators/rsiState.js.map +0 -1
  566. package/dist/engine/indicators/sarState.d.ts.map +0 -1
  567. package/dist/engine/indicators/sarState.js.map +0 -1
  568. package/dist/engine/indicators/stochState.d.ts.map +0 -1
  569. package/dist/engine/indicators/stochState.js.map +0 -1
  570. package/dist/engine/indicators/structureState.d.ts.map +0 -1
  571. package/dist/engine/indicators/structureState.js.map +0 -1
  572. package/dist/engine/indicators/supertrendState.d.ts.map +0 -1
  573. package/dist/engine/indicators/supertrendState.js.map +0 -1
  574. package/dist/engine/indicators/temaState.d.ts.map +0 -1
  575. package/dist/engine/indicators/temaState.js.map +0 -1
  576. package/dist/engine/indicators/trixState.d.ts.map +0 -1
  577. package/dist/engine/indicators/trixState.js.map +0 -1
  578. package/dist/engine/indicators/vmaState.d.ts.map +0 -1
  579. package/dist/engine/indicators/vmaState.js.map +0 -1
  580. package/dist/engine/indicators/volumeProfileState.d.ts.map +0 -1
  581. package/dist/engine/indicators/volumeProfileState.js.map +0 -1
  582. package/dist/engine/indicators/vwapState.d.ts.map +0 -1
  583. package/dist/engine/indicators/vwapState.js.map +0 -1
  584. package/dist/engine/indicators/wmaState.d.ts.map +0 -1
  585. package/dist/engine/indicators/wmaState.js.map +0 -1
  586. package/dist/engine/indicators/wmsrState.d.ts.map +0 -1
  587. package/dist/engine/indicators/wmsrState.js.map +0 -1
  588. package/dist/engine/indicators/zonesState.d.ts.map +0 -1
  589. package/dist/engine/indicators/zonesState.js.map +0 -1
  590. /package/dist/engine/indicators/{macdState.js → state/macdState.js} +0 -0
@@ -1,7 +1,12 @@
1
- import { describe, expect, it, vi } from 'vitest'
1
+ import { describe, expect, it, vi, beforeEach } from 'vitest'
2
2
  import { IndicatorRegistry } from '../indicatorRegistry'
3
+ import { clearRegisteredIndicatorDefinitionsForTest } from '../indicatorDefinitionRegistry'
3
4
  import type { IndicatorMetadata } from '../indicatorMetadata'
4
5
 
6
+ beforeEach(() => {
7
+ clearRegisteredIndicatorDefinitionsForTest()
8
+ })
9
+
5
10
  function createMeta(overrides: Partial<IndicatorMetadata> = {}): IndicatorMetadata {
6
11
  return {
7
12
  name: 'rsi',
@@ -17,7 +22,7 @@ function createMeta(overrides: Partial<IndicatorMetadata> = {}): IndicatorMetada
17
22
 
18
23
  describe('IndicatorRegistry', () => {
19
24
  it('resolves indicators by name, displayName, aliases, and case-insensitive ids', () => {
20
- const registry = new IndicatorRegistry()
25
+ const registry = new IndicatorRegistry(false)
21
26
  const meta = createMeta()
22
27
 
23
28
  registry.register(meta)
@@ -30,7 +35,7 @@ describe('IndicatorRegistry', () => {
30
35
  })
31
36
 
32
37
  it('throws for missing required metadata fields', () => {
33
- const registry = new IndicatorRegistry()
38
+ const registry = new IndicatorRegistry(false)
34
39
 
35
40
  expect(() => registry.register(createMeta({ name: '' }))).toThrow('Indicator name is required')
36
41
  expect(() => registry.register(createMeta({ displayName: '' }))).toThrow("displayName is required")
@@ -38,7 +43,7 @@ describe('IndicatorRegistry', () => {
38
43
  })
39
44
 
40
45
  it('replaces old aliases when unregistering', () => {
41
- const registry = new IndicatorRegistry()
46
+ const registry = new IndicatorRegistry(false)
42
47
  const meta = createMeta()
43
48
 
44
49
  registry.register(meta)
@@ -51,7 +56,7 @@ describe('IndicatorRegistry', () => {
51
56
  })
52
57
 
53
58
  it('returns required metadata or throws a descriptive error', () => {
54
- const registry = new IndicatorRegistry()
59
+ const registry = new IndicatorRegistry(false)
55
60
  const meta = createMeta()
56
61
 
57
62
  registry.register(meta)
@@ -1,11 +1,11 @@
1
1
  import { describe, it, expect, vi, beforeEach, beforeAll } from 'vitest'
2
2
  import { IndicatorScheduler } from '../scheduler'
3
3
  import { getBuiltinIndicatorDefinitions, loadBuiltinIndicators } from '../registerBuiltins'
4
- import { MA_STATE_KEY, EMPTY_MA_STATE, type MARenderState } from '../maState'
5
- import { BOLL_STATE_KEY, EMPTY_BOLL_STATE, type BOLLRenderState } from '../bollState'
6
- import { EXPMA_STATE_KEY, EMPTY_EXPMA_STATE, type EXPMARenderState } from '../expmaState'
7
- import { ENE_STATE_KEY, EMPTY_ENE_STATE, type ENERenderState } from '../eneState'
8
- import { createRSIStateKey, EMPTY_RSI_STATE, type RSIRenderState } from '../rsiState'
4
+ import { MA_STATE_KEY, EMPTY_MA_STATE, type MARenderState } from '../state/maState'
5
+ import { BOLL_STATE_KEY, EMPTY_BOLL_STATE, type BOLLRenderState } from '../state/bollState'
6
+ import { EXPMA_STATE_KEY, EMPTY_EXPMA_STATE, type EXPMARenderState } from '../state/expmaState'
7
+ import { ENE_STATE_KEY, EMPTY_ENE_STATE, type ENERenderState } from '../state/eneState'
8
+ import { createRSIStateKey, EMPTY_RSI_STATE, type RSIRenderState } from '../state/rsiState'
9
9
  import type { IndicatorMetadata } from '../indicatorMetadata'
10
10
  import type { KLineData } from '@/types/price'
11
11
  import type { PluginHost } from '@/plugin'
@@ -131,7 +131,7 @@ describe('IndicatorScheduler', () => {
131
131
  let mockHost: PluginHost
132
132
 
133
133
  beforeEach(() => {
134
- scheduler = new IndicatorScheduler()
134
+ scheduler = new IndicatorScheduler(false)
135
135
  mockHost = createMockPluginHost()
136
136
  scheduler.setPluginHost(mockHost)
137
137
  registerTestIndicators(scheduler)
@@ -144,7 +144,7 @@ describe('IndicatorScheduler', () => {
144
144
  })
145
145
 
146
146
  it('should accept plugin host', () => {
147
- const newScheduler = new IndicatorScheduler()
147
+ const newScheduler = new IndicatorScheduler(false)
148
148
  newScheduler.setPluginHost(mockHost)
149
149
  // Should not throw
150
150
  expect(() => newScheduler.recompute()).not.toThrow()
@@ -426,7 +426,7 @@ describe('BOLL State in scheduler', () => {
426
426
  let mockHost: PluginHost
427
427
 
428
428
  beforeEach(() => {
429
- scheduler = new IndicatorScheduler()
429
+ scheduler = new IndicatorScheduler(false)
430
430
  mockHost = createMockPluginHost()
431
431
  scheduler.setPluginHost(mockHost)
432
432
  registerTestIndicators(scheduler)
@@ -509,7 +509,7 @@ describe('EXPMA State in scheduler', () => {
509
509
  let mockHost: PluginHost
510
510
 
511
511
  beforeEach(() => {
512
- scheduler = new IndicatorScheduler()
512
+ scheduler = new IndicatorScheduler(false)
513
513
  mockHost = createMockPluginHost()
514
514
  scheduler.setPluginHost(mockHost)
515
515
  registerTestIndicators(scheduler)
@@ -563,7 +563,7 @@ describe('ENE State in scheduler', () => {
563
563
  let mockHost: PluginHost
564
564
 
565
565
  beforeEach(() => {
566
- scheduler = new IndicatorScheduler()
566
+ scheduler = new IndicatorScheduler(false)
567
567
  mockHost = createMockPluginHost()
568
568
  scheduler.setPluginHost(mockHost)
569
569
  registerTestIndicators(scheduler)
@@ -620,7 +620,7 @@ describe('Per-indicator dirty flags', () => {
620
620
  let mockHost: PluginHost
621
621
 
622
622
  beforeEach(() => {
623
- scheduler = new IndicatorScheduler()
623
+ scheduler = new IndicatorScheduler(false)
624
624
  mockHost = createMockPluginHost()
625
625
  scheduler.setPluginHost(mockHost)
626
626
  registerTestIndicators(scheduler)
@@ -769,7 +769,7 @@ describe('RSI State in scheduler', () => {
769
769
  let mockHost: PluginHost
770
770
 
771
771
  beforeEach(() => {
772
- scheduler = new IndicatorScheduler()
772
+ scheduler = new IndicatorScheduler(false)
773
773
  mockHost = createMockPluginHost()
774
774
  scheduler.setPluginHost(mockHost)
775
775
  registerTestIndicators(scheduler)
@@ -9,30 +9,64 @@ import {
9
9
  } from '../soa'
10
10
  import {
11
11
  calcBOLLData,
12
- calcBOLLDataSoA,
13
12
  calcEXPMAData,
14
- calcEXPMADataSoA,
15
13
  calcENEData,
16
- calcENEDataSoA,
17
14
  calcMAData,
18
- calcMADataSoA,
19
15
  calcRSIData,
20
- calcRSIDataSoA,
21
16
  calcCCIData,
22
- calcCCIDataSoA,
23
17
  calcSTOCHData,
24
- calcSTOCHDataSoA,
25
18
  calcMOMData,
26
- calcMOMDataSoA,
27
19
  calcWMSRData,
28
- calcWMSRDataSoA,
29
20
  calcKSTData,
30
- calcKSTDataSoA,
31
21
  calcFASTKData,
32
- calcFASTKDataSoA,
33
22
  calcMACDData,
34
- calcMACDDataSoA,
35
23
  } from '../calculators'
24
+ import type {
25
+ BOLLPoint,
26
+ EXPMAPoint,
27
+ ENEPoint,
28
+ STOCHPoint,
29
+ KSTPoint,
30
+ MACDPoint,
31
+ } from '../calculators'
32
+
33
+ // SoA wrapper functions (test-only — convert SoA → AoS before computing)
34
+ function calcBOLLDataSoA(layout: KLineSoALayout, period: number, multiplier: number): BOLLPoint[] {
35
+ return calcBOLLData(SharedKLineBuffer.toKLineData(layout), period, multiplier)
36
+ }
37
+ function calcEXPMADataSoA(layout: KLineSoALayout, fastPeriod: number, slowPeriod: number): EXPMAPoint[] {
38
+ return calcEXPMAData(SharedKLineBuffer.toKLineData(layout), fastPeriod, slowPeriod)
39
+ }
40
+ function calcENEDataSoA(layout: KLineSoALayout, period: number, deviation: number): ENEPoint[] {
41
+ return calcENEData(SharedKLineBuffer.toKLineData(layout), period, deviation)
42
+ }
43
+ function calcMADataSoA(layout: KLineSoALayout, period: number): (number | undefined)[] {
44
+ return calcMAData(SharedKLineBuffer.toKLineData(layout), period)
45
+ }
46
+ function calcRSIDataSoA(layout: KLineSoALayout, period: number): (number | undefined)[] {
47
+ return calcRSIData(SharedKLineBuffer.toKLineData(layout), period)
48
+ }
49
+ function calcCCIDataSoA(layout: KLineSoALayout, period: number): (number | undefined)[] {
50
+ return calcCCIData(SharedKLineBuffer.toKLineData(layout), period)
51
+ }
52
+ function calcSTOCHDataSoA(layout: KLineSoALayout, n: number, m: number): STOCHPoint[] {
53
+ return calcSTOCHData(SharedKLineBuffer.toKLineData(layout), n, m)
54
+ }
55
+ function calcMOMDataSoA(layout: KLineSoALayout, period: number): (number | undefined)[] {
56
+ return calcMOMData(SharedKLineBuffer.toKLineData(layout), period)
57
+ }
58
+ function calcWMSRDataSoA(layout: KLineSoALayout, period: number): (number | undefined)[] {
59
+ return calcWMSRData(SharedKLineBuffer.toKLineData(layout), period)
60
+ }
61
+ function calcKSTDataSoA(layout: KLineSoALayout, roc1: number, roc2: number, roc3: number, roc4: number, signalPeriod: number): KSTPoint[] {
62
+ return calcKSTData(SharedKLineBuffer.toKLineData(layout), roc1, roc2, roc3, roc4, signalPeriod)
63
+ }
64
+ function calcFASTKDataSoA(layout: KLineSoALayout, period: number): (number | undefined)[] {
65
+ return calcFASTKData(SharedKLineBuffer.toKLineData(layout), period)
66
+ }
67
+ function calcMACDDataSoA(layout: KLineSoALayout, fastPeriod: number, slowPeriod: number, signalPeriod: number): MACDPoint[] {
68
+ return calcMACDData(SharedKLineBuffer.toKLineData(layout), fastPeriod, slowPeriod, signalPeriod)
69
+ }
36
70
 
37
71
  /**
38
72
  * 生成测试用的 K线数据
@@ -0,0 +1,44 @@
1
+ export function _computeEMASeries(values: (number | undefined)[], period: number): (number | undefined)[] {
2
+ const n = values.length
3
+ const result: (number | undefined)[] = new Array(n).fill(undefined)
4
+ if (n === 0 || period <= 0) return result
5
+
6
+ const alpha = 2 / (period + 1)
7
+
8
+ let i = 0
9
+ while (i < n && values[i] === undefined) i++
10
+ if (i >= n) return result
11
+
12
+ let ema = values[i]!
13
+ result[i] = ema
14
+ for (let t = i + 1; t < n; t++) {
15
+ const v = values[t]
16
+ if (v === undefined) continue
17
+ ema = v * alpha + ema * (1 - alpha)
18
+ result[t] = ema
19
+ }
20
+ return result
21
+ }
22
+
23
+ export function _computeWMAOnNumbers(values: (number | undefined)[], period: number): (number | undefined)[] {
24
+ const n = values.length
25
+ const result: (number | undefined)[] = new Array(n).fill(undefined)
26
+ if (n === 0 || period <= 0 || n < period) return result
27
+
28
+ const denom = (period * (period + 1)) / 2
29
+
30
+ for (let t = period - 1; t < n; t++) {
31
+ let sw = 0
32
+ let valid = true
33
+ for (let k = 0; k < period; k++) {
34
+ const v = values[t - period + 1 + k]
35
+ if (v === undefined) {
36
+ valid = false
37
+ break
38
+ }
39
+ sw += (k + 1) * v
40
+ }
41
+ if (valid) result[t] = sw / denom
42
+ }
43
+ return result
44
+ }
@@ -0,0 +1,365 @@
1
+ import type { KLineData } from '../../../types/price'
2
+ import { _computeEMASeries } from './_shared'
3
+ import { calcATRData } from './volatility'
4
+
5
+ export interface BOLLPoint {
6
+ upper: number
7
+ middle: number
8
+ lower: number
9
+ }
10
+
11
+ export function calcBOLLData(
12
+ data: KLineData[],
13
+ period: number,
14
+ multiplier: number
15
+ ): BOLLPoint[] {
16
+ const result: BOLLPoint[] = new Array(data.length)
17
+
18
+ if (data.length < period) return result
19
+
20
+ let sum = 0
21
+ const window: number[] = []
22
+
23
+ for (let i = 0; i < period; i++) {
24
+ const item = data[i]
25
+ if (!item) return result
26
+ const close = item.close
27
+ window.push(close)
28
+ sum += close
29
+ }
30
+
31
+ for (let i = period - 1; i < data.length; i++) {
32
+ const item = data[i]
33
+ if (!item) continue
34
+
35
+ if (i >= period) {
36
+ const oldVal = window.shift()
37
+ if (oldVal !== undefined) sum -= oldVal
38
+ const close = item.close
39
+ window.push(close)
40
+ sum += close
41
+ }
42
+
43
+ const ma = sum / period
44
+
45
+ let variance = 0
46
+ for (let j = 0; j < period; j++) {
47
+ const wVal = window[j]
48
+ if (wVal !== undefined) {
49
+ variance += Math.pow(wVal - ma, 2)
50
+ }
51
+ }
52
+ const stdDev = Math.sqrt(variance / period)
53
+
54
+ result[i] = {
55
+ upper: ma + multiplier * stdDev,
56
+ middle: ma,
57
+ lower: ma - multiplier * stdDev,
58
+ }
59
+ }
60
+
61
+ return result
62
+ }
63
+
64
+ export interface ENEPoint {
65
+ upper: number
66
+ middle: number
67
+ lower: number
68
+ }
69
+
70
+ export function calcENEData(
71
+ data: KLineData[],
72
+ period: number,
73
+ deviation: number
74
+ ): ENEPoint[] {
75
+ const result: ENEPoint[] = new Array(data.length)
76
+
77
+ if (data.length < period) return result
78
+
79
+ let sum = 0
80
+
81
+ for (let i = 0; i < period; i++) {
82
+ const item = data[i]
83
+ if (!item) return result
84
+ sum += item.close
85
+ }
86
+
87
+ const firstMA = sum / period
88
+ const firstDeviation = deviation / 100
89
+ result[period - 1] = {
90
+ upper: firstMA * (1 + firstDeviation),
91
+ middle: firstMA,
92
+ lower: firstMA * (1 - firstDeviation),
93
+ }
94
+
95
+ for (let i = period; i < data.length; i++) {
96
+ const prevItem = data[i - period]
97
+ const currItem = data[i]
98
+ if (!prevItem || !currItem) continue
99
+
100
+ sum = sum - prevItem.close + currItem.close
101
+ const ma = sum / period
102
+ const dev = deviation / 100
103
+
104
+ result[i] = {
105
+ upper: ma * (1 + dev),
106
+ middle: ma,
107
+ lower: ma * (1 - dev),
108
+ }
109
+ }
110
+
111
+ return result
112
+ }
113
+
114
+ export interface SARPoint {
115
+ value: number
116
+ trend: 'up' | 'down'
117
+ }
118
+
119
+ export function calcSARData(
120
+ data: KLineData[],
121
+ step: number,
122
+ maxStep: number,
123
+ ): (SARPoint | undefined)[] {
124
+ const n = data.length
125
+ const result: (SARPoint | undefined)[] = new Array(n).fill(undefined)
126
+ if (n < 2 || step <= 0 || maxStep <= 0) return result
127
+
128
+ let trend: 'up' | 'down' = data[1]!.close >= data[0]!.close ? 'up' : 'down'
129
+ let sar = trend === 'up' ? data[0]!.low : data[0]!.high
130
+ let ep = trend === 'up' ? data[0]!.high : data[0]!.low
131
+ let af = step
132
+
133
+ result[0] = { value: sar, trend }
134
+
135
+ for (let t = 1; t < n; t++) {
136
+ const bar = data[t]!
137
+ sar = sar + af * (ep - sar)
138
+
139
+ if (trend === 'up') {
140
+ const cap1 = data[t - 1]!.low
141
+ const cap2 = t >= 2 ? data[t - 2]!.low : cap1
142
+ sar = Math.min(sar, cap1, cap2)
143
+ } else {
144
+ const cap1 = data[t - 1]!.high
145
+ const cap2 = t >= 2 ? data[t - 2]!.high : cap1
146
+ sar = Math.max(sar, cap1, cap2)
147
+ }
148
+
149
+ if (trend === 'up' && bar.low < sar) {
150
+ trend = 'down'
151
+ sar = ep
152
+ ep = bar.low
153
+ af = step
154
+ } else if (trend === 'down' && bar.high > sar) {
155
+ trend = 'up'
156
+ sar = ep
157
+ ep = bar.high
158
+ af = step
159
+ } else {
160
+ if (trend === 'up' && bar.high > ep) {
161
+ ep = bar.high
162
+ af = Math.min(af + step, maxStep)
163
+ } else if (trend === 'down' && bar.low < ep) {
164
+ ep = bar.low
165
+ af = Math.min(af + step, maxStep)
166
+ }
167
+ }
168
+
169
+ result[t] = { value: sar, trend }
170
+ }
171
+
172
+ return result
173
+ }
174
+
175
+ export interface SuperTrendPoint {
176
+ value: number
177
+ trend: 'up' | 'down'
178
+ }
179
+
180
+ export function calcSuperTrendData(
181
+ data: KLineData[],
182
+ atrPeriod: number,
183
+ multiplier: number,
184
+ ): (SuperTrendPoint | undefined)[] {
185
+ const n = data.length
186
+ const result: (SuperTrendPoint | undefined)[] = new Array(n).fill(undefined)
187
+ if (n === 0 || atrPeriod <= 0 || multiplier <= 0) return result
188
+
189
+ const atr = calcATRData(data, atrPeriod)
190
+
191
+ let trend: 'up' | 'down' = 'up'
192
+ let prevUpper = Infinity
193
+ let prevLower = -Infinity
194
+
195
+ for (let t = 0; t < n; t++) {
196
+ const bar = data[t]!
197
+ const a = atr[t]
198
+ if (a === undefined) continue
199
+
200
+ const hl2 = (bar.high + bar.low) / 2
201
+ const upperBasic = hl2 + multiplier * a
202
+ const lowerBasic = hl2 - multiplier * a
203
+
204
+ const prevClose = t > 0 ? data[t - 1]!.close : bar.close
205
+ const upper = (upperBasic < prevUpper || prevClose > prevUpper) ? upperBasic : prevUpper
206
+ const lower = (lowerBasic > prevLower || prevClose < prevLower) ? lowerBasic : prevLower
207
+
208
+ if (trend === 'up' && bar.close < lower) {
209
+ trend = 'down'
210
+ } else if (trend === 'down' && bar.close > upper) {
211
+ trend = 'up'
212
+ }
213
+
214
+ result[t] = { value: trend === 'up' ? lower : upper, trend }
215
+
216
+ prevUpper = upper
217
+ prevLower = lower
218
+ }
219
+
220
+ return result
221
+ }
222
+
223
+ export interface KeltnerPoint {
224
+ upper: number
225
+ middle: number
226
+ lower: number
227
+ }
228
+
229
+ export function calcKeltnerData(
230
+ data: KLineData[],
231
+ emaPeriod: number,
232
+ atrPeriod: number,
233
+ multiplier: number,
234
+ ): (KeltnerPoint | undefined)[] {
235
+ const n = data.length
236
+ const result: (KeltnerPoint | undefined)[] = new Array(n).fill(undefined)
237
+ if (n === 0 || emaPeriod <= 0 || atrPeriod <= 0) return result
238
+
239
+ const closes = new Array<number | undefined>(n)
240
+ for (let i = 0; i < n; i++) closes[i] = data[i]!.close
241
+
242
+ const ema = _computeEMASeries(closes, emaPeriod)
243
+ const atr = calcATRData(data, atrPeriod)
244
+
245
+ for (let t = 0; t < n; t++) {
246
+ const m = ema[t]
247
+ const a = atr[t]
248
+ if (m === undefined || a === undefined) continue
249
+ result[t] = {
250
+ upper: m + multiplier * a,
251
+ middle: m,
252
+ lower: m - multiplier * a,
253
+ }
254
+ }
255
+ return result
256
+ }
257
+
258
+ export interface DonchianPoint {
259
+ upper: number
260
+ middle: number
261
+ lower: number
262
+ }
263
+
264
+ export function calcDonchianData(
265
+ data: KLineData[],
266
+ period: number,
267
+ ): (DonchianPoint | undefined)[] {
268
+ const n = data.length
269
+ const result: (DonchianPoint | undefined)[] = new Array(n).fill(undefined)
270
+ if (n === 0 || period <= 0 || n < period) return result
271
+
272
+ for (let t = period - 1; t < n; t++) {
273
+ let hi = -Infinity
274
+ let lo = Infinity
275
+ for (let k = 0; k < period; k++) {
276
+ const bar = data[t - k]!
277
+ if (bar.high > hi) hi = bar.high
278
+ if (bar.low < lo) lo = bar.low
279
+ }
280
+ result[t] = { upper: hi, middle: (hi + lo) / 2, lower: lo }
281
+ }
282
+ return result
283
+ }
284
+
285
+ export interface IchimokuPoint {
286
+ tenkan?: number
287
+ kijun?: number
288
+ spanA?: number
289
+ spanB?: number
290
+ chikou?: number
291
+ }
292
+
293
+ function _rollingMidline(data: KLineData[], period: number): (number | undefined)[] {
294
+ const n = data.length
295
+ const result: (number | undefined)[] = new Array(n).fill(undefined)
296
+ if (n < period || period <= 0) return result
297
+ for (let t = period - 1; t < n; t++) {
298
+ let hi = -Infinity
299
+ let lo = Infinity
300
+ for (let k = 0; k < period; k++) {
301
+ const bar = data[t - k]!
302
+ if (bar.high > hi) hi = bar.high
303
+ if (bar.low < lo) lo = bar.low
304
+ }
305
+ result[t] = (hi + lo) / 2
306
+ }
307
+ return result
308
+ }
309
+
310
+ export function calcIchimokuData(
311
+ data: KLineData[],
312
+ tenkanPeriod: number,
313
+ kijunPeriod: number,
314
+ spanBPeriod: number,
315
+ displacement: number,
316
+ ): (IchimokuPoint | undefined)[] {
317
+ const n = data.length
318
+ const totalLen = n + displacement
319
+ const result: (IchimokuPoint | undefined)[] = new Array(totalLen).fill(undefined)
320
+ if (n === 0 || tenkanPeriod <= 0 || kijunPeriod <= 0 || spanBPeriod <= 0) {
321
+ return result.slice(0, n)
322
+ }
323
+
324
+ const tenkan = _rollingMidline(data, tenkanPeriod)
325
+ const kijun = _rollingMidline(data, kijunPeriod)
326
+ const spanBSource = _rollingMidline(data, spanBPeriod)
327
+
328
+ for (let t = 0; t < n; t++) {
329
+ const point: IchimokuPoint = {}
330
+ if (tenkan[t] !== undefined) point.tenkan = tenkan[t]
331
+ if (kijun[t] !== undefined) point.kijun = kijun[t]
332
+
333
+ const src = t - displacement
334
+ if (src >= 0) {
335
+ if (tenkan[src] !== undefined && kijun[src] !== undefined) {
336
+ point.spanA = (tenkan[src]! + kijun[src]!) / 2
337
+ }
338
+ if (spanBSource[src] !== undefined) {
339
+ point.spanB = spanBSource[src]
340
+ }
341
+ }
342
+
343
+ const future = t + displacement
344
+ if (future < n) point.chikou = data[future]!.close
345
+
346
+ result[t] = point
347
+ }
348
+
349
+ for (let f = 0; f < displacement; f++) {
350
+ const t = n + f
351
+ const src = t - displacement
352
+ const point: IchimokuPoint = {}
353
+ if (src >= 0 && src < n) {
354
+ if (tenkan[src] !== undefined && kijun[src] !== undefined) {
355
+ point.spanA = (tenkan[src]! + kijun[src]!) / 2
356
+ }
357
+ if (spanBSource[src] !== undefined) {
358
+ point.spanB = spanBSource[src]
359
+ }
360
+ }
361
+ result[t] = point
362
+ }
363
+
364
+ return result
365
+ }
@@ -0,0 +1,37 @@
1
+ export type { MAFlags } from './movingAverages'
2
+ export { DEFAULT_MA_PERIODS, calcMAData } from './movingAverages'
3
+ export type { EXPMAPoint } from './movingAverages'
4
+ export { calcEXPMAData, calcWMAData, calcDEMAData, calcTEMAData, calcHMAData, calcKAMAData } from './movingAverages'
5
+
6
+ export type { BOLLPoint } from './bands'
7
+ export { calcBOLLData } from './bands'
8
+ export type { ENEPoint } from './bands'
9
+ export { calcENEData } from './bands'
10
+ export type { SARPoint } from './bands'
11
+ export { calcSARData } from './bands'
12
+ export type { SuperTrendPoint } from './bands'
13
+ export { calcSuperTrendData } from './bands'
14
+ export type { KeltnerPoint } from './bands'
15
+ export { calcKeltnerData } from './bands'
16
+ export type { DonchianPoint } from './bands'
17
+ export { calcDonchianData } from './bands'
18
+ export type { IchimokuPoint } from './bands'
19
+ export { calcIchimokuData } from './bands'
20
+
21
+ export { calcRSIData, calcCCIData } from './oscillators'
22
+ export type { STOCHPoint } from './oscillators'
23
+ export { calcSTOCHData, calcMOMData, calcWMSRData } from './oscillators'
24
+ export type { KSTPoint, MACDPoint } from './oscillators'
25
+ export { calcKSTData, calcFASTKData, calcMACDData } from './oscillators'
26
+ export { calcROCData } from './oscillators'
27
+ export type { TRIXResult } from './oscillators'
28
+ export { calcTRIXData } from './oscillators'
29
+
30
+ export { calcATRData, calcHVData, calcParkinsonData, calcChaikinVolData } from './volatility'
31
+
32
+ export { calcVMAData, calcOBVData, calcPVTData, calcVWAPData, calcCMFData, calcMFIData } from './volume'
33
+ export type { VolumeProfileBin, VolumeProfileResult } from './volume'
34
+ export { calcVolumeProfileData } from './volume'
35
+
36
+ export type { PivotPoint, FibPoint, SwingPoint, StructureEventKind, StructureEvent, StructureSnapshot, ZoneKind, Zone } from './patterns'
37
+ export { calcPivotData, calcFibData, calcStructureData, calcZonesData } from './patterns'