@363045841yyt/klinechart 0.6.8 → 0.6.10
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.
- package/README.md +1 -0
- package/dist/index.cjs +5 -20
- package/dist/index.js +6046 -11120
- package/dist/klinechart.css +1 -1
- package/dist/schema-CzmPW09E.cjs +1 -0
- package/dist/schema-DBMGp6Af.js +437 -0
- package/dist/src/api/data/baostock.d.ts +4 -0
- package/dist/src/components/IndicatorSelector.vue.d.ts +0 -9
- package/dist/src/components/KLineChart.vue.d.ts +5 -5
- package/dist/src/components/LeftToolbar.vue.d.ts +3 -3
- package/dist/src/config/chartSettings.d.ts +15 -10
- package/dist/src/core/chart.d.ts +38 -5
- package/dist/src/core/controller/interaction.d.ts +2 -30
- package/dist/src/core/controller/markerInteraction.d.ts +28 -0
- package/dist/src/core/controller/pinchTracker.d.ts +18 -0
- package/dist/src/core/controller/tooltipPosition.d.ts +21 -0
- package/dist/src/core/indicators/atrState.d.ts +16 -0
- package/dist/src/core/indicators/calculators.d.ts +67 -0
- package/dist/src/core/indicators/demaState.d.ts +16 -0
- package/dist/src/core/indicators/donchianState.d.ts +23 -0
- package/dist/src/core/indicators/hmaState.d.ts +16 -0
- package/dist/src/core/indicators/indicatorRuntime.d.ts +20 -0
- package/dist/src/core/indicators/kamaState.d.ts +20 -0
- package/dist/src/core/indicators/keltnerState.d.ts +27 -0
- package/dist/src/core/indicators/sarState.d.ts +26 -0
- package/dist/src/core/indicators/scheduler.d.ts +55 -3
- package/dist/src/core/indicators/stateComposer.d.ts +30 -0
- package/dist/src/core/indicators/supertrendState.d.ts +22 -0
- package/dist/src/core/indicators/temaState.d.ts +16 -0
- package/dist/src/core/indicators/wmaState.d.ts +16 -0
- package/dist/src/core/indicators/workerProtocol.d.ts +111 -1
- package/dist/src/core/paneRenderer.d.ts +3 -1
- package/dist/src/core/renderers/Indicator/atr.d.ts +17 -0
- package/dist/src/core/renderers/Indicator/dema.d.ts +5 -0
- package/dist/src/core/renderers/Indicator/donchian.d.ts +5 -0
- package/dist/src/core/renderers/Indicator/hma.d.ts +5 -0
- package/dist/src/core/renderers/Indicator/index.d.ts +2 -1
- package/dist/src/core/renderers/Indicator/indicatorData.d.ts +13 -0
- package/dist/src/core/renderers/Indicator/kama.d.ts +5 -0
- package/dist/src/core/renderers/Indicator/keltner.d.ts +5 -0
- package/dist/src/core/renderers/Indicator/sar.d.ts +5 -0
- package/dist/src/core/renderers/Indicator/scale/atr_scale.d.ts +11 -0
- package/dist/src/core/renderers/Indicator/subPaneConfig.d.ts +9 -0
- package/dist/src/core/renderers/Indicator/supertrend.d.ts +5 -0
- package/dist/src/core/renderers/Indicator/tema.d.ts +5 -0
- package/dist/src/core/renderers/Indicator/wma.d.ts +5 -0
- package/dist/src/core/renderers/lastPrice.d.ts +5 -1
- package/dist/src/core/renderers/webgl/candleSurface.d.ts +19 -6
- package/dist/src/core/renderers/webgl/sharedWebGLSurface.d.ts +33 -0
- package/dist/src/core/subPaneManager.d.ts +22 -0
- package/dist/src/semantic/types.d.ts +36 -0
- package/dist/src/semantic/validator.d.ts +3 -2
- package/dist/src/test-setup.d.ts +6 -0
- package/dist/src/utils/http.d.ts +14 -0
- package/package.json +2 -3
- package/dist/favicon.ico +0 -0
- package/dist/mock-stock-data.json +0 -1
- /package/dist/src/api/data/{baostock.test.d.ts → baostock.integration.test.d.ts} +0 -0
|
@@ -4,14 +4,19 @@
|
|
|
4
4
|
export interface SettingItem {
|
|
5
5
|
key: string;
|
|
6
6
|
label: string;
|
|
7
|
-
type: 'boolean';
|
|
8
|
-
default: boolean;
|
|
7
|
+
type: 'boolean' | 'select';
|
|
8
|
+
default: boolean | string;
|
|
9
9
|
group?: string;
|
|
10
|
+
options?: {
|
|
11
|
+
value: string;
|
|
12
|
+
label: string;
|
|
13
|
+
}[];
|
|
10
14
|
}
|
|
11
15
|
/**
|
|
12
|
-
*
|
|
16
|
+
* 检测设备类型:mobile / tablet / desktop
|
|
17
|
+
* 优先使用 Client Hints API (navigator.userAgentData),不支持时回退到 UA + 屏幕/触控检测
|
|
13
18
|
*/
|
|
14
|
-
export declare function
|
|
19
|
+
export declare function getDeviceType(): 'mobile' | 'tablet' | 'desktop';
|
|
15
20
|
/** 默认设置配置 */
|
|
16
21
|
export declare const DEFAULT_SETTINGS: readonly [{
|
|
17
22
|
readonly key: "showVolumePriceMarkers";
|
|
@@ -26,16 +31,16 @@ export declare const DEFAULT_SETTINGS: readonly [{
|
|
|
26
31
|
readonly default: false;
|
|
27
32
|
readonly group: "main";
|
|
28
33
|
}, {
|
|
29
|
-
readonly key: "
|
|
30
|
-
readonly label: "
|
|
34
|
+
readonly key: "disableMainPaneVerticalScroll";
|
|
35
|
+
readonly label: "主图纵轴刻度自适应调整";
|
|
31
36
|
readonly type: "boolean";
|
|
32
37
|
readonly default: true;
|
|
33
38
|
readonly group: "main";
|
|
34
39
|
}, {
|
|
35
|
-
readonly key: "
|
|
36
|
-
readonly label: "
|
|
40
|
+
readonly key: "enableWebGLRendering";
|
|
41
|
+
readonly label: "启用 WebGL 硬件加速渲染";
|
|
37
42
|
readonly type: "boolean";
|
|
38
|
-
readonly default:
|
|
43
|
+
readonly default: boolean;
|
|
39
44
|
readonly group: "main";
|
|
40
45
|
}, {
|
|
41
46
|
readonly key: "performanceTest10kKlines";
|
|
@@ -53,6 +58,6 @@ export declare const DEFAULT_SETTINGS: readonly [{
|
|
|
53
58
|
/** 图表设置类型(从 DEFAULT_SETTINGS 自动推导,同时兼容扩展) */
|
|
54
59
|
export type ChartSettings = {
|
|
55
60
|
[K in (typeof DEFAULT_SETTINGS)[number]['key']]?: boolean;
|
|
56
|
-
} & Record<string, boolean>;
|
|
61
|
+
} & Record<string, boolean | string>;
|
|
57
62
|
/** localStorage 存储键名 */
|
|
58
63
|
export declare const SETTINGS_STORAGE_KEY = "kline-chart-settings";
|
package/dist/src/core/chart.d.ts
CHANGED
|
@@ -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,6 +142,8 @@ 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
|
/** 主图指标参数配置 */
|
|
@@ -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,只负责接收参数并渲染
|
|
@@ -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>): boolean;
|
|
320
327
|
/**
|
|
321
328
|
* 移除副图面板及其渲染器
|
|
322
|
-
* @param
|
|
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>): void;
|
|
339
|
+
/**
|
|
340
|
+
* 更新副图指标参数
|
|
341
|
+
* @param paneId 副图实例标识符
|
|
342
|
+
* @param params 新参数
|
|
323
343
|
*/
|
|
324
|
-
|
|
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
|
-
|
|
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;
|
|
@@ -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,70 @@ 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)[];
|
|
@@ -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,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;
|
|
@@ -21,6 +21,16 @@ export declare class IndicatorRuntime {
|
|
|
21
21
|
private cachedKstSeries;
|
|
22
22
|
private cachedFastkSeries;
|
|
23
23
|
private cachedMacdSeries;
|
|
24
|
+
private cachedAtrSeries;
|
|
25
|
+
private cachedWmaSeries;
|
|
26
|
+
private cachedDemaSeries;
|
|
27
|
+
private cachedTemaSeries;
|
|
28
|
+
private cachedHmaSeries;
|
|
29
|
+
private cachedKamaSeries;
|
|
30
|
+
private cachedSarSeries;
|
|
31
|
+
private cachedSupertrendSeries;
|
|
32
|
+
private cachedKeltnerSeries;
|
|
33
|
+
private cachedDonchianSeries;
|
|
24
34
|
private dirtyData;
|
|
25
35
|
private dirtyMAConfig;
|
|
26
36
|
private dirtyBollConfig;
|
|
@@ -34,6 +44,16 @@ export declare class IndicatorRuntime {
|
|
|
34
44
|
private dirtyKstConfig;
|
|
35
45
|
private dirtyFastkConfig;
|
|
36
46
|
private dirtyMacdConfig;
|
|
47
|
+
private dirtyAtrConfig;
|
|
48
|
+
private dirtyWmaConfig;
|
|
49
|
+
private dirtyDemaConfig;
|
|
50
|
+
private dirtyTemaConfig;
|
|
51
|
+
private dirtyHmaConfig;
|
|
52
|
+
private dirtyKamaConfig;
|
|
53
|
+
private dirtySarConfig;
|
|
54
|
+
private dirtySupertrendConfig;
|
|
55
|
+
private dirtyKeltnerConfig;
|
|
56
|
+
private dirtyDonchianConfig;
|
|
37
57
|
private getDefaultConfig;
|
|
38
58
|
/**
|
|
39
59
|
* 更新数据
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { BaseIndicatorState } from '../../plugin';
|
|
2
|
+
export interface KAMARenderState extends BaseIndicatorState {
|
|
3
|
+
timestamp: number;
|
|
4
|
+
series: (number | undefined)[];
|
|
5
|
+
params: {
|
|
6
|
+
period: number;
|
|
7
|
+
fastPeriod: number;
|
|
8
|
+
slowPeriod: number;
|
|
9
|
+
showKAMA: boolean;
|
|
10
|
+
};
|
|
11
|
+
valueMin: number;
|
|
12
|
+
valueMax: number;
|
|
13
|
+
visibleMin: number;
|
|
14
|
+
visibleMax: number;
|
|
15
|
+
}
|
|
16
|
+
export declare const createKAMAStateKey: (paneId: string) => `indicator:${string}:${string}`;
|
|
17
|
+
export declare const DEFAULT_KAMA_PERIOD = 10;
|
|
18
|
+
export declare const DEFAULT_KAMA_FAST_PERIOD = 2;
|
|
19
|
+
export declare const DEFAULT_KAMA_SLOW_PERIOD = 30;
|
|
20
|
+
export declare const EMPTY_KAMA_STATE: KAMARenderState;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { BaseIndicatorState } from '../../plugin';
|
|
2
|
+
export interface KeltnerPoint {
|
|
3
|
+
upper: number;
|
|
4
|
+
middle: number;
|
|
5
|
+
lower: number;
|
|
6
|
+
}
|
|
7
|
+
export interface KeltnerRenderState extends BaseIndicatorState {
|
|
8
|
+
timestamp: number;
|
|
9
|
+
series: (KeltnerPoint | undefined)[];
|
|
10
|
+
params: {
|
|
11
|
+
emaPeriod: number;
|
|
12
|
+
atrPeriod: number;
|
|
13
|
+
multiplier: number;
|
|
14
|
+
showUpper: boolean;
|
|
15
|
+
showMiddle: boolean;
|
|
16
|
+
showLower: boolean;
|
|
17
|
+
};
|
|
18
|
+
valueMin: number;
|
|
19
|
+
valueMax: number;
|
|
20
|
+
visibleMin: number;
|
|
21
|
+
visibleMax: number;
|
|
22
|
+
}
|
|
23
|
+
export declare const createKeltnerStateKey: (paneId: string) => `indicator:${string}:${string}`;
|
|
24
|
+
export declare const DEFAULT_KELTNER_EMA_PERIOD = 20;
|
|
25
|
+
export declare const DEFAULT_KELTNER_ATR_PERIOD = 10;
|
|
26
|
+
export declare const DEFAULT_KELTNER_MULTIPLIER = 2;
|
|
27
|
+
export declare const EMPTY_KELTNER_STATE: KeltnerRenderState;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { BaseIndicatorState } from '../../plugin';
|
|
2
|
+
/**
|
|
3
|
+
* SAR 点:value 是 SAR 价格,trend = 'up' 表示 SAR 在 K 线下方(多头止损)
|
|
4
|
+
* 'down' 表示 SAR 在 K 线上方(空头止损)。
|
|
5
|
+
*/
|
|
6
|
+
export interface SARPoint {
|
|
7
|
+
value: number;
|
|
8
|
+
trend: 'up' | 'down';
|
|
9
|
+
}
|
|
10
|
+
export interface SARRenderState extends BaseIndicatorState {
|
|
11
|
+
timestamp: number;
|
|
12
|
+
series: (SARPoint | undefined)[];
|
|
13
|
+
params: {
|
|
14
|
+
step: number;
|
|
15
|
+
maxStep: number;
|
|
16
|
+
showSAR: boolean;
|
|
17
|
+
};
|
|
18
|
+
valueMin: number;
|
|
19
|
+
valueMax: number;
|
|
20
|
+
visibleMin: number;
|
|
21
|
+
visibleMax: number;
|
|
22
|
+
}
|
|
23
|
+
export declare const createSARStateKey: (paneId: string) => `indicator:${string}:${string}`;
|
|
24
|
+
export declare const DEFAULT_SAR_STEP = 0.02;
|
|
25
|
+
export declare const DEFAULT_SAR_MAX_STEP = 0.2;
|
|
26
|
+
export declare const EMPTY_SAR_STATE: SARRenderState;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { PluginHost } from '../../plugin';
|
|
2
2
|
import { KLineData } from '../../types/price';
|
|
3
|
-
import { BOLLSchedulerConfig, EXPMASchedulerConfig, ENESchedulerConfig, RSISchedulerConfig, CCISchedulerConfig, STOCHSchedulerConfig, MOMSchedulerConfig, WMSRSchedulerConfig, KSTSchedulerConfig, FASTKSchedulerConfig, MACDSchedulerConfig } from './workerProtocol';
|
|
3
|
+
import { BOLLSchedulerConfig, EXPMASchedulerConfig, ENESchedulerConfig, RSISchedulerConfig, CCISchedulerConfig, STOCHSchedulerConfig, MOMSchedulerConfig, WMSRSchedulerConfig, KSTSchedulerConfig, FASTKSchedulerConfig, MACDSchedulerConfig, ATRSchedulerConfig, WMASchedulerConfig, DEMASchedulerConfig, TEMASchedulerConfig, HMASchedulerConfig, KAMASchedulerConfig, SARSchedulerConfig, SuperTrendSchedulerConfig, KeltnerSchedulerConfig, DonchianSchedulerConfig } from './workerProtocol';
|
|
4
4
|
import { MAFlags } from './calculators';
|
|
5
5
|
/**
|
|
6
6
|
* 可见范围
|
|
@@ -9,7 +9,7 @@ interface VisibleRange {
|
|
|
9
9
|
start: number;
|
|
10
10
|
end: number;
|
|
11
11
|
}
|
|
12
|
-
export type { BOLLSchedulerConfig, EXPMASchedulerConfig, ENESchedulerConfig, RSISchedulerConfig, CCISchedulerConfig, STOCHSchedulerConfig, MOMSchedulerConfig, WMSRSchedulerConfig, KSTSchedulerConfig, FASTKSchedulerConfig, MACDSchedulerConfig, };
|
|
12
|
+
export type { BOLLSchedulerConfig, EXPMASchedulerConfig, ENESchedulerConfig, RSISchedulerConfig, CCISchedulerConfig, STOCHSchedulerConfig, MOMSchedulerConfig, WMSRSchedulerConfig, KSTSchedulerConfig, FASTKSchedulerConfig, MACDSchedulerConfig, ATRSchedulerConfig, WMASchedulerConfig, DEMASchedulerConfig, TEMASchedulerConfig, HMASchedulerConfig, KAMASchedulerConfig, SARSchedulerConfig, SuperTrendSchedulerConfig, KeltnerSchedulerConfig, DonchianSchedulerConfig, };
|
|
13
13
|
/**
|
|
14
14
|
* IndicatorScheduler - 主线程 facade
|
|
15
15
|
*/
|
|
@@ -30,6 +30,8 @@ export declare class IndicatorScheduler {
|
|
|
30
30
|
private inlineRuntime;
|
|
31
31
|
private latestResult;
|
|
32
32
|
private invalidateCallback;
|
|
33
|
+
/** 从 Chart 获取活跃副图 paneId 列表的回调 */
|
|
34
|
+
private getActiveSubPaneIds;
|
|
33
35
|
constructor();
|
|
34
36
|
/**
|
|
35
37
|
* 设置 PluginHost
|
|
@@ -39,6 +41,14 @@ export declare class IndicatorScheduler {
|
|
|
39
41
|
* 设置重绘回调
|
|
40
42
|
*/
|
|
41
43
|
setInvalidateCallback(callback: () => void): void;
|
|
44
|
+
/**
|
|
45
|
+
* 副图增删后通知 scheduler 刷新 active mask
|
|
46
|
+
*/
|
|
47
|
+
onSubPaneChanged(): void;
|
|
48
|
+
/**
|
|
49
|
+
* 设置活跃副图 paneId 提供者(来自 Chart.getSubPaneIndicators)
|
|
50
|
+
*/
|
|
51
|
+
setActiveSubPaneProvider(provider: () => string[]): void;
|
|
42
52
|
/**
|
|
43
53
|
* 销毁调度器
|
|
44
54
|
*/
|
|
@@ -53,7 +63,9 @@ export declare class IndicatorScheduler {
|
|
|
53
63
|
private handleSeriesResult;
|
|
54
64
|
private applyResults;
|
|
55
65
|
private updateVisibleStatesOnly;
|
|
56
|
-
private
|
|
66
|
+
private buildActiveSubIndicatorMask;
|
|
67
|
+
/** 仅保留活跃副图的配置,后端只算这些 */
|
|
68
|
+
private buildActiveConfig;
|
|
57
69
|
/**
|
|
58
70
|
* 数据变更时调用
|
|
59
71
|
*/
|
|
@@ -110,6 +122,46 @@ export declare class IndicatorScheduler {
|
|
|
110
122
|
* MACD 配置变更
|
|
111
123
|
*/
|
|
112
124
|
updateMACDConfig(config: Partial<MACDSchedulerConfig>, paneId?: string): void;
|
|
125
|
+
/**
|
|
126
|
+
* ATR 配置变更
|
|
127
|
+
*/
|
|
128
|
+
updateATRConfig(config: Partial<ATRSchedulerConfig>, paneId?: string): void;
|
|
129
|
+
/**
|
|
130
|
+
* WMA 配置变更
|
|
131
|
+
*/
|
|
132
|
+
updateWMAConfig(config: Partial<WMASchedulerConfig>, paneId?: string): void;
|
|
133
|
+
/**
|
|
134
|
+
* DEMA 配置变更
|
|
135
|
+
*/
|
|
136
|
+
updateDEMAConfig(config: Partial<DEMASchedulerConfig>, paneId?: string): void;
|
|
137
|
+
/**
|
|
138
|
+
* TEMA 配置变更
|
|
139
|
+
*/
|
|
140
|
+
updateTEMAConfig(config: Partial<TEMASchedulerConfig>, paneId?: string): void;
|
|
141
|
+
/**
|
|
142
|
+
* HMA 配置变更
|
|
143
|
+
*/
|
|
144
|
+
updateHMAConfig(config: Partial<HMASchedulerConfig>, paneId?: string): void;
|
|
145
|
+
/**
|
|
146
|
+
* KAMA 配置变更
|
|
147
|
+
*/
|
|
148
|
+
updateKAMAConfig(config: Partial<KAMASchedulerConfig>, paneId?: string): void;
|
|
149
|
+
/**
|
|
150
|
+
* SAR 配置变更
|
|
151
|
+
*/
|
|
152
|
+
updateSARConfig(config: Partial<SARSchedulerConfig>, paneId?: string): void;
|
|
153
|
+
/**
|
|
154
|
+
* SuperTrend 配置变更
|
|
155
|
+
*/
|
|
156
|
+
updateSuperTrendConfig(config: Partial<SuperTrendSchedulerConfig>, paneId?: string): void;
|
|
157
|
+
/**
|
|
158
|
+
* Keltner 配置变更
|
|
159
|
+
*/
|
|
160
|
+
updateKeltnerConfig(config: Partial<KeltnerSchedulerConfig>, paneId?: string): void;
|
|
161
|
+
/**
|
|
162
|
+
* Donchian 配置变更
|
|
163
|
+
*/
|
|
164
|
+
updateDonchianConfig(config: Partial<DonchianSchedulerConfig>, paneId?: string): void;
|
|
113
165
|
/**
|
|
114
166
|
* 设置当前激活的主图指标
|
|
115
167
|
*/
|