@363045841yyt/klinechart 0.6.10 → 0.7.1

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 (77) hide show
  1. package/dist/favicon.ico +0 -0
  2. package/dist/index.cjs +5 -5
  3. package/dist/index.js +20330 -8582
  4. package/dist/klinechart.css +1 -1
  5. package/dist/mock-stock-data.json +1 -0
  6. package/dist/src/components/IndicatorSelector.vue.d.ts +0 -1
  7. package/dist/src/components/KLineChart.vue.d.ts +1 -1
  8. package/dist/src/config/chartSettings.d.ts +6 -0
  9. package/dist/src/core/chart.d.ts +208 -11
  10. package/dist/src/core/draw/pixelAlign.d.ts +7 -7
  11. package/dist/src/core/drawing/plugin.d.ts +19 -0
  12. package/dist/src/core/indicators/calculators.d.ts +129 -0
  13. package/dist/src/core/indicators/chaikinVolState.d.ts +18 -0
  14. package/dist/src/core/indicators/cmfState.d.ts +16 -0
  15. package/dist/src/core/indicators/fibState.d.ts +26 -0
  16. package/dist/src/core/indicators/hvState.d.ts +18 -0
  17. package/dist/src/core/indicators/ichimokuState.d.ts +44 -0
  18. package/dist/src/core/indicators/indicatorDefinitionRegistry.d.ts +30 -0
  19. package/dist/src/core/indicators/indicatorMetadata.d.ts +81 -0
  20. package/dist/src/core/indicators/indicatorRegistry.d.ts +57 -0
  21. package/dist/src/core/indicators/indicatorRuntime.d.ts +35 -0
  22. package/dist/src/core/indicators/mfiState.d.ts +16 -0
  23. package/dist/src/core/indicators/obvState.d.ts +14 -0
  24. package/dist/src/core/indicators/parkinsonState.d.ts +18 -0
  25. package/dist/src/core/indicators/pivotState.d.ts +29 -0
  26. package/dist/src/core/indicators/pvtState.d.ts +14 -0
  27. package/dist/src/core/indicators/rocState.d.ts +16 -0
  28. package/dist/src/core/indicators/rsiState.d.ts +4 -0
  29. package/dist/src/core/indicators/scheduler.d.ts +82 -3
  30. package/dist/src/core/indicators/stateComposer.d.ts +51 -0
  31. package/dist/src/core/indicators/structureState.d.ts +43 -0
  32. package/dist/src/core/indicators/trixState.d.ts +20 -0
  33. package/dist/src/core/indicators/vmaState.d.ts +16 -0
  34. package/dist/src/core/indicators/volumeProfileState.d.ts +34 -0
  35. package/dist/src/core/indicators/vwapState.d.ts +16 -0
  36. package/dist/src/core/indicators/workerProtocol.d.ts +198 -1
  37. package/dist/src/core/indicators/zonesState.d.ts +26 -0
  38. package/dist/src/core/renderers/Indicator/cci.d.ts +2 -1
  39. package/dist/src/core/renderers/Indicator/chaikinVol.d.ts +4 -0
  40. package/dist/src/core/renderers/Indicator/cmf.d.ts +4 -0
  41. package/dist/src/core/renderers/Indicator/ene.d.ts +0 -8
  42. package/dist/src/core/renderers/Indicator/fastk.d.ts +2 -1
  43. package/dist/src/core/renderers/Indicator/fib.d.ts +4 -0
  44. package/dist/src/core/renderers/Indicator/hv.d.ts +4 -0
  45. package/dist/src/core/renderers/Indicator/ichimoku.d.ts +5 -0
  46. package/dist/src/core/renderers/Indicator/index.d.ts +27 -1
  47. package/dist/src/core/renderers/Indicator/kst.d.ts +2 -1
  48. package/dist/src/core/renderers/Indicator/macd.d.ts +2 -1
  49. package/dist/src/core/renderers/Indicator/mfi.d.ts +4 -0
  50. package/dist/src/core/renderers/Indicator/mom.d.ts +2 -1
  51. package/dist/src/core/renderers/Indicator/obv.d.ts +4 -0
  52. package/dist/src/core/renderers/Indicator/parkinson.d.ts +4 -0
  53. package/dist/src/core/renderers/Indicator/pivot.d.ts +4 -0
  54. package/dist/src/core/renderers/Indicator/pvt.d.ts +4 -0
  55. package/dist/src/core/renderers/Indicator/roc.d.ts +5 -0
  56. package/dist/src/core/renderers/Indicator/rsi.d.ts +3 -2
  57. package/dist/src/core/renderers/Indicator/scale/indicator_scale.d.ts +4 -1
  58. package/dist/src/core/renderers/Indicator/stoch.d.ts +2 -1
  59. package/dist/src/core/renderers/Indicator/structure.d.ts +4 -0
  60. package/dist/src/core/renderers/Indicator/subPaneConfig.d.ts +2 -2
  61. package/dist/src/core/renderers/Indicator/trix.d.ts +5 -0
  62. package/dist/src/core/renderers/Indicator/vma.d.ts +4 -0
  63. package/dist/src/core/renderers/Indicator/volumeProfile.d.ts +4 -0
  64. package/dist/src/core/renderers/Indicator/vwap.d.ts +4 -0
  65. package/dist/src/core/renderers/Indicator/wmsr.d.ts +2 -1
  66. package/dist/src/core/renderers/Indicator/zones.d.ts +4 -0
  67. package/dist/src/core/renderers/candle.d.ts +2 -1
  68. package/dist/src/core/theme/colors.d.ts +207 -228
  69. package/dist/src/plugin/PluginHost.d.ts +3 -0
  70. package/dist/src/plugin/types.d.ts +6 -0
  71. package/dist/src/semantic/types.d.ts +59 -0
  72. package/dist/src/utils/kLineDraw/MA.d.ts +5 -10
  73. package/dist/src/utils/kLineDraw/axis.d.ts +7 -7
  74. package/dist/src/utils/kLineDraw/grid.d.ts +2 -2
  75. package/dist/src/utils/kLineDraw/kLine.d.ts +1 -1
  76. package/dist/src/utils/kline/format.d.ts +4 -7
  77. package/package.json +111 -103
@@ -1,7 +1,8 @@
1
1
  import { KLineData } from '../types/price';
2
2
  import { ChartSettings } from '../config/chartSettings';
3
+ import { Signal } from '../../packages/core/src/reactivity/signal';
3
4
  import { VisibleRange, UpdateLevel } from './layout/pane';
4
- import { InteractionController } from './controller/interaction';
5
+ import { InteractionController, InteractionSnapshot } from './controller/interaction';
5
6
  import { PaneRenderer } from './paneRenderer';
6
7
  import { MarkerManager, CustomMarkerEntity } from './marker/registry';
7
8
  import { getPhysicalKLineConfig, calcKWidthPx } from './utils/klineConfig';
@@ -9,6 +10,7 @@ import { IndicatorScheduler } from './indicators/scheduler';
9
10
  import { SubPaneEntry } from './subPaneManager';
10
11
  import { PluginHostImpl, RendererPlugin, RendererPluginWithHost, PaneRole, PaneCapabilities } from '../plugin';
11
12
  import { SubIndicatorType } from './renderers/Indicator';
13
+ export type { InteractionSnapshot };
12
14
  export { getPhysicalKLineConfig, calcKWidthPx };
13
15
  /**
14
16
  * 图表 DOM 元素引用
@@ -92,10 +94,10 @@ type ResolvedChartOptions = Omit<ChartOptions, 'kWidth' | 'kGap'> & {
92
94
  export declare class Chart {
93
95
  private dom;
94
96
  private opt;
95
- private data;
97
+ private _internalData;
96
98
  private raf;
97
99
  private pendingUpdateLevel;
98
- private viewport;
100
+ private _internalViewport;
99
101
  private paneRenderers;
100
102
  private markerManager;
101
103
  private drawingStore;
@@ -119,7 +121,7 @@ export declare class Chart {
119
121
  /** 用户设置配置(传递给渲染器) */
120
122
  private settings;
121
123
  /** pane ratio 状态(按 paneId 维护,sum=1 仅对可见 pane) */
122
- private paneRatios;
124
+ private _internalPaneRatios;
123
125
  /** 视口变化回调(供外部同步 DPR/尺寸) */
124
126
  private onViewportChange?;
125
127
  /** 共享 X 轴上下文缓存 */
@@ -150,11 +152,11 @@ export declare class Chart {
150
152
  private mainIndicatorParams;
151
153
  /**
152
154
  * 启用主图指标
153
- * @param indicatorId 指标ID: 'MA' | 'BOLL' | 'EXPMA' | 'ENE'
155
+ * @param indicatorId 指标ID
154
156
  * @param params 可选的指标参数
155
157
  * @returns 是否成功启用
156
158
  */
157
- enableMainIndicator(indicatorId: string, params?: Record<string, number | boolean>): boolean;
159
+ enableMainIndicator(indicatorId: string, params?: Record<string, number | boolean | string>): boolean;
158
160
  /**
159
161
  * 禁用主图指标
160
162
  * @param indicatorId 指标ID
@@ -182,12 +184,12 @@ export declare class Chart {
182
184
  * @param indicatorId 指标ID
183
185
  * @param params 参数对象
184
186
  */
185
- updateMainIndicatorParams(indicatorId: string, params: Record<string, number | boolean>): void;
187
+ updateMainIndicatorParams(indicatorId: string, params: Record<string, number | boolean | string>): void;
186
188
  /**
187
189
  * 获取主图指标参数
188
190
  * @param indicatorId 指标ID
189
191
  */
190
- getMainIndicatorParams(indicatorId: string): Record<string, number | boolean> | null;
192
+ getMainIndicatorParams(indicatorId: string): Record<string, number | boolean | string> | null;
191
193
  /**
192
194
  * 清除所有主图指标
193
195
  */
@@ -214,6 +216,7 @@ export declare class Chart {
214
216
  * @param opt 初始配置
215
217
  */
216
218
  constructor(dom: ChartDom, opt: ChartOptions);
219
+ private initCoreRenderers;
217
220
  private initResizeObserver;
218
221
  private updateObservedMetrics;
219
222
  private getEffectiveDpr;
@@ -284,12 +287,16 @@ export declare class Chart {
284
287
  updateOptions(partial: Partial<ChartOptions>): void;
285
288
  /** 更新 pane 布局配置
286
289
  * @param panes 新的 pane 配置数组
290
+ *
291
+ * 显式整盘替换:清空之前 user-resize 留下的 paneRatios 缓存,让 spec 中的 ratio
292
+ * 真正生效。`addPane`/`upsertPane`/`removePaneDefinition` 走 `applyPaneLayoutSpecs`
293
+ * 时仍保留 prev 值以记住用户拖拽过的高度——只有显式的 layout replacement 才重置。
287
294
  */
288
295
  updatePaneLayout(panes: PaneSpec[]): void;
289
296
  setPaneDefinitions(defs: PaneSpec[]): void;
290
297
  upsertPane(def: PaneSpec): void;
291
298
  removePaneDefinition(paneId: string): void;
292
- bindIndicatorToPane(paneId: string, indicatorId: SubIndicatorType, params?: Record<string, number | boolean>): void;
299
+ bindIndicatorToPane(paneId: string, indicatorId: SubIndicatorType, params?: Record<string, number | boolean | string>): void;
293
300
  /** 更新绘图对象 */
294
301
  setDrawings(drawings: import('../plugin').DrawingObject[]): void;
295
302
  /** 更新选中的绘图 ID */
@@ -323,7 +330,7 @@ export declare class Chart {
323
330
  * @param params 指标参数
324
331
  * @returns 是否创建成功
325
332
  */
326
- createSubPane(paneId: string, indicatorId: SubIndicatorType, params?: Record<string, number | boolean>): boolean;
333
+ createSubPane(paneId: string, indicatorId: SubIndicatorType, params?: Record<string, number | boolean | string>): boolean;
327
334
  /**
328
335
  * 移除副图面板及其渲染器
329
336
  * @param paneId 副图实例标识符
@@ -335,7 +342,7 @@ export declare class Chart {
335
342
  * @param newIndicatorId 新的指标类型
336
343
  * @param params 新指标参数
337
344
  */
338
- replaceSubPaneIndicator(paneId: string, newIndicatorId: SubIndicatorType, params?: Record<string, number | boolean>): void;
345
+ replaceSubPaneIndicator(paneId: string, newIndicatorId: SubIndicatorType, params?: Record<string, number | boolean | string>): void;
339
346
  /**
340
347
  * 更新副图指标参数
341
348
  * @param paneId 副图实例标识符
@@ -417,4 +424,194 @@ export declare class Chart {
417
424
  /** 计算每个 pane 的布局(top 和 height) */
418
425
  private layoutPanes;
419
426
  private computeViewport;
427
+ private _viewportSignal;
428
+ private _dataSignal;
429
+ private _themeSignal;
430
+ private _indicatorsSignal;
431
+ private _subPanesSignal;
432
+ private _drawingToolSignal;
433
+ private _drawingsSignal;
434
+ private _paneRatiosSignal;
435
+ private _interactionSignal;
436
+ /** 视口状态信号 */
437
+ get viewport(): Signal<ViewportState>;
438
+ /** 数据信号 */
439
+ get data(): Signal<ReadonlyArray<KLineData>>;
440
+ /** 主题信号 */
441
+ get theme(): Signal<'light' | 'dark'>;
442
+ /** 指标实例列表信号 */
443
+ get indicators(): Signal<ReadonlyArray<IndicatorInstance>>;
444
+ /** 子图信息信号 */
445
+ get subPanes(): Signal<ReadonlyArray<SubPaneInfo>>;
446
+ /** 当前绘图工具信号 */
447
+ get drawingTool(): Signal<DrawingToolType | null>;
448
+ /** 绘图对象列表信号 */
449
+ get drawings(): Signal<ReadonlyArray<import('../plugin').DrawingObject>>;
450
+ /** 面板比例信号 */
451
+ get paneRatios(): Signal<Readonly<Record<string, number>>>;
452
+ /** 交互状态信号 */
453
+ get interactionState(): Signal<InteractionSnapshot>;
454
+ /**
455
+ * 设置数据(高层 API)
456
+ * 内部调用 updateData,并更新 data signal
457
+ */
458
+ setData(data: KLineData[]): void;
459
+ /**
460
+ * 追加数据(高层 API)
461
+ * 合并现有数据并更新
462
+ */
463
+ appendData(newData: KLineData[]): void;
464
+ /**
465
+ * 设置主题(高层 API)
466
+ */
467
+ setTheme(theme: 'light' | 'dark'): void;
468
+ /**
469
+ * 缩放到指定级别(高层 API)
470
+ * 计算并应用新的 render state,更新 viewport signal
471
+ */
472
+ zoomToLevel(level: number, anchorX?: number): void;
473
+ /**
474
+ * 放大(高层 API)
475
+ */
476
+ zoomIn(anchorX?: number): void;
477
+ /**
478
+ * 缩小(高层 API)
479
+ */
480
+ zoomOut(anchorX?: number): void;
481
+ /**
482
+ * 内部缩放实现
483
+ * 使用 computeZoom 纯函数计算精确的 scrollLeft
484
+ */
485
+ private applyZoom;
486
+ /**
487
+ * 统一指针事件处理(零配置)
488
+ * 自动判断区域并分发给 interaction controller
489
+ *
490
+ * @param e 指针事件
491
+ * @param drawingController 可选的绘图控制器,如果提供,会优先让绘图控制器处理事件
492
+ * @returns 是否被处理(如果 drawingController 处理了返回 true,否则返回 false)
493
+ */
494
+ handlePointerEvent(e: PointerEvent, drawingController?: {
495
+ onPointerDown?: (e: PointerEvent, container: HTMLElement) => boolean;
496
+ onPointerMove?: (e: PointerEvent, container: HTMLElement) => boolean;
497
+ onPointerUp?: (e: PointerEvent, container: HTMLElement) => boolean;
498
+ }): boolean;
499
+ /**
500
+ * 滚轮事件处理(高层 API)
501
+ * 使用 computeZoom 计算精确的 scrollLeft,更新 viewport signal
502
+ */
503
+ handleWheelEvent(e: WheelEvent): void;
504
+ /**
505
+ * 滚动事件处理(高层 API)
506
+ * 更新缓存的 scrollLeft 并触发交互 controller
507
+ */
508
+ handleScrollEvent(): void;
509
+ /**
510
+ * 双指捏合缩放处理(高层 API)
511
+ * @param delta 缩放增量(+1 放大 / -1 缩小)
512
+ * @param centerClientX 捏合中心在视口中的 X 坐标
513
+ */
514
+ handlePinchZoom(delta: number, centerClientX: number): void;
515
+ /**
516
+ * 更新 viewport signal(用于滚动事件,不更新 desiredScrollLeft)
517
+ */
518
+ private updateViewportSignal;
519
+ /**
520
+ * 添加指标(高层 API,显式指定 role)
521
+ * @param definitionId 指标定义 ID(如 'MA', 'MACD')
522
+ * @param role 'main' 主图指标 或 'sub' 副图指标
523
+ * @param params 指标参数
524
+ * @returns 实例 ID(成功)或 null(失败)
525
+ */
526
+ addIndicator(definitionId: string, role: 'main' | 'sub', params?: Record<string, unknown>): string | null;
527
+ /**
528
+ * 移除指标(高层 API)
529
+ * @param instanceId 指标实例 ID
530
+ * @returns 是否成功移除
531
+ */
532
+ removeIndicator(instanceId: string): boolean;
533
+ /**
534
+ * 更新指标参数(高层 API)
535
+ * @param instanceId 指标实例 ID
536
+ * @param params 新参数
537
+ * @returns 是否成功更新
538
+ */
539
+ updateIndicatorParams(instanceId: string, params: Record<string, unknown>): boolean;
540
+ /**
541
+ * 重新排序指标(高层 API)
542
+ * @param orderedInstanceIds 排序后的指标实例 ID 数组
543
+ * @returns 是否成功
544
+ */
545
+ reorderIndicators(orderedInstanceIds: string[]): boolean;
546
+ /**
547
+ * 同步 indicators signal
548
+ */
549
+ private syncIndicatorsSignal;
550
+ /**
551
+ * 同步 sub panes signal
552
+ */
553
+ private syncSubPanesSignal;
554
+ /**
555
+ * 调整子图大小(高层 API)
556
+ * @param paneId 面板 ID
557
+ * @param deltaY 垂直偏移量
558
+ * @returns 是否成功
559
+ */
560
+ resizeSubPane(paneId: string, deltaY: number): boolean;
561
+ /**
562
+ * 设置当前绘图工具(高层 API)
563
+ * @param tool 工具类型或 null 取消选择
564
+ */
565
+ setDrawingTool(tool: DrawingToolType | null): void;
566
+ /**
567
+ * 移除绘图(高层 API)
568
+ * @param drawingId 绘图 ID
569
+ */
570
+ removeDrawing(drawingId: string): void;
571
+ /**
572
+ * 清除所有绘图(高层 API)
573
+ */
574
+ clearDrawings(): void;
575
+ /**
576
+ * 更新设置(高层 API)
577
+ * 代理到现有的 updateSettings
578
+ */
579
+ updateSettingsFacade(settings: Record<string, unknown>): void;
580
+ /**
581
+ * 更新选项(高层 API)
582
+ * 代理到现有的 updateOptions
583
+ */
584
+ updateOptionsFacade(options: Partial<ChartOptions>): void;
585
+ }
586
+ export type ViewportState = {
587
+ zoomLevel: number;
588
+ plotWidth: number;
589
+ plotHeight: number;
590
+ dpr: number;
591
+ visibleFrom: number;
592
+ visibleTo: number;
593
+ desiredScrollLeft: number | undefined;
594
+ kWidth: number;
595
+ kGap: number;
596
+ };
597
+ export type IndicatorRole = 'main' | 'sub';
598
+ export interface IndicatorInstance {
599
+ id: string;
600
+ definitionId: string;
601
+ label: string;
602
+ name: string;
603
+ role: IndicatorRole;
604
+ paneId?: string;
605
+ params: Record<string, unknown>;
606
+ }
607
+ export interface SubPaneInfo {
608
+ paneId: string;
609
+ indicatorId: string;
610
+ params: Record<string, unknown>;
611
+ ratio: number;
612
+ }
613
+ export type DrawingToolType = 'trendline' | 'horizontal' | 'fib' | 'rectangle' | 'arrow';
614
+ export interface DrawingObject {
615
+ id: string;
616
+ type: DrawingToolType;
420
617
  }
@@ -7,14 +7,14 @@
7
7
  * @param dpr - 设备像素比
8
8
  * @returns 对齐后的逻辑坐标
9
9
  */
10
- export declare function roundToPhysicalPixel(value: number, dpr: number): number;
10
+ export declare function roundToPhysicalPixel(value: number, dpr: number, theme?: 'light' | 'dark'): number;
11
11
  /**
12
12
  * 将逻辑坐标对齐到物理像素中心(用于 1px 线条)
13
13
  * @param value - 逻辑坐标值
14
14
  * @param dpr - 设备像素比
15
15
  * @returns 对齐后的逻辑坐标
16
16
  */
17
- export declare function alignToPhysicalPixelCenter(value: number, dpr: number): number;
17
+ export declare function alignToPhysicalPixelCenter(value: number, dpr: number, theme?: 'light' | 'dark'): number;
18
18
  /**
19
19
  * 对齐矩形到物理像素边界
20
20
  * @param x - 矩形左边界 X 坐标
@@ -24,7 +24,7 @@ export declare function alignToPhysicalPixelCenter(value: number, dpr: number):
24
24
  * @param dpr - 设备像素比
25
25
  * @returns 对齐后的矩形信息
26
26
  */
27
- export declare function alignRect(x: number, y: number, width: number, height: number, dpr: number): {
27
+ export declare function alignRect(x: number, y: number, width: number, height: number, dpr: number, theme?: 'light' | 'dark'): {
28
28
  x: number;
29
29
  y: number;
30
30
  width: number;
@@ -38,7 +38,7 @@ export declare function alignRect(x: number, y: number, width: number, height: n
38
38
  * @param dpr - 设备像素比
39
39
  * @returns 对齐到物理像素的矩形信息,如果 y1 和 y2 相等则返回 null
40
40
  */
41
- export declare function createVerticalLineRect(centerX: number, y1: number, y2: number, dpr: number): {
41
+ export declare function createVerticalLineRect(centerX: number, y1: number, y2: number, dpr: number, theme?: 'light' | 'dark'): {
42
42
  x: number;
43
43
  y: number;
44
44
  width: number;
@@ -52,7 +52,7 @@ export declare function createVerticalLineRect(centerX: number, y1: number, y2:
52
52
  * @param dpr - 设备像素比
53
53
  * @returns 对齐到物理像素的矩形信息,如果 x1 和 x2 相等则返回 null
54
54
  */
55
- export declare function createHorizontalLineRect(x1: number, x2: number, centerY: number, dpr: number): {
55
+ export declare function createHorizontalLineRect(x1: number, x2: number, centerY: number, dpr: number, theme?: 'light' | 'dark'): {
56
56
  x: number;
57
57
  y: number;
58
58
  width: number;
@@ -67,7 +67,7 @@ export declare function createHorizontalLineRect(x1: number, x2: number, centerY
67
67
  * @param dpr - 设备像素比
68
68
  * @returns 对齐后的实体和影线信息
69
69
  */
70
- export declare function createAlignedKLine(rectX: number, rectY: number, kWidth: number, height: number, dpr: number): {
70
+ export declare function createAlignedKLine(rectX: number, rectY: number, kWidth: number, height: number, dpr: number, theme?: 'light' | 'dark'): {
71
71
  bodyRect: {
72
72
  x: number;
73
73
  y: number;
@@ -94,7 +94,7 @@ export declare function createAlignedKLine(rectX: number, rectY: number, kWidth:
94
94
  * @param dpr - 设备像素比
95
95
  * @returns 对齐后的实体和影线信息
96
96
  */
97
- export declare function createAlignedKLineFromPx(leftPx: number, rectY: number, widthPx: number, height: number, dpr: number): {
97
+ export declare function createAlignedKLineFromPx(leftPx: number, rectY: number, widthPx: number, height: number, dpr: number, theme?: 'light' | 'dark'): {
98
98
  bodyRect: {
99
99
  x: number;
100
100
  y: number;
@@ -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;
@@ -334,3 +334,132 @@ export interface DonchianPoint {
334
334
  export declare const DEFAULT_DONCHIAN_PERIOD = 20;
335
335
  export declare function calcDonchianData(data: KLineData[], period: number): (DonchianPoint | undefined)[];
336
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,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,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;
@@ -0,0 +1,44 @@
1
+ import { BaseIndicatorState } from '../../plugin';
2
+ /**
3
+ * 一目均衡表数据点:5 条线在同一根 K 线槽位
4
+ * - tenkan (转换线) = (HH9 + LL9) / 2,当根 K 线计算
5
+ * - kijun (基准线) = (HH26 + LL26) / 2,当根 K 线计算
6
+ * - spanA (先行带 A) = (tenkan[t-displacement] + kijun[t-displacement]) / 2,前置位移
7
+ * - spanB (先行带 B) = (HH52[t-displacement] + LL52[t-displacement]) / 2,前置位移
8
+ * - chikou (迟行线) = close[t+displacement],后置位移
9
+ *
10
+ * 任一字段都可能 undefined(数据不足或位移外)。
11
+ */
12
+ export interface IchimokuPoint {
13
+ tenkan?: number;
14
+ kijun?: number;
15
+ spanA?: number;
16
+ spanB?: number;
17
+ chikou?: number;
18
+ }
19
+ export interface IchimokuRenderState extends BaseIndicatorState {
20
+ timestamp: number;
21
+ series: (IchimokuPoint | undefined)[];
22
+ params: {
23
+ tenkanPeriod: number;
24
+ kijunPeriod: number;
25
+ spanBPeriod: number;
26
+ displacement: number;
27
+ showTenkan: boolean;
28
+ showKijun: boolean;
29
+ showSpanA: boolean;
30
+ showSpanB: boolean;
31
+ showCloud: boolean;
32
+ showChikou: boolean;
33
+ };
34
+ valueMin: number;
35
+ valueMax: number;
36
+ visibleMin: number;
37
+ visibleMax: number;
38
+ }
39
+ export declare const createIchimokuStateKey: (paneId: string) => `indicator:${string}:${string}`;
40
+ export declare const DEFAULT_ICHIMOKU_TENKAN = 9;
41
+ export declare const DEFAULT_ICHIMOKU_KIJUN = 26;
42
+ export declare const DEFAULT_ICHIMOKU_SPAN_B = 52;
43
+ export declare const DEFAULT_ICHIMOKU_DISPLACEMENT = 26;
44
+ export declare const EMPTY_ICHIMOKU_STATE: IchimokuRenderState;