@363045841yyt/klinechart 0.6.9 → 0.7.0

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 (87) hide show
  1. package/README.md +1 -0
  2. package/dist/favicon.ico +0 -0
  3. package/dist/index.cjs +5 -5
  4. package/dist/index.js +8980 -2945
  5. package/dist/klinechart.css +1 -1
  6. package/dist/mock-stock-data.json +1 -0
  7. package/dist/src/api/data/baostock.d.ts +4 -0
  8. package/dist/src/components/IndicatorSelector.vue.d.ts +0 -10
  9. package/dist/src/components/KLineChart.vue.d.ts +1 -1
  10. package/dist/src/config/chartSettings.d.ts +6 -0
  11. package/dist/src/core/chart.d.ts +43 -10
  12. package/dist/src/core/controller/interaction.d.ts +2 -30
  13. package/dist/src/core/controller/markerInteraction.d.ts +28 -0
  14. package/dist/src/core/controller/pinchTracker.d.ts +18 -0
  15. package/dist/src/core/controller/tooltipPosition.d.ts +21 -0
  16. package/dist/src/core/drawing/plugin.d.ts +19 -0
  17. package/dist/src/core/indicators/atrState.d.ts +16 -0
  18. package/dist/src/core/indicators/calculators.d.ts +196 -0
  19. package/dist/src/core/indicators/chaikinVolState.d.ts +18 -0
  20. package/dist/src/core/indicators/cmfState.d.ts +16 -0
  21. package/dist/src/core/indicators/demaState.d.ts +16 -0
  22. package/dist/src/core/indicators/donchianState.d.ts +23 -0
  23. package/dist/src/core/indicators/fibState.d.ts +26 -0
  24. package/dist/src/core/indicators/hmaState.d.ts +16 -0
  25. package/dist/src/core/indicators/hvState.d.ts +18 -0
  26. package/dist/src/core/indicators/ichimokuState.d.ts +44 -0
  27. package/dist/src/core/indicators/indicatorRuntime.d.ts +55 -0
  28. package/dist/src/core/indicators/kamaState.d.ts +20 -0
  29. package/dist/src/core/indicators/keltnerState.d.ts +27 -0
  30. package/dist/src/core/indicators/mfiState.d.ts +16 -0
  31. package/dist/src/core/indicators/obvState.d.ts +14 -0
  32. package/dist/src/core/indicators/parkinsonState.d.ts +18 -0
  33. package/dist/src/core/indicators/pivotState.d.ts +29 -0
  34. package/dist/src/core/indicators/pvtState.d.ts +14 -0
  35. package/dist/src/core/indicators/rocState.d.ts +16 -0
  36. package/dist/src/core/indicators/sarState.d.ts +26 -0
  37. package/dist/src/core/indicators/scheduler.d.ts +100 -2
  38. package/dist/src/core/indicators/stateComposer.d.ts +81 -0
  39. package/dist/src/core/indicators/structureState.d.ts +43 -0
  40. package/dist/src/core/indicators/supertrendState.d.ts +22 -0
  41. package/dist/src/core/indicators/temaState.d.ts +16 -0
  42. package/dist/src/core/indicators/trixState.d.ts +20 -0
  43. package/dist/src/core/indicators/vmaState.d.ts +16 -0
  44. package/dist/src/core/indicators/volumeProfileState.d.ts +34 -0
  45. package/dist/src/core/indicators/vwapState.d.ts +16 -0
  46. package/dist/src/core/indicators/wmaState.d.ts +16 -0
  47. package/dist/src/core/indicators/workerProtocol.d.ts +308 -1
  48. package/dist/src/core/indicators/zonesState.d.ts +26 -0
  49. package/dist/src/core/paneRenderer.d.ts +3 -1
  50. package/dist/src/core/renderers/Indicator/atr.d.ts +17 -0
  51. package/dist/src/core/renderers/Indicator/chaikinVol.d.ts +4 -0
  52. package/dist/src/core/renderers/Indicator/cmf.d.ts +4 -0
  53. package/dist/src/core/renderers/Indicator/dema.d.ts +5 -0
  54. package/dist/src/core/renderers/Indicator/donchian.d.ts +5 -0
  55. package/dist/src/core/renderers/Indicator/fib.d.ts +4 -0
  56. package/dist/src/core/renderers/Indicator/hma.d.ts +5 -0
  57. package/dist/src/core/renderers/Indicator/hv.d.ts +4 -0
  58. package/dist/src/core/renderers/Indicator/ichimoku.d.ts +5 -0
  59. package/dist/src/core/renderers/Indicator/index.d.ts +28 -1
  60. package/dist/src/core/renderers/Indicator/indicatorData.d.ts +13 -0
  61. package/dist/src/core/renderers/Indicator/kama.d.ts +5 -0
  62. package/dist/src/core/renderers/Indicator/keltner.d.ts +5 -0
  63. package/dist/src/core/renderers/Indicator/mfi.d.ts +4 -0
  64. package/dist/src/core/renderers/Indicator/obv.d.ts +4 -0
  65. package/dist/src/core/renderers/Indicator/parkinson.d.ts +4 -0
  66. package/dist/src/core/renderers/Indicator/pivot.d.ts +4 -0
  67. package/dist/src/core/renderers/Indicator/pvt.d.ts +4 -0
  68. package/dist/src/core/renderers/Indicator/roc.d.ts +5 -0
  69. package/dist/src/core/renderers/Indicator/sar.d.ts +5 -0
  70. package/dist/src/core/renderers/Indicator/scale/atr_scale.d.ts +11 -0
  71. package/dist/src/core/renderers/Indicator/structure.d.ts +4 -0
  72. package/dist/src/core/renderers/Indicator/subPaneConfig.d.ts +9 -0
  73. package/dist/src/core/renderers/Indicator/supertrend.d.ts +5 -0
  74. package/dist/src/core/renderers/Indicator/tema.d.ts +5 -0
  75. package/dist/src/core/renderers/Indicator/trix.d.ts +5 -0
  76. package/dist/src/core/renderers/Indicator/vma.d.ts +4 -0
  77. package/dist/src/core/renderers/Indicator/volumeProfile.d.ts +4 -0
  78. package/dist/src/core/renderers/Indicator/vwap.d.ts +4 -0
  79. package/dist/src/core/renderers/Indicator/wma.d.ts +5 -0
  80. package/dist/src/core/renderers/Indicator/zones.d.ts +4 -0
  81. package/dist/src/core/renderers/webgl/candleSurface.d.ts +16 -5
  82. package/dist/src/core/renderers/webgl/sharedWebGLSurface.d.ts +33 -0
  83. package/dist/src/core/subPaneManager.d.ts +22 -0
  84. package/dist/src/semantic/types.d.ts +95 -0
  85. package/dist/src/test-setup.d.ts +6 -0
  86. package/package.json +1 -1
  87. /package/dist/src/api/data/{baostock.test.d.ts → baostock.integration.test.d.ts} +0 -0
@@ -6,6 +6,7 @@ import { PaneRenderer } from './paneRenderer';
6
6
  import { MarkerManager, CustomMarkerEntity } from './marker/registry';
7
7
  import { getPhysicalKLineConfig, calcKWidthPx } from './utils/klineConfig';
8
8
  import { IndicatorScheduler } from './indicators/scheduler';
9
+ import { SubPaneEntry } from './subPaneManager';
9
10
  import { PluginHostImpl, RendererPlugin, RendererPluginWithHost, PaneRole, PaneCapabilities } from '../plugin';
10
11
  import { SubIndicatorType } from './renderers/Indicator';
11
12
  export { getPhysicalKLineConfig, calcKWidthPx };
@@ -123,6 +124,8 @@ export declare class Chart {
123
124
  private onViewportChange?;
124
125
  /** 共享 X 轴上下文缓存 */
125
126
  private xAxisCtx;
127
+ /** Chart 级共享 WebGL canvas/context */
128
+ private sharedWebGLSurface;
126
129
  /** pane 布局回流回调(Chart -> UI 单向) */
127
130
  private onPaneLayoutChange?;
128
131
  /** 数据变化回调(供外部同步 dataLength) */
@@ -139,17 +142,19 @@ export declare class Chart {
139
142
  private lastVisibleRange;
140
143
  /** Overlay 帧复用的最近主渲染结果 */
141
144
  private cachedDrawFrame;
145
+ /** 副图管理器 */
146
+ private subPaneManager;
142
147
  /** 当前激活的主图指标列表(如 ['boll', 'ma']) */
143
148
  private activeMainIndicators;
144
149
  /** 主图指标参数配置 */
145
150
  private mainIndicatorParams;
146
151
  /**
147
152
  * 启用主图指标
148
- * @param indicatorId 指标ID: 'MA' | 'BOLL' | 'EXPMA' | 'ENE'
153
+ * @param indicatorId 指标ID
149
154
  * @param params 可选的指标参数
150
155
  * @returns 是否成功启用
151
156
  */
152
- enableMainIndicator(indicatorId: string, params?: Record<string, number | boolean>): boolean;
157
+ enableMainIndicator(indicatorId: string, params?: Record<string, number | boolean | string>): boolean;
153
158
  /**
154
159
  * 禁用主图指标
155
160
  * @param indicatorId 指标ID
@@ -177,12 +182,12 @@ export declare class Chart {
177
182
  * @param indicatorId 指标ID
178
183
  * @param params 参数对象
179
184
  */
180
- updateMainIndicatorParams(indicatorId: string, params: Record<string, number | boolean>): void;
185
+ updateMainIndicatorParams(indicatorId: string, params: Record<string, number | boolean | string>): void;
181
186
  /**
182
187
  * 获取主图指标参数
183
188
  * @param indicatorId 指标ID
184
189
  */
185
- getMainIndicatorParams(indicatorId: string): Record<string, number | boolean> | null;
190
+ getMainIndicatorParams(indicatorId: string): Record<string, number | boolean | string> | null;
186
191
  /**
187
192
  * 清除所有主图指标
188
193
  */
@@ -237,6 +242,9 @@ export declare class Chart {
237
242
  * @param level 更新级别,决定渲染哪些层
238
243
  */
239
244
  draw(level?: UpdateLevel): void;
245
+ private prepareFrameData;
246
+ private renderPanes;
247
+ private renderXAxis;
240
248
  /**
241
249
  * 应用渲染状态(由 Vue/Store 层在状态更新后调用)
242
250
  * Chart 不拥有业务 SSOT,只负责接收参数并渲染
@@ -281,7 +289,7 @@ export declare class Chart {
281
289
  setPaneDefinitions(defs: PaneSpec[]): void;
282
290
  upsertPane(def: PaneSpec): void;
283
291
  removePaneDefinition(paneId: string): void;
284
- bindIndicatorToPane(paneId: string, indicatorId: SubIndicatorType, params?: Record<string, number | boolean>): void;
292
+ bindIndicatorToPane(paneId: string, indicatorId: SubIndicatorType, params?: Record<string, number | boolean | string>): void;
285
293
  /** 更新绘图对象 */
286
294
  setDrawings(drawings: import('../plugin').DrawingObject[]): void;
287
295
  /** 更新选中的绘图 ID */
@@ -308,28 +316,53 @@ export declare class Chart {
308
316
  * @param paneId pane 标识符
309
317
  */
310
318
  hasPane(paneId: string): boolean;
311
- /** 副图渲染器名称前缀 */
312
- private static readonly SUB_PANE_PREFIX;
313
319
  /**
314
320
  * 创建副图面板并注册指标渲染器
321
+ * @param paneId 副图实例标识符(如 'RSI_0', 'MACD_0')
315
322
  * @param indicatorId 指标类型
316
323
  * @param params 指标参数
317
324
  * @returns 是否创建成功
318
325
  */
319
- createSubPane(indicatorId: SubIndicatorType, params?: Record<string, number | boolean>): boolean;
326
+ createSubPane(paneId: string, indicatorId: SubIndicatorType, params?: Record<string, number | boolean | string>): boolean;
320
327
  /**
321
328
  * 移除副图面板及其渲染器
322
- * @param indicatorId 指标类型
329
+ * @param paneId 副图实例标识符
330
+ */
331
+ removeSubPane(paneId: string): void;
332
+ /**
333
+ * 替换副图的指标类型
334
+ * @param paneId 副图实例标识符
335
+ * @param newIndicatorId 新的指标类型
336
+ * @param params 新指标参数
337
+ */
338
+ replaceSubPaneIndicator(paneId: string, newIndicatorId: SubIndicatorType, params?: Record<string, number | boolean | string>): void;
339
+ /**
340
+ * 更新副图指标参数
341
+ * @param paneId 副图实例标识符
342
+ * @param params 新参数
323
343
  */
324
- removeSubPane(indicatorId: SubIndicatorType): void;
344
+ updateSubPaneParams(paneId: string, params: Record<string, unknown>): void;
325
345
  /**
326
346
  * 清除所有副图面板
327
347
  */
328
348
  clearSubPanes(): void;
329
349
  /**
330
350
  * 获取当前所有副图指标类型
351
+ * @deprecated 使用 getSubPaneEntries 获取完整信息
331
352
  */
332
353
  getSubPaneIndicators(): SubIndicatorType[];
354
+ /**
355
+ * 获取所有副图条目
356
+ */
357
+ getSubPaneEntries(): SubPaneEntry[];
358
+ /**
359
+ * 根据 paneId 获取副图条目
360
+ * @param paneId 副图实例标识符
361
+ */
362
+ getSubPaneEntry(paneId: string): SubPaneEntry | undefined;
363
+ private getDefaultSubPaneParams;
364
+ /** 副图渲染器名称前缀(保留向后兼容) */
365
+ private static readonly SUB_PANE_PREFIX;
333
366
  /**
334
367
  * 平移价格轴(用于主图区域上下拖动)
335
368
  * @param paneId 目标 pane ID
@@ -43,13 +43,7 @@ export declare class InteractionController {
43
43
  private hoveredRightAxisPaneId;
44
44
  /** [触屏]:触摸会话标记,避免触摸触发的模拟 mouse 事件干扰 */
45
45
  private isTouchSession;
46
- /** [触屏]:多点触摸跟踪,用于双指捏合缩放 */
47
- private activePointers;
48
- private lastPinchDistance;
49
- private pinchCenter;
50
- private isPinching;
51
- /** 捏合缩放回调 */
52
- private onPinchZoomCallback?;
46
+ private pinchTracker;
53
47
  /** 十字线位置 */
54
48
  crosshairPos: {
55
49
  x: number;
@@ -81,24 +75,7 @@ export declare class InteractionController {
81
75
  private onInteractionChangeCallback?;
82
76
  /** 用户设置 */
83
77
  private settings;
84
- /** 当前 hover 的 marker ID */
85
- hoveredMarkerId: string | null;
86
- /** 当前点击的 marker ID */
87
- clickedMarkerId: string | null;
88
- /** 当前 hover 的 marker 数据(供外部显示 tooltip 使用) */
89
- hoveredMarkerData: MarkerEntity | null;
90
- /** 当前点击的 marker 数据(供外部显示 tooltip 使用) */
91
- clickedMarkerData: MarkerEntity | null;
92
- /** marker hover 回调函数 */
93
- private onMarkerHoverCallback?;
94
- /** marker click 回调函数 */
95
- private onMarkerClickCallback?;
96
- /** 当前 hover 的自定义标记 */
97
- hoveredCustomMarker: CustomMarkerEntity | null;
98
- /** 自定义标记 hover 回调 */
99
- private onCustomMarkerHoverCallback?;
100
- /** 自定义标记 click 回调 */
101
- private onCustomMarkerClickCallback?;
78
+ private markerState;
102
79
  /** 当前帧的 K 线起始 x 坐标数组 */
103
80
  private kLinePositions;
104
81
  /** 当前帧的可见 K 线索引范围 */
@@ -108,7 +85,6 @@ export declare class InteractionController {
108
85
  /** K 线宽度(物理像素),用于计算 K 线中心偏移 */
109
86
  private kWidthPx;
110
87
  constructor(chart: Chart);
111
- /** 设置捏合缩放回调 */
112
88
  setOnPinchZoom(callback: (delta: number, centerX: number) => void): void;
113
89
  /** 更新用户设置 */
114
90
  updateSettings(settings: ChartSettings): void;
@@ -163,13 +139,9 @@ export declare class InteractionController {
163
139
  onRightAxisPointerLeave(e: PointerEvent): void;
164
140
  /** 检查是否正在拖拽 */
165
141
  isDraggingState(): boolean;
166
- /** 设置 marker hover 回调 */
167
142
  setOnMarkerHover(callback: (marker: MarkerEntity | null) => void): void;
168
- /** 设置 marker click 回调 */
169
143
  setOnMarkerClick(callback: (marker: MarkerEntity) => void): void;
170
- /** 设置自定义标记 hover 回调 */
171
144
  setOnCustomMarkerHover(callback: (marker: CustomMarkerEntity | null) => void): void;
172
- /** 设置自定义标记 click 回调 */
173
145
  setOnCustomMarkerClick(callback: (marker: CustomMarkerEntity) => void): void;
174
146
  /** 命中可拖拽分隔线(返回上方 paneId) */
175
147
  private hitTestPaneSeparator;
@@ -0,0 +1,28 @@
1
+ import { MarkerEntity, CustomMarkerEntity, MarkerManager } from '../marker/registry';
2
+ /** Marker交互状态,管理标记 hover/click 状态和回调,与 InteractionController 正交。 */
3
+ export declare class MarkerInteractionState {
4
+ hoveredMarkerId: string | null;
5
+ clickedMarkerId: string | null;
6
+ hoveredMarkerData: MarkerEntity | null;
7
+ clickedMarkerData: MarkerEntity | null;
8
+ hoveredCustomMarker: CustomMarkerEntity | null;
9
+ private onMarkerHoverCallback?;
10
+ private onMarkerClickCallback?;
11
+ private onCustomMarkerHoverCallback?;
12
+ private onCustomMarkerClickCallback?;
13
+ setOnMarkerHover(callback: (marker: MarkerEntity | null) => void): void;
14
+ setOnMarkerClick(callback: (marker: MarkerEntity) => void): void;
15
+ setOnCustomMarkerHover(callback: (marker: CustomMarkerEntity | null) => void): void;
16
+ setOnCustomMarkerClick(callback: (marker: CustomMarkerEntity) => void): void;
17
+ handleClick(hitMarker: MarkerEntity): void;
18
+ /** 从坐标更新 hover 状态。返回 true 表示命中 marker/custom-marker,调用方应跳过后续 hover 逻辑。 */
19
+ updateHoverFromPoint(worldX: number, mouseX: number, mouseY: number, markerManager: MarkerManager): boolean;
20
+ private enterMarkerHover;
21
+ private leaveMarkerHover;
22
+ private enterCustomMarkerHover;
23
+ private leaveCustomMarkerHover;
24
+ /** 清空 hover 状态并触发回调(拖拽/离开时调用)。需要 markerManager 以便同步清除 Native hover。 */
25
+ clearAll(markerManager: MarkerManager): void;
26
+ /** 全量重置(数据更新时调用,不触发热点回调) */
27
+ reset(): void;
28
+ }
@@ -0,0 +1,18 @@
1
+ /** 触屏双指捏合跟踪,与 InteractionController 正交。 */
2
+ export declare class PinchTracker {
3
+ private activePointers;
4
+ private lastPinchDistance;
5
+ private pinchCenter;
6
+ private isPinching;
7
+ private onPinchZoomCallback?;
8
+ setOnPinchZoom(callback: (delta: number, centerX: number) => void): void;
9
+ getIsPinching(): boolean;
10
+ getPointerCount(): number;
11
+ /** Returns true if pinch started (caller should early-return, not process drag). */
12
+ handlePointerDown(e: PointerEvent, isTouchSession: boolean): boolean;
13
+ handlePointerUp(e: PointerEvent): void;
14
+ handlePointerLeave(e: PointerEvent): void;
15
+ /** Returns true if pinch zoom was processed (caller should skip further pointer-move handling). */
16
+ handlePointerMove(e: PointerEvent): boolean;
17
+ reset(): void;
18
+ }
@@ -0,0 +1,21 @@
1
+ export interface TooltipPositionInput {
2
+ mouseX: number;
3
+ mouseY: number;
4
+ viewWidth: number;
5
+ viewHeight: number;
6
+ plotWidth: number;
7
+ plotHeight: number;
8
+ tooltipSize: {
9
+ width: number;
10
+ height: number;
11
+ };
12
+ useAnchorPositioning: boolean;
13
+ }
14
+ export interface TooltipPositionOutput {
15
+ pos: {
16
+ x: number;
17
+ y: number;
18
+ };
19
+ anchorPlacement?: 'right-bottom' | 'left-bottom';
20
+ }
21
+ export declare function computeTooltipPosition(input: TooltipPositionInput): TooltipPositionOutput;
@@ -1,8 +1,27 @@
1
1
  import { RendererPlugin } from '../../plugin';
2
2
  import { DrawingStore, DrawingDefinitionRegistry, PrimitiveRendererSet } from './index';
3
+ /**
4
+ * 创建绘图渲染器插件(主层,负责绘制 shape)
5
+ * 注意:此插件不再推送轴标签,标签由 createDrawingLabelOverlayPlugin 负责
6
+ */
3
7
  export declare function createDrawingRendererPlugin(options: {
4
8
  store: DrawingStore;
5
9
  paneId?: string;
6
10
  definitions?: DrawingDefinitionRegistry;
7
11
  renderers?: PrimitiveRendererSet;
8
12
  }): RendererPlugin;
13
+ /**
14
+ * 创建绘图标签 Overlay 插件
15
+ *
16
+ * ⚠️ 警告:此插件必须在 All 和 Overlay 更新级别运行
17
+ * 当前代码库中没有 UpdateLevel.Main 的触发点,因此此插件设置为 layer: 'overlay' 是安全的
18
+ * 如果将来添加 Main 级别的更新,此插件会被跳过,导致选中绘图的轴标签消失
19
+ *
20
+ * 解决方案:如果将来需要使用 Main 级别,请将此插件改为同时在 main 和 overlay 层注册,
21
+ * 或移除分层过滤让此插件在所有级别运行
22
+ */
23
+ export declare function createDrawingLabelOverlayPlugin(options: {
24
+ store: DrawingStore;
25
+ paneId?: string;
26
+ definitions?: DrawingDefinitionRegistry;
27
+ }): RendererPlugin;
@@ -0,0 +1,16 @@
1
+ import { BaseIndicatorState } from '../../plugin';
2
+ export interface ATRRenderState extends BaseIndicatorState {
3
+ timestamp: number;
4
+ series: (number | undefined)[];
5
+ params: {
6
+ period: number;
7
+ showATR: boolean;
8
+ };
9
+ valueMin: number;
10
+ valueMax: number;
11
+ visibleMin: number;
12
+ visibleMax: number;
13
+ }
14
+ export declare const createATRStateKey: (paneId: string) => `indicator:${string}:${string}`;
15
+ export declare const DEFAULT_ATR_PERIOD = 14;
16
+ export declare const EMPTY_ATR_STATE: ATRRenderState;
@@ -267,3 +267,199 @@ export declare function calcFASTKDataSoA(layout: KLineSoALayout, period: number)
267
267
  * @returns MACD 数据点数组
268
268
  */
269
269
  export declare function calcMACDDataSoA(layout: KLineSoALayout, fastPeriod: number, slowPeriod: number, signalPeriod: number): MACDPoint[];
270
+ export declare const DEFAULT_ATR_PERIOD = 14;
271
+ /**
272
+ * 计算 Wilder ATR。
273
+ * TR(0) = H(0) - L(0)
274
+ * TR(t) = max(H(t) - L(t), |H(t) - C(t-1)|, |L(t) - C(t-1)|)
275
+ * ATR(period-1) = mean(TR[0..period-1])
276
+ * ATR(t) = ((period-1) * ATR(t-1) + TR(t)) / period for t >= period
277
+ *
278
+ * @param data K 线数组
279
+ * @param period 周期,需 >= 1;若 <= 0 或 data.length < period,返回全 undefined
280
+ */
281
+ export declare function calcATRData(data: KLineData[], period: number): (number | undefined)[];
282
+ /**
283
+ * 从 SoA 布局计算 ATR(包装函数,对齐其他指标的 SoA 入口)
284
+ */
285
+ export declare function calcATRDataSoA(layout: KLineSoALayout, period: number): (number | undefined)[];
286
+ export declare const DEFAULT_WMA_PERIOD = 9;
287
+ export declare function calcWMAData(data: KLineData[], period: number): (number | undefined)[];
288
+ export declare function calcWMADataSoA(layout: KLineSoALayout, period: number): (number | undefined)[];
289
+ export declare const DEFAULT_DEMA_PERIOD = 20;
290
+ export declare function calcDEMAData(data: KLineData[], period: number): (number | undefined)[];
291
+ export declare function calcDEMADataSoA(layout: KLineSoALayout, period: number): (number | undefined)[];
292
+ export declare const DEFAULT_TEMA_PERIOD = 20;
293
+ export declare function calcTEMAData(data: KLineData[], period: number): (number | undefined)[];
294
+ export declare function calcTEMADataSoA(layout: KLineSoALayout, period: number): (number | undefined)[];
295
+ export declare const DEFAULT_HMA_PERIOD = 9;
296
+ export declare function calcHMAData(data: KLineData[], period: number): (number | undefined)[];
297
+ export declare function calcHMADataSoA(layout: KLineSoALayout, period: number): (number | undefined)[];
298
+ export declare const DEFAULT_KAMA_PERIOD = 10;
299
+ export declare const DEFAULT_KAMA_FAST_PERIOD = 2;
300
+ export declare const DEFAULT_KAMA_SLOW_PERIOD = 30;
301
+ export declare function calcKAMAData(data: KLineData[], period: number, fastPeriod: number, slowPeriod: number): (number | undefined)[];
302
+ export declare function calcKAMADataSoA(layout: KLineSoALayout, period: number, fastPeriod: number, slowPeriod: number): (number | undefined)[];
303
+ export interface SARPoint {
304
+ value: number;
305
+ trend: 'up' | 'down';
306
+ }
307
+ export declare const DEFAULT_SAR_STEP = 0.02;
308
+ export declare const DEFAULT_SAR_MAX_STEP = 0.2;
309
+ export declare function calcSARData(data: KLineData[], step: number, maxStep: number): (SARPoint | undefined)[];
310
+ export declare function calcSARDataSoA(layout: KLineSoALayout, step: number, maxStep: number): (SARPoint | undefined)[];
311
+ export interface SuperTrendPoint {
312
+ value: number;
313
+ trend: 'up' | 'down';
314
+ }
315
+ export declare const DEFAULT_SUPERTREND_ATR_PERIOD = 10;
316
+ export declare const DEFAULT_SUPERTREND_MULTIPLIER = 3;
317
+ export declare function calcSuperTrendData(data: KLineData[], atrPeriod: number, multiplier: number): (SuperTrendPoint | undefined)[];
318
+ export declare function calcSuperTrendDataSoA(layout: KLineSoALayout, atrPeriod: number, multiplier: number): (SuperTrendPoint | undefined)[];
319
+ export interface KeltnerPoint {
320
+ upper: number;
321
+ middle: number;
322
+ lower: number;
323
+ }
324
+ export declare const DEFAULT_KELTNER_EMA_PERIOD = 20;
325
+ export declare const DEFAULT_KELTNER_ATR_PERIOD = 10;
326
+ export declare const DEFAULT_KELTNER_MULTIPLIER = 2;
327
+ export declare function calcKeltnerData(data: KLineData[], emaPeriod: number, atrPeriod: number, multiplier: number): (KeltnerPoint | undefined)[];
328
+ export declare function calcKeltnerDataSoA(layout: KLineSoALayout, emaPeriod: number, atrPeriod: number, multiplier: number): (KeltnerPoint | undefined)[];
329
+ export interface DonchianPoint {
330
+ upper: number;
331
+ middle: number;
332
+ lower: number;
333
+ }
334
+ export declare const DEFAULT_DONCHIAN_PERIOD = 20;
335
+ export declare function calcDonchianData(data: KLineData[], period: number): (DonchianPoint | undefined)[];
336
+ export declare function calcDonchianDataSoA(layout: KLineSoALayout, period: number): (DonchianPoint | undefined)[];
337
+ export interface IchimokuPoint {
338
+ tenkan?: number;
339
+ kijun?: number;
340
+ spanA?: number;
341
+ spanB?: number;
342
+ chikou?: number;
343
+ }
344
+ export declare const DEFAULT_ICHIMOKU_TENKAN = 9;
345
+ export declare const DEFAULT_ICHIMOKU_KIJUN = 26;
346
+ export declare const DEFAULT_ICHIMOKU_SPAN_B = 52;
347
+ export declare const DEFAULT_ICHIMOKU_DISPLACEMENT = 26;
348
+ export declare function calcIchimokuData(data: KLineData[], tenkanPeriod: number, kijunPeriod: number, spanBPeriod: number, displacement: number): (IchimokuPoint | undefined)[];
349
+ export declare function calcIchimokuDataSoA(layout: KLineSoALayout, tenkanPeriod: number, kijunPeriod: number, spanBPeriod: number, displacement: number): (IchimokuPoint | undefined)[];
350
+ export declare const DEFAULT_ROC_PERIOD = 12;
351
+ export declare function calcROCData(data: KLineData[], period: number): (number | undefined)[];
352
+ export declare function calcROCDataSoA(layout: KLineSoALayout, period: number): (number | undefined)[];
353
+ export interface TRIXResult {
354
+ series: (number | undefined)[];
355
+ signalSeries: (number | undefined)[];
356
+ }
357
+ export declare const DEFAULT_TRIX_PERIOD = 15;
358
+ export declare const DEFAULT_TRIX_SIGNAL_PERIOD = 9;
359
+ export declare function calcTRIXData(data: KLineData[], period: number, signalPeriod: number): TRIXResult;
360
+ export declare function calcTRIXDataSoA(layout: KLineSoALayout, period: number, signalPeriod: number): TRIXResult;
361
+ export declare const DEFAULT_HV_PERIOD = 20;
362
+ export declare const DEFAULT_HV_ANNUALIZATION = 252;
363
+ export declare function calcHVData(data: KLineData[], period: number, annualizationFactor: number): (number | undefined)[];
364
+ export declare function calcHVDataSoA(layout: KLineSoALayout, period: number, annualizationFactor: number): (number | undefined)[];
365
+ export declare const DEFAULT_PARKINSON_PERIOD = 20;
366
+ export declare const DEFAULT_PARKINSON_ANNUALIZATION = 252;
367
+ export declare function calcParkinsonData(data: KLineData[], period: number, annualizationFactor: number): (number | undefined)[];
368
+ export declare function calcParkinsonDataSoA(layout: KLineSoALayout, period: number, annualizationFactor: number): (number | undefined)[];
369
+ export declare const DEFAULT_CHAIKIN_VOL_EMA_PERIOD = 10;
370
+ export declare const DEFAULT_CHAIKIN_VOL_ROC_PERIOD = 10;
371
+ export declare function calcChaikinVolData(data: KLineData[], emaPeriod: number, rocPeriod: number): (number | undefined)[];
372
+ export declare function calcChaikinVolDataSoA(layout: KLineSoALayout, emaPeriod: number, rocPeriod: number): (number | undefined)[];
373
+ export declare const DEFAULT_VMA_PERIOD = 5;
374
+ export declare function calcVMAData(data: KLineData[], period: number): (number | undefined)[];
375
+ export declare function calcVMADataSoA(layout: KLineSoALayout, period: number): (number | undefined)[];
376
+ export declare function calcOBVData(data: KLineData[]): (number | undefined)[];
377
+ export declare function calcOBVDataSoA(layout: KLineSoALayout): (number | undefined)[];
378
+ export declare function calcPVTData(data: KLineData[]): (number | undefined)[];
379
+ export declare function calcPVTDataSoA(layout: KLineSoALayout): (number | undefined)[];
380
+ export declare const DEFAULT_VWAP_SESSION_GAP_MS = 0;
381
+ export declare function calcVWAPData(data: KLineData[], sessionResetGapMs: number): (number | undefined)[];
382
+ export declare function calcVWAPDataSoA(layout: KLineSoALayout, sessionResetGapMs: number): (number | undefined)[];
383
+ export declare const DEFAULT_CMF_PERIOD = 20;
384
+ export declare function calcCMFData(data: KLineData[], period: number): (number | undefined)[];
385
+ export declare function calcCMFDataSoA(layout: KLineSoALayout, period: number): (number | undefined)[];
386
+ export declare const DEFAULT_MFI_PERIOD = 14;
387
+ export declare function calcMFIData(data: KLineData[], period: number): (number | undefined)[];
388
+ export declare function calcMFIDataSoA(layout: KLineSoALayout, period: number): (number | undefined)[];
389
+ export interface PivotPoint {
390
+ pp: number;
391
+ r1: number;
392
+ r2: number;
393
+ r3: number;
394
+ s1: number;
395
+ s2: number;
396
+ s3: number;
397
+ }
398
+ export declare function calcPivotData(data: KLineData[]): (PivotPoint | undefined)[];
399
+ export declare function calcPivotDataSoA(layout: KLineSoALayout): (PivotPoint | undefined)[];
400
+ export interface FibPoint {
401
+ high: number;
402
+ low: number;
403
+ direction: 'up' | 'down';
404
+ level236: number;
405
+ level382: number;
406
+ level500: number;
407
+ level618: number;
408
+ level786: number;
409
+ }
410
+ export declare const DEFAULT_FIB_PERIOD = 50;
411
+ export declare function calcFibData(data: KLineData[], period: number): (FibPoint | undefined)[];
412
+ export declare function calcFibDataSoA(layout: KLineSoALayout, period: number): (FibPoint | undefined)[];
413
+ export interface SwingPoint {
414
+ index: number;
415
+ price: number;
416
+ kind: 'high' | 'low';
417
+ label: 'HH' | 'HL' | 'LH' | 'LL';
418
+ confirmed: boolean;
419
+ }
420
+ export type StructureEventKind = 'BOS' | 'CHOCH';
421
+ export interface StructureEvent {
422
+ kind: StructureEventKind;
423
+ index: number;
424
+ triggerPrice: number;
425
+ brokenLevel: number;
426
+ brokenSwingIndex: number;
427
+ direction: 'up' | 'down';
428
+ }
429
+ export interface StructureSnapshot {
430
+ swings: SwingPoint[];
431
+ events: StructureEvent[];
432
+ trend: 'up' | 'down' | 'range';
433
+ }
434
+ export declare const DEFAULT_STRUCTURE_LEFT = 2;
435
+ export declare const DEFAULT_STRUCTURE_RIGHT = 2;
436
+ export declare function calcStructureData(data: KLineData[], leftWindow: number, rightWindow: number, breakoutSource: 'close' | 'wick'): StructureSnapshot;
437
+ export declare function calcStructureDataSoA(layout: KLineSoALayout, leftWindow: number, rightWindow: number, breakoutSource: 'close' | 'wick'): StructureSnapshot;
438
+ export type ZoneKind = 'FVG_BULL' | 'FVG_BEAR' | 'OB_BULL' | 'OB_BEAR';
439
+ export interface Zone {
440
+ kind: ZoneKind;
441
+ startIndex: number;
442
+ endIndex?: number;
443
+ high: number;
444
+ low: number;
445
+ }
446
+ export declare const DEFAULT_ZONES_OB_LOOKBACK = 5;
447
+ export declare function calcZonesData(data: KLineData[], obLookback: number, structureLeftWindow: number, structureRightWindow: number, breakoutSource: 'close' | 'wick'): Zone[];
448
+ export declare function calcZonesDataSoA(layout: KLineSoALayout, obLookback: number, structureLeftWindow: number, structureRightWindow: number, breakoutSource: 'close' | 'wick'): Zone[];
449
+ export interface VolumeProfileBin {
450
+ priceLow: number;
451
+ priceHigh: number;
452
+ volume: number;
453
+ }
454
+ export interface VolumeProfileResult {
455
+ bins: VolumeProfileBin[];
456
+ poc: number;
457
+ vah: number;
458
+ val: number;
459
+ totalVolume: number;
460
+ }
461
+ export declare const DEFAULT_VP_BINS = 24;
462
+ export declare const DEFAULT_VP_LOOKBACK = 0;
463
+ export declare const DEFAULT_VP_VALUE_AREA = 0.7;
464
+ export declare function calcVolumeProfileData(data: KLineData[], bins: number, lookback: number, valueAreaPercent: number): VolumeProfileResult;
465
+ export declare function calcVolumeProfileDataSoA(layout: KLineSoALayout, bins: number, lookback: number, valueAreaPercent: number): VolumeProfileResult;
@@ -0,0 +1,18 @@
1
+ import { BaseIndicatorState } from '../../plugin';
2
+ export interface ChaikinVolRenderState extends BaseIndicatorState {
3
+ timestamp: number;
4
+ series: (number | undefined)[];
5
+ params: {
6
+ emaPeriod: number;
7
+ rocPeriod: number;
8
+ showChaikinVol: boolean;
9
+ };
10
+ valueMin: number;
11
+ valueMax: number;
12
+ visibleMin: number;
13
+ visibleMax: number;
14
+ }
15
+ export declare const createChaikinVolStateKey: (paneId: string) => `indicator:${string}:${string}`;
16
+ export declare const DEFAULT_CHAIKIN_VOL_EMA_PERIOD = 10;
17
+ export declare const DEFAULT_CHAIKIN_VOL_ROC_PERIOD = 10;
18
+ export declare const EMPTY_CHAIKIN_VOL_STATE: ChaikinVolRenderState;
@@ -0,0 +1,16 @@
1
+ import { BaseIndicatorState } from '../../plugin';
2
+ export interface CMFRenderState extends BaseIndicatorState {
3
+ timestamp: number;
4
+ series: (number | undefined)[];
5
+ params: {
6
+ period: number;
7
+ showCMF: boolean;
8
+ };
9
+ valueMin: number;
10
+ valueMax: number;
11
+ visibleMin: number;
12
+ visibleMax: number;
13
+ }
14
+ export declare const createCMFStateKey: (paneId: string) => `indicator:${string}:${string}`;
15
+ export declare const DEFAULT_CMF_PERIOD = 20;
16
+ export declare const EMPTY_CMF_STATE: CMFRenderState;
@@ -0,0 +1,16 @@
1
+ import { BaseIndicatorState } from '../../plugin';
2
+ export interface DEMARenderState extends BaseIndicatorState {
3
+ timestamp: number;
4
+ series: (number | undefined)[];
5
+ params: {
6
+ period: number;
7
+ showDEMA: boolean;
8
+ };
9
+ valueMin: number;
10
+ valueMax: number;
11
+ visibleMin: number;
12
+ visibleMax: number;
13
+ }
14
+ export declare const createDEMAStateKey: (paneId: string) => `indicator:${string}:${string}`;
15
+ export declare const DEFAULT_DEMA_PERIOD = 20;
16
+ export declare const EMPTY_DEMA_STATE: DEMARenderState;
@@ -0,0 +1,23 @@
1
+ import { BaseIndicatorState } from '../../plugin';
2
+ export interface DonchianPoint {
3
+ upper: number;
4
+ middle: number;
5
+ lower: number;
6
+ }
7
+ export interface DonchianRenderState extends BaseIndicatorState {
8
+ timestamp: number;
9
+ series: (DonchianPoint | undefined)[];
10
+ params: {
11
+ period: number;
12
+ showUpper: boolean;
13
+ showMiddle: boolean;
14
+ showLower: boolean;
15
+ };
16
+ valueMin: number;
17
+ valueMax: number;
18
+ visibleMin: number;
19
+ visibleMax: number;
20
+ }
21
+ export declare const createDonchianStateKey: (paneId: string) => `indicator:${string}:${string}`;
22
+ export declare const DEFAULT_DONCHIAN_PERIOD = 20;
23
+ export declare const EMPTY_DONCHIAN_STATE: DonchianRenderState;
@@ -0,0 +1,26 @@
1
+ import { BaseIndicatorState } from '../../plugin';
2
+ export interface FibPoint {
3
+ high: number;
4
+ low: number;
5
+ direction: 'up' | 'down';
6
+ level236: number;
7
+ level382: number;
8
+ level500: number;
9
+ level618: number;
10
+ level786: number;
11
+ }
12
+ export interface FibRenderState extends BaseIndicatorState {
13
+ timestamp: number;
14
+ series: (FibPoint | undefined)[];
15
+ params: {
16
+ period: number;
17
+ showLevels: boolean;
18
+ };
19
+ valueMin: number;
20
+ valueMax: number;
21
+ visibleMin: number;
22
+ visibleMax: number;
23
+ }
24
+ export declare const createFibStateKey: (paneId: string) => `indicator:${string}:${string}`;
25
+ export declare const DEFAULT_FIB_PERIOD = 50;
26
+ export declare const EMPTY_FIB_STATE: FibRenderState;
@@ -0,0 +1,16 @@
1
+ import { BaseIndicatorState } from '../../plugin';
2
+ export interface HMARenderState extends BaseIndicatorState {
3
+ timestamp: number;
4
+ series: (number | undefined)[];
5
+ params: {
6
+ period: number;
7
+ showHMA: boolean;
8
+ };
9
+ valueMin: number;
10
+ valueMax: number;
11
+ visibleMin: number;
12
+ visibleMax: number;
13
+ }
14
+ export declare const createHMAStateKey: (paneId: string) => `indicator:${string}:${string}`;
15
+ export declare const DEFAULT_HMA_PERIOD = 9;
16
+ export declare const EMPTY_HMA_STATE: HMARenderState;
@@ -0,0 +1,18 @@
1
+ import { BaseIndicatorState } from '../../plugin';
2
+ export interface HVRenderState extends BaseIndicatorState {
3
+ timestamp: number;
4
+ series: (number | undefined)[];
5
+ params: {
6
+ period: number;
7
+ annualizationFactor: number;
8
+ showHV: boolean;
9
+ };
10
+ valueMin: number;
11
+ valueMax: number;
12
+ visibleMin: number;
13
+ visibleMax: number;
14
+ }
15
+ export declare const createHVStateKey: (paneId: string) => `indicator:${string}:${string}`;
16
+ export declare const DEFAULT_HV_PERIOD = 20;
17
+ export declare const DEFAULT_HV_ANNUALIZATION = 252;
18
+ export declare const EMPTY_HV_STATE: HVRenderState;