@363045841yyt/klinechart 0.6.5 → 0.6.6
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 +4 -3
- package/dist/index.cjs +4 -4
- package/dist/index.js +1565 -1071
- package/dist/klinechart.css +1 -1
- package/dist/src/core/indicators/indicator.worker.d.ts +5 -0
- package/dist/src/core/indicators/indicatorRuntime.d.ts +71 -0
- package/dist/src/core/indicators/scheduler.d.ts +61 -209
- package/dist/src/core/indicators/stateComposer.d.ts +47 -0
- package/dist/src/core/indicators/workerProtocol.d.ts +189 -0
- package/dist/src/core/renderers/Indicator/macdLegend.d.ts +5 -3
- package/dist/src/core/renderers/webgl/candleSurface.d.ts +1 -0
- package/dist/src/core/utils/zoom.d.ts +2 -2
- package/dist/src/utils/dateFormat.d.ts +10 -8
- package/package.json +11 -9
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import { KLineData } from '../../types/price';
|
|
2
|
+
import { MAFlags, BOLLPoint, EXPMAPoint, ENEPoint, STOCHPoint, KSTPoint, MACDPoint } from './calculators';
|
|
3
|
+
export interface BOLLSchedulerConfig {
|
|
4
|
+
period: number;
|
|
5
|
+
multiplier: number;
|
|
6
|
+
showUpper: boolean;
|
|
7
|
+
showMiddle: boolean;
|
|
8
|
+
showLower: boolean;
|
|
9
|
+
showBand: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface EXPMASchedulerConfig {
|
|
12
|
+
fastPeriod: number;
|
|
13
|
+
slowPeriod: number;
|
|
14
|
+
}
|
|
15
|
+
export interface ENESchedulerConfig {
|
|
16
|
+
period: number;
|
|
17
|
+
deviation: number;
|
|
18
|
+
}
|
|
19
|
+
export interface RSISchedulerConfig {
|
|
20
|
+
period1: number;
|
|
21
|
+
period2: number;
|
|
22
|
+
period3: number;
|
|
23
|
+
showRSI1: boolean;
|
|
24
|
+
showRSI2: boolean;
|
|
25
|
+
showRSI3: boolean;
|
|
26
|
+
}
|
|
27
|
+
export interface CCISchedulerConfig {
|
|
28
|
+
period: number;
|
|
29
|
+
showCCI: boolean;
|
|
30
|
+
}
|
|
31
|
+
export interface STOCHSchedulerConfig {
|
|
32
|
+
n: number;
|
|
33
|
+
m: number;
|
|
34
|
+
showK: boolean;
|
|
35
|
+
showD: boolean;
|
|
36
|
+
}
|
|
37
|
+
export interface MOMSchedulerConfig {
|
|
38
|
+
period: number;
|
|
39
|
+
showMOM: boolean;
|
|
40
|
+
}
|
|
41
|
+
export interface WMSRSchedulerConfig {
|
|
42
|
+
period: number;
|
|
43
|
+
showWMSR: boolean;
|
|
44
|
+
}
|
|
45
|
+
export interface KSTSchedulerConfig {
|
|
46
|
+
roc1: number;
|
|
47
|
+
roc2: number;
|
|
48
|
+
roc3: number;
|
|
49
|
+
roc4: number;
|
|
50
|
+
signalPeriod: number;
|
|
51
|
+
showKST: boolean;
|
|
52
|
+
showSignal: boolean;
|
|
53
|
+
}
|
|
54
|
+
export interface FASTKSchedulerConfig {
|
|
55
|
+
period: number;
|
|
56
|
+
showFASTK: boolean;
|
|
57
|
+
}
|
|
58
|
+
export interface MACDSchedulerConfig {
|
|
59
|
+
fastPeriod: number;
|
|
60
|
+
slowPeriod: number;
|
|
61
|
+
signalPeriod: number;
|
|
62
|
+
showDIF: boolean;
|
|
63
|
+
showDEA: boolean;
|
|
64
|
+
showBAR: boolean;
|
|
65
|
+
}
|
|
66
|
+
export interface InitRequest {
|
|
67
|
+
type: 'init';
|
|
68
|
+
protocolVersion: number;
|
|
69
|
+
}
|
|
70
|
+
export interface SetDataRequest {
|
|
71
|
+
type: 'setData';
|
|
72
|
+
dataVersion: number;
|
|
73
|
+
format: 'aos' | 'soa';
|
|
74
|
+
data: KLineData[];
|
|
75
|
+
}
|
|
76
|
+
export interface SetConfigRequest {
|
|
77
|
+
type: 'setConfig';
|
|
78
|
+
configVersion: number;
|
|
79
|
+
configs: IndicatorConfigSnapshot;
|
|
80
|
+
}
|
|
81
|
+
export interface ComputeSeriesRequest {
|
|
82
|
+
type: 'computeSeries';
|
|
83
|
+
requestId: number;
|
|
84
|
+
dataVersion: number;
|
|
85
|
+
configVersion: number;
|
|
86
|
+
}
|
|
87
|
+
export interface DisposeRequest {
|
|
88
|
+
type: 'dispose';
|
|
89
|
+
}
|
|
90
|
+
export type IndicatorWorkerRequest = InitRequest | SetDataRequest | SetConfigRequest | ComputeSeriesRequest | DisposeRequest;
|
|
91
|
+
export interface ReadyResponse {
|
|
92
|
+
type: 'ready';
|
|
93
|
+
protocolVersion: number;
|
|
94
|
+
}
|
|
95
|
+
export interface SeriesResultResponse {
|
|
96
|
+
type: 'seriesResult';
|
|
97
|
+
requestId: number;
|
|
98
|
+
dataVersion: number;
|
|
99
|
+
configVersion: number;
|
|
100
|
+
results: IndicatorSeriesBundle;
|
|
101
|
+
metrics?: {
|
|
102
|
+
computeMs: number;
|
|
103
|
+
dataLength: number;
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
export interface ErrorResponse {
|
|
107
|
+
type: 'error';
|
|
108
|
+
requestId?: number;
|
|
109
|
+
stage: 'init' | 'setData' | 'setConfig' | 'computeSeries';
|
|
110
|
+
message: string;
|
|
111
|
+
}
|
|
112
|
+
export type IndicatorWorkerResponse = ReadyResponse | SeriesResultResponse | ErrorResponse;
|
|
113
|
+
export interface IndicatorConfigSnapshot {
|
|
114
|
+
ma: MAFlags;
|
|
115
|
+
boll: BOLLSchedulerConfig;
|
|
116
|
+
expma: EXPMASchedulerConfig;
|
|
117
|
+
ene: ENESchedulerConfig;
|
|
118
|
+
rsi: RSISchedulerConfig;
|
|
119
|
+
cci: CCISchedulerConfig;
|
|
120
|
+
stoch: STOCHSchedulerConfig;
|
|
121
|
+
mom: MOMSchedulerConfig;
|
|
122
|
+
wmsr: WMSRSchedulerConfig;
|
|
123
|
+
kst: KSTSchedulerConfig;
|
|
124
|
+
fastk: FASTKSchedulerConfig;
|
|
125
|
+
macd: MACDSchedulerConfig;
|
|
126
|
+
rsiPaneId: string;
|
|
127
|
+
cciPaneId: string;
|
|
128
|
+
stochPaneId: string;
|
|
129
|
+
momPaneId: string;
|
|
130
|
+
wmsrPaneId: string;
|
|
131
|
+
kstPaneId: string;
|
|
132
|
+
fastkPaneId: string;
|
|
133
|
+
macdPaneId: string;
|
|
134
|
+
}
|
|
135
|
+
export interface IndicatorSeriesBundle {
|
|
136
|
+
ma: {
|
|
137
|
+
series: Record<number, (number | undefined)[]>;
|
|
138
|
+
enabledPeriods: number[];
|
|
139
|
+
};
|
|
140
|
+
boll: {
|
|
141
|
+
series: BOLLPoint[];
|
|
142
|
+
params: BOLLSchedulerConfig;
|
|
143
|
+
};
|
|
144
|
+
expma: {
|
|
145
|
+
series: EXPMAPoint[];
|
|
146
|
+
params: EXPMASchedulerConfig;
|
|
147
|
+
};
|
|
148
|
+
ene: {
|
|
149
|
+
series: ENEPoint[];
|
|
150
|
+
params: ENESchedulerConfig;
|
|
151
|
+
};
|
|
152
|
+
rsi: {
|
|
153
|
+
series: Record<number, (number | undefined)[]>;
|
|
154
|
+
enabledPeriods: number[];
|
|
155
|
+
params: RSISchedulerConfig;
|
|
156
|
+
};
|
|
157
|
+
cci: {
|
|
158
|
+
series: (number | undefined)[];
|
|
159
|
+
params: CCISchedulerConfig;
|
|
160
|
+
};
|
|
161
|
+
stoch: {
|
|
162
|
+
series: STOCHPoint[];
|
|
163
|
+
params: STOCHSchedulerConfig;
|
|
164
|
+
};
|
|
165
|
+
mom: {
|
|
166
|
+
series: (number | undefined)[];
|
|
167
|
+
params: MOMSchedulerConfig;
|
|
168
|
+
};
|
|
169
|
+
wmsr: {
|
|
170
|
+
series: (number | undefined)[];
|
|
171
|
+
params: WMSRSchedulerConfig;
|
|
172
|
+
};
|
|
173
|
+
kst: {
|
|
174
|
+
series: KSTPoint[];
|
|
175
|
+
params: KSTSchedulerConfig;
|
|
176
|
+
};
|
|
177
|
+
fastk: {
|
|
178
|
+
series: (number | undefined)[];
|
|
179
|
+
params: FASTKSchedulerConfig;
|
|
180
|
+
};
|
|
181
|
+
macd: {
|
|
182
|
+
series: MACDPoint[];
|
|
183
|
+
params: MACDSchedulerConfig;
|
|
184
|
+
};
|
|
185
|
+
/** 本次计算中实际变更的指标列表 */
|
|
186
|
+
_changed: string[];
|
|
187
|
+
}
|
|
188
|
+
export declare const PROTOCOL_VERSION = 1;
|
|
189
|
+
export declare function isWorkerResponse(msg: unknown): msg is IndicatorWorkerResponse;
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { RendererPluginWithHost } from '../../../plugin';
|
|
2
2
|
export interface MACDLegendOptions {
|
|
3
3
|
/** Y 轴内边距(与主图保持一致) */
|
|
4
4
|
yPaddingPx?: number;
|
|
5
|
+
/** 目标 pane ID(默认 'sub') */
|
|
6
|
+
paneId?: string;
|
|
5
7
|
}
|
|
6
8
|
/**
|
|
7
9
|
* 创建 MACD 图例渲染器插件
|
|
8
|
-
*
|
|
10
|
+
* 从 StateStore 读取 MACD 状态,不再在 draw 时计算
|
|
9
11
|
*/
|
|
10
|
-
export declare function createMACDLegendRendererPlugin(options?: MACDLegendOptions):
|
|
12
|
+
export declare function createMACDLegendRendererPlugin(options?: MACDLegendOptions): RendererPluginWithHost;
|
|
@@ -16,8 +16,8 @@ export interface ZoomResult {
|
|
|
16
16
|
}
|
|
17
17
|
/** 将缩放级别转换为 K 线宽度(逻辑像素) */
|
|
18
18
|
export declare function zoomLevelToKWidth(level: number, config: ZoomConfig): number;
|
|
19
|
-
/**
|
|
20
|
-
export declare function
|
|
19
|
+
/** 根据K线宽度和DPR推导间隙(逻辑像素),K线越窄间距越小 */
|
|
20
|
+
export declare function kGapFromKWidth(kWidth: number, dpr: number): number;
|
|
21
21
|
/**
|
|
22
22
|
* 缩放一级(+1 放大 / -1 缩小)
|
|
23
23
|
* 返回新状态或 null(已达边界)
|
|
@@ -51,7 +51,15 @@ export declare function formatMonthOrYear(timestamp: number): {
|
|
|
51
51
|
* @example
|
|
52
52
|
* monthKey(1736793600000) // "2025-1"
|
|
53
53
|
*/
|
|
54
|
-
|
|
54
|
+
/**
|
|
55
|
+
* 生成月份键值用于比较
|
|
56
|
+
* 返回数字 year * 12 + month,比字符串比较更快且无分配
|
|
57
|
+
* 使用 new Date 保证本地时区正确(与显示一致)
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* monthKey(1736793600000) // 24301 (2025*12 + 0)
|
|
61
|
+
*/
|
|
62
|
+
export declare function monthKey(timestamp: number): number;
|
|
55
63
|
/**
|
|
56
64
|
* formatDateToYYYYMMDD 的别名,保持与历史代码的兼容性
|
|
57
65
|
* timestamp 是"上海时区当天 00:00:00"映射到 UTC 的值;显示时强制按上海时区格式化
|
|
@@ -68,13 +76,7 @@ export declare const formatShanghaiDate: typeof formatDateToYYYYMMDD;
|
|
|
68
76
|
export declare const formatYMDShanghai: typeof formatDateToYYYYMMDD;
|
|
69
77
|
/**
|
|
70
78
|
* 查找每个月份第一个K线的索引
|
|
71
|
-
*
|
|
72
|
-
* @returns 月边界索引数组,例如 [0, 30, 60] 表示第0、30、60个K线分别是每月的第一个交易日
|
|
73
|
-
*
|
|
74
|
-
* @example
|
|
75
|
-
* // 假设数据:[1/2, 1/3, 2/1, 2/2, 3/1, 3/2]
|
|
76
|
-
* findMonthBoundaries(data) // [0, 2, 4]
|
|
77
|
-
* // 解释:第0个K线是1月第一个,第2个K线是2月第一个,第4个K线是3月第一个
|
|
79
|
+
* 结果按数据引用缓存,同一份数据多次调用直接返回缓存
|
|
78
80
|
*/
|
|
79
81
|
export declare function findMonthBoundaries(data: Array<{
|
|
80
82
|
timestamp: number;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@363045841yyt/klinechart",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.6",
|
|
4
4
|
"description": "A lightweight financial K-line charting library with first-class AI Agent support, crisp ResizeObserver-driven rendering, and plugin-based architecture. Focused on quantitative trading scenarios with TradingView-level interaction experience.",
|
|
5
5
|
"author": "363045841 <slslswbsy@qq.com>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -12,6 +12,16 @@
|
|
|
12
12
|
"homepage": "https://363045841.github.io/KLineChartQuant/",
|
|
13
13
|
"keywords": [
|
|
14
14
|
"kline-chart",
|
|
15
|
+
"plugin-architecture",
|
|
16
|
+
"webgl",
|
|
17
|
+
"high-performance",
|
|
18
|
+
"ai",
|
|
19
|
+
"crisp-rendering",
|
|
20
|
+
"sharp-rendering",
|
|
21
|
+
"agent",
|
|
22
|
+
"ai-chart",
|
|
23
|
+
"modern-ui",
|
|
24
|
+
"device-pixel-ratio",
|
|
15
25
|
"candlestick-chart",
|
|
16
26
|
"financial-chart",
|
|
17
27
|
"tradingview",
|
|
@@ -23,19 +33,11 @@
|
|
|
23
33
|
"chart-drawing",
|
|
24
34
|
"trend-line",
|
|
25
35
|
"fibonacci",
|
|
26
|
-
"high-performance",
|
|
27
36
|
"pixel-perfect",
|
|
28
|
-
"crisp-rendering",
|
|
29
|
-
"sharp-rendering",
|
|
30
|
-
"device-pixel-ratio",
|
|
31
37
|
"responsive",
|
|
32
|
-
"modern-ui",
|
|
33
|
-
"agent",
|
|
34
|
-
"ai-chart",
|
|
35
38
|
"visualization",
|
|
36
39
|
"quantitative-trading",
|
|
37
40
|
"technical-analysis",
|
|
38
|
-
"plugin-architecture",
|
|
39
41
|
"typescript"
|
|
40
42
|
],
|
|
41
43
|
"type": "module",
|