@363045841yyt/klinechart 0.1.4 → 0.2.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 (69) hide show
  1. package/README.md +142 -243
  2. package/dist/components/IndicatorParams.vue.d.ts +28 -0
  3. package/dist/components/IndicatorSelector.vue.d.ts +10 -0
  4. package/dist/components/KLineChart.vue.d.ts +14 -17
  5. package/dist/components/MarkerTooltip.vue.d.ts +10 -0
  6. package/dist/core/chart.d.ts +84 -47
  7. package/dist/core/controller/interaction.d.ts +56 -18
  8. package/dist/core/layout/pane.d.ts +2 -0
  9. package/dist/core/marker/registry.d.ts +174 -0
  10. package/dist/core/paneRenderer.d.ts +7 -40
  11. package/dist/core/renderers/Indicator/boll.d.ts +28 -0
  12. package/dist/core/renderers/Indicator/bollLegend.d.ts +16 -0
  13. package/dist/core/renderers/Indicator/cci.d.ts +34 -0
  14. package/dist/core/renderers/Indicator/fastk.d.ts +34 -0
  15. package/dist/core/renderers/Indicator/index.d.ts +31 -0
  16. package/dist/core/renderers/Indicator/kst.d.ts +49 -0
  17. package/dist/core/renderers/Indicator/ma.d.ts +12 -0
  18. package/dist/core/renderers/Indicator/maLegend.d.ts +9 -0
  19. package/dist/core/renderers/Indicator/macd.d.ts +46 -0
  20. package/dist/core/renderers/Indicator/macdLegend.d.ts +10 -0
  21. package/dist/core/renderers/Indicator/mom.d.ts +34 -0
  22. package/dist/core/renderers/Indicator/rsi.d.ts +42 -0
  23. package/dist/core/renderers/Indicator/stoch.d.ts +43 -0
  24. package/dist/core/renderers/Indicator/wmsr.d.ts +34 -0
  25. package/dist/core/renderers/candle.d.ts +17 -4
  26. package/dist/core/renderers/crosshair.d.ts +13 -20
  27. package/dist/core/renderers/customMarkers.d.ts +6 -0
  28. package/dist/core/renderers/extremaMarkers.d.ts +3 -4
  29. package/dist/core/renderers/globalBorders.d.ts +8 -13
  30. package/dist/core/renderers/gridLines.d.ts +4 -3
  31. package/dist/core/renderers/lastPrice.d.ts +3 -3
  32. package/dist/core/renderers/paneTitle.d.ts +37 -10
  33. package/dist/core/renderers/subVolume.d.ts +7 -3
  34. package/dist/core/renderers/timeAxis.d.ts +9 -22
  35. package/dist/core/renderers/yAxis.d.ts +5 -12
  36. package/dist/core/scale/priceScale.d.ts +1 -0
  37. package/dist/core/theme/colors.d.ts +80 -0
  38. package/dist/core/utils/klineConfig.d.ts +28 -0
  39. package/dist/core/utils/tickCount.d.ts +7 -0
  40. package/dist/core/viewport/viewport.d.ts +5 -5
  41. package/dist/index.cjs +16 -1
  42. package/dist/index.d.ts +1 -0
  43. package/dist/index.js +10540 -1064
  44. package/dist/klinechart.css +1 -1
  45. package/dist/plugin/ConfigManager.d.ts +31 -0
  46. package/dist/plugin/EventBus.d.ts +34 -0
  47. package/dist/plugin/HookSystem.d.ts +28 -0
  48. package/dist/plugin/PluginHost.d.ts +47 -0
  49. package/dist/plugin/PluginRegistry.d.ts +40 -0
  50. package/dist/plugin/index.d.ts +11 -0
  51. package/dist/plugin/rendererPluginManager.d.ts +73 -0
  52. package/dist/plugin/types.d.ts +185 -0
  53. package/dist/semantic/controller.d.ts +29 -0
  54. package/dist/semantic/drawShape.d.ts +14 -0
  55. package/dist/semantic/index.d.ts +8 -0
  56. package/dist/semantic/schema.json.d.ts +259 -0
  57. package/dist/semantic/types.d.ts +185 -0
  58. package/dist/semantic/validator.d.ts +42 -0
  59. package/dist/types/volumePrice.d.ts +26 -0
  60. package/dist/utils/kLineDraw/MA.d.ts +5 -5
  61. package/dist/utils/logger.d.ts +1 -0
  62. package/dist/utils/volumePrice.d.ts +54 -0
  63. package/package.json +11 -10
  64. package/dist/core/renderers/crosshairLabels.d.ts +0 -36
  65. package/dist/core/renderers/grid.d.ts +0 -6
  66. package/dist/core/renderers/ma.d.ts +0 -15
  67. package/dist/core/renderers/maLegend.d.ts +0 -19
  68. package/dist/core/renderers/paneBorder.d.ts +0 -26
  69. package/dist/core/renderers/paneSeparator.d.ts +0 -18
package/README.md CHANGED
@@ -2,170 +2,97 @@
2
2
 
3
3
  [English](README_EN.md) | 简体中文
4
4
 
5
- 这是一个基于 Vue 3 Canvas 的金融图表绘制库,专注于提供高性能的 K 线图展示功能。该库支持横向滚动、移动平均线(MA)显示以及从多种数据源(包括 **BaoStock**、AKTools)获取金融数据。
5
+ 这是一个基于 Canvas 的金融图表绘制库,提供 Vue 组件封装。专注于高性能 K 线图渲染,支持**语义化 JSON 配置**,便于 AI Agent 直接控制图表渲染。特性包括横向滚动、多种技术指标(MA/BOLL/MACD/RSI 等)、自定义标记标注、多数据源支持(BaoStock、东方财富)。
6
+
7
+ ![pasted-image-1775748542822.webp](https://files.seeusercontent.com/2026/04/09/u0nK/pasted-image-1775748542822.webp)
6
8
 
7
- ![](https://s2.loli.net/2026/01/25/LObQPXmoN4ZdFey.png)
8
9
 
9
10
  ## 功能特性
10
11
 
11
- - 📊 **K 线图绘制**:使用 Canvas 实现高性能的 K 线图绘制
12
- - 🎯 **TradingView 级别稳定**:物理像素控制缩放,影线完美居中,无累积偏移
13
- - 📈 **移动平均线**:支持 MA5、MA10、MA20 等多种移动平均线显示
14
- - ↔️ **横向滚动**:支持大量历史数据的横向滚动浏览
15
- - 🎨 **深色模式**:自动适配系统深色模式
16
- - 📱 **响应式设计**:适配不同屏幕尺寸,支持所有设备像素比(DPR)
17
- - ⚡ **高性能**:使用 requestAnimationFrame 优化渲染性能
12
+ - **基于 Canvas**:使用 Canvas 实现高性能的 K 线图绘制
13
+ - **响应式设计**:适配不同屏幕尺寸,支持所有设备像素比(DPR),不同 DPR 下绘制清晰
14
+ - **影线处理**:统一 DPR 坐标计算,底层保证影线在不同 DPR 屏幕下绝对居中并绘制清晰
15
+ - **像素对齐**:统一坐标源,在物理坐标层面实现像素对齐,消除亚像素渲染,确保线条锐利清晰
16
+ - **框架无关**:核心逻辑完全独立,不依赖特定框架
17
+ - **插件化架构**:渲染器插件支持动态注册、配置和生命周期管理
18
+ - **量价关系标注**:自动识别并标注量价齐升、量价背离、量增价跌、量缩价跌四种形态
19
+
20
+ ### Agent 语义化控制
21
+
22
+ - **JSON 配置驱动**:通过 `semanticConfig` prop 接收 JSON 配置,AI Agent 可直接控制图表渲染
23
+ - **自定义标记**:支持 6 种预设形状(arrow_up、arrow_down、flag、circle、rectangle、diamond),标记大小随 K 线缩放自适应
24
+ - **完整指标支持**:主图 MA/BOLL,副图 MACD/RSI/CCI/STOCH 等
25
+ - **安全校验**:JSON Schema 校验、原型污染防护、颜色 XSS 防护、输入边界检查
26
+ - **日期友好格式**:使用 `YYYY-MM-DD` 自然日期格式,便于 Agent 输出
18
27
 
19
28
  ## 技术栈
20
29
 
21
30
  - [Vue 3](https://vuejs.org/) - 渐进式 JavaScript 框架
22
- - [Vite](https://vite.dev/) - 下一代前端构建工具
23
- - [TypeScript](https://www.typescriptlang.org/) - JavaScript 类型检查
24
- - [Canvas API](https://developer.mozilla.org/zh-CN/docs/Web/API/Canvas_API) - 图形绘制
25
- - [BaoStock](http://baostock.com/) - 开源金融数据接口(推荐)
26
- - [AKTools](https://github.com/akfamily/aktools) - 开源金融数据接口库(存在反爬限制)
31
+ - [Rolldown Vite](https://cn.vite.dev/guide/rolldown) - 下一代前端构建工具,极速构建
32
+ - [TypeScript](https://www.typescriptlang.org/)
33
+ - [Canvas API](https://developer.mozilla.org/zh-CN/docs/Web/API/Canvas_API)
27
34
  - [Vitest](https://vitest.dev/) - 单元测试框架
28
35
 
29
36
  ## 项目结构
30
37
 
31
38
  ```
32
39
  src/
33
- ├── api/ # API 接口定义
34
- │ └── data/
35
- ├── kLine.ts # 东财/AKTools K 线数据接口
36
- └── baostock.ts # BaoStock K 线数据接口(推荐)
37
- ├── components/ # 组件
38
- │ └── KLineChart.vue # K 线图主组件
39
- ├── core/ # 核心渲染引擎
40
- │ ├── chart.ts # 图表控制器
41
- │ ├── draw/ # 像素对齐工具
42
- │ │ └── pixelAlign.ts
43
- │ ├── renderers/ # 渲染器
44
- │ │ ├── candle.ts # K 线渲染器
45
- │ │ └── ...
46
- │ ├── scale/ # 缩放控制
47
- │ └── viewport/ # 视口管理
48
- ├── types/ # 类型定义
49
- │ ├── kLine.ts # K 线类型定义
50
- │ └── price.ts # 价格类型定义
51
- ├── utils/ # 工具函数
52
- │ ├── kLineDraw/ # K 线绘制工具
53
- │ ├── kline/ # K 线数据处理
54
- └── mock/ # 模拟数据生成
55
- ├── stores/ # 状态管理 (Pinia)
56
- └── assets/ # 静态资源
40
+ ├── api/ # API 接口定义
41
+ │ └── data/ # 数据源接口
42
+ ├── components/ # Vue 组件
43
+ ├── KLineChart.vue # K 线图主组件
44
+ ├── IndicatorSelector.vue # 指标选择器
45
+ │ └── IndicatorParams.vue # 指标参数编辑
46
+ ├── core/ # 核心渲染引擎
47
+ │ ├── chart.ts # 图表控制器
48
+ │ ├── renderers/ # 渲染器插件
49
+ │ │ ├── candle.ts # K 线渲染器
50
+ ├── ma.ts # MA 均线渲染器
51
+ │ │ ├── boll.ts # BOLL 布林带渲染器
52
+ │ │ ├── macd.ts # MACD 指标渲染器
53
+ ├── volume.ts # 成交量渲染器
54
+ └── ... # 其他渲染器
55
+ ├── theme/ # 主题配置
56
+ │ ├── marker/ # 标记点系统
57
+ │ └── utils/ # 核心工具
58
+ ├── semantic/ # 语义化配置模块(Agent 控制)
59
+ │ ├── types.ts # 类型定义
60
+ │ ├── schema.json # JSON Schema
61
+ ├── validator.ts # 校验器
62
+ ├── controller.ts # 控制器
63
+ └── drawShape.ts # 形状绘制
64
+ ├── plugin/ # 插件系统
65
+ │ ├── types.ts # 类型定义
66
+ │ ├── PluginHost.ts # 插件宿主
67
+ │ ├── EventBus.ts # 事件总线
68
+ │ ├── HookSystem.ts # 钩子系统
69
+ │ └── rendererPluginManager.ts # 渲染器管理
70
+ ├── types/ # 类型定义
71
+ └── utils/ # 工具函数
57
72
  ```
58
73
 
59
74
  ## 数据源
60
75
 
61
- 本项目支持多种数据源,通过统一接口实现无缝切换。
62
-
63
- | 数据源 | 稳定性 | 反爬限制 | 推荐场景 |
64
- |--------|--------|----------|----------|
65
- | [BaoStock](http://baostock.com/) | ⭐⭐⭐ 高 | 无 | 生产环境(推荐) |
66
- | [AKShare](https://github.com/akfamily/akshare) | ⭐⭐ 中 | 有 | 开发测试 |
67
-
68
- ### BaoStock(推荐)
69
-
70
- BaoStock 是免费开源的 Python 证券数据接口,提供稳定可靠的金融数据服务。
71
-
72
- - 官方文档:[http://www.baostock.com/mainContent?file=stockKData.md](http://www.baostock.com/mainContent?file=stockKData.md)
76
+ - [BaoStock](http://baostock.com/) - 开源金融数据接口,每日支持十万次 API 调用
77
+ - [AKTools](https://github.com/akfamily/aktools) - 开源金融数据接口库(可能存在反爬限制)
73
78
 
74
- #### 快速开始
79
+ ## 使用 NPM 安装组件库
75
80
 
76
81
  ```bash
77
- # 安装
78
- uv pip install baostock
79
-
80
- # 启动服务(需自行实现服务层或参考 BaoStock 文档)
81
- python your_baostock_server.py
82
+ npm i @363045841yyt/klinechart
82
83
  ```
83
84
 
84
- ### AKShare
85
-
86
- AKShare 基于 Python 的开源财经数据接口库,数据来源于东方财富等公开渠道。
87
-
88
- - GitHub:[https://github.com/akfamily/akshare](https://github.com/akfamily/akshare)
89
-
90
- > **⚠️ 注意:** 存在反爬机制,频繁请求可能导致 IP 被封禁
91
-
92
- #### 快速开始
85
+ ## 快速开始
93
86
 
94
87
  ```bash
95
- # 安装
96
- uv pip install aktools
97
-
98
- # 启动服务
99
- uv run python -m aktools
100
-
101
- # 或通过本项目脚本启动
102
- pnpm aktools
103
- ```
104
-
105
- ### 数据接入配置
106
-
107
- #### Vite 代理配置
108
-
109
- 本项目已配置双数据源代理:
110
-
111
- ```ts
112
- // vite.config.ts
113
- proxy: {
114
- '/api/stock': { // BaoStock (端口 8000)
115
- target: 'http://127.0.0.1:8000',
116
- changeOrigin: true,
117
- },
118
- '/api/public': { // AKTools (端口 8080)
119
- target: 'http://127.0.0.1:8080',
120
- changeOrigin: true,
121
- },
122
- }
123
- ```
124
-
125
- #### 统一接口使用
126
-
127
- ```vue
128
- <script setup lang="ts">
129
- import { fetchKLineData, type KLineDataSourceConfig } from '@/api/data'
130
-
131
- const DATA_SOURCE: 'baostock' | 'dongcai' = 'baostock'
132
-
133
- const config: KLineDataSourceConfig = {
134
- symbol: '601360', // 统一格式:纯代码
135
- startDate: '2024-01-01', // 统一格式:YYYY-MM-DD
136
- endDate: '2024-12-31',
137
- period: 'daily',
138
- adjust: 'qfq',
139
- }
140
-
141
- const data = await fetchKLineData(DATA_SOURCE, config)
142
- </script>
143
- ```
144
-
145
- #### 股票代码格式
146
-
147
- | 市场 | 格式 | 示例 |
148
- |------|------|------|
149
- | 沪市A股 | `sh.` | `sh.600000` |
150
- | 深市A股 | `sz.` | `sz.000001` |
151
-
152
- ## 使用方法
153
-
154
- ### 1. 安装依赖
155
-
156
- ```sh
88
+ # 安装依赖
157
89
  pnpm install
158
- ```
159
90
 
160
- ### 2. 启动开发服务器
161
-
162
- ```sh
91
+ # 启动开发服务器
163
92
  pnpm dev
164
93
  ```
165
94
 
166
- ### 3. 在组件中使用 K 线图
167
-
168
- #### 方式一:使用 BaoStock 数据源(推荐)
95
+ ## 使用示例
169
96
 
170
97
  ```vue
171
98
  <template>
@@ -182,156 +109,128 @@ pnpm dev
182
109
  <script setup lang="ts">
183
110
  import { ref, onMounted } from 'vue'
184
111
  import KLineChart from '@/components/KLineChart.vue'
185
- import { getKlineDataBaoStock } from '@/api/data/baostock'
186
112
  import type { KLineData } from '@/types/price'
187
- import { cache } from '@/utils/cache'
188
113
 
189
114
  const klineData = ref<KLineData[]>([])
190
115
 
191
116
  onMounted(async () => {
192
- const params = {
193
- symbol: 'sh.601360', // 三六零股票代码(带市场前缀)
194
- start_date: '2024-01-01', // YYYY-MM-DD 格式
195
- end_date: '2024-12-31',
196
- period: 'daily' as const,
197
- adjust: 'qfq' as const, // 前复权
198
- }
199
-
200
- // 缓存键
201
- const cacheKey = `kline:${params.symbol}:${params.start_date}:${params.end_date}`
202
-
203
- // 先尝试从缓存获取(1小时有效期)
204
- const cached = cache.get<KLineData[]>(cacheKey)
205
- if (cached) {
206
- klineData.value = cached
207
- return
208
- }
209
-
210
- // 从 API 获取
211
- const data = await getKlineDataBaoStock(params)
117
+ // 从数据源获取 K 线数据
118
+ const data = await fetchKLineData('baostock', {
119
+ symbol: 'sh.601360',
120
+ startDate: '2024-01-01',
121
+ endDate: '2024-12-31',
122
+ period: 'daily',
123
+ adjust: 'qfq',
124
+ })
212
125
  klineData.value = data
213
-
214
- // 存入缓存
215
- cache.set(cacheKey, data)
216
126
  })
217
127
  </script>
218
128
  ```
219
129
 
220
- #### 方式二:使用 AKTools 数据源
130
+ ### 语义化 JSON 控制(Agent 模式)
131
+
132
+ 通过 `semanticConfig` prop,AI Agent 可以用 JSON 配置完整控制图表渲染:
221
133
 
222
134
  ```vue
223
- <script setup lang="ts">
224
- import { getKlineDataDongCai } from '@/api/data/kLine'
225
- import { toKLineData } from '@/types/price'
135
+ <template>
136
+ <KLineChart :semanticConfig="config" />
137
+ </template>
226
138
 
227
- onMounted(async () => {
228
- const raw = await getKlineDataDongCai({
229
- symbol: '601360',
139
+ <script setup lang="ts">
140
+ import { ref } from 'vue'
141
+ import type { SemanticChartConfig } from '@363045841yyt/klinechart'
142
+
143
+ const config = ref<SemanticChartConfig>({
144
+ version: '1.0.0',
145
+ data: {
146
+ source: 'baostock',
147
+ symbol: '600519',
148
+ exchange: 'SH',
149
+ startDate: '2025-01-01',
150
+ endDate: '2025-04-18',
230
151
  period: 'daily',
231
- start_date: '20250501', // YYYYMMDD 格式
232
- end_date: '20251230',
233
152
  adjust: 'qfq',
234
- })
235
- klineData.value = toKLineData(raw)
153
+ },
154
+ indicators: {
155
+ main: [{ type: 'MA', enabled: true, params: { periods: [5, 10, 20] } }],
156
+ sub: [{ type: 'MACD', enabled: true }],
157
+ },
158
+ markers: {
159
+ customMarkers: [
160
+ {
161
+ id: 'buy_001',
162
+ date: '2025-02-15',
163
+ shape: 'arrow_up',
164
+ label: { text: '买入' },
165
+ style: { fillColor: '#52c41a' },
166
+ },
167
+ ],
168
+ },
236
169
  })
237
170
  </script>
238
171
  ```
239
172
 
240
- ### 组件属性
173
+ 详细配置说明请参阅 [语义化配置文档](./docs/semantic-config.md)。
241
174
 
242
- | 属性 | 类型 | 默认值 | 说明 |
243
- | ----------------- | ----------- | ------------------------------------- | ------------------------------ |
244
- | data | KLineData[] | [] | K 线数据数组 |
245
- | kWidth | number | 10 | K 线实体宽度 |
246
- | kGap | number | 2 | K 线间距 |
247
- | yPaddingPx | number | 60 | Y 轴上下留白像素 |
248
- | showMA | MAFlags | { ma5: true, ma10: true, ma20: true } | 是否显示移动平均线 |
249
- | autoScrollToRight | boolean | true | 数据更新后是否自动滚动到最右侧 |
175
+ ## 数据源配置
250
176
 
251
- ## 环境要求
252
-
253
- - Node.js: ^20.19.0 || >=22.12.0
254
- - pnpm: 包管理器
255
- - Python: 用于运行 AKTools 服务(可选)
256
- - uv: Python 包与运行器(用于 `pnpm aktools`,可选但推荐)
257
-
258
- ## 构建与部署
259
-
260
- ### 生产环境构建
261
-
262
- ```sh
263
- pnpm build
264
- ```
177
+ ### BaoStock(推荐)
265
178
 
266
- ### 预览生产包
179
+ 免费开源的 Python 证券数据接口,每日支持十万次 API 调用。
267
180
 
268
- ```sh
269
- pnpm preview
181
+ ```bash
182
+ uv pip install baostock
183
+ git clone https://github.com/363045841/stockbao.git
184
+ python server.py # 启动服务
270
185
  ```
271
186
 
272
- ## API 接口说明
273
-
274
- ### getKlineDataBaoStock
275
-
276
- 从 BaoStock 获取 K 线数据(推荐)。
187
+ ### AKTools
277
188
 
278
- **参数:**
189
+ 基于 Python 的开源财经数据接口,数据来源于东方财富等公开渠道。
279
190
 
280
- ```ts
281
- interface BaoStockKLineRequest {
282
- symbol: string // 股票代码,格式:sh.600000 sz.000001
283
- start_date: string // 开始日期,格式:YYYY-MM-DD
284
- end_date: string // 结束日期,格式:YYYY-MM-DD
285
- period?: 'daily' | 'weekly' | 'monthly' | '5' | '15' | '30' | '60'
286
- adjust?: 'qfq' | 'hfq' | 'none' // qfq: 前复权, hfq: 后复权, none: 不复权
287
- timeout?: number // 超时时间(秒)
288
- }
191
+ ```bash
192
+ uv pip install aktools
193
+ uv run python -m aktools # 启动服务
289
194
  ```
290
195
 
291
- **返回值:**
292
- `Promise<KLineData[]>` - 已转换为标准格式的 K 线数据数组
196
+ > ⚠️ 注意:AKTools 采取直连 API,频繁请求可能触发反爬机制
293
197
 
294
- **特性:**
295
- - ✅ 支持 1 小时本地缓存
296
- - ✅ 无反爬限制
297
- - ✅ 数据自动按时间排序
198
+ ### 组件属性
298
199
 
299
- ### getKlineDataDongCai
200
+ | 属性 | 类型 | 默认值 | 说明 |
201
+ |------|------|--------|------|
202
+ | data | KLineData[] | [] | K 线数据数组 |
203
+ | semanticConfig | SemanticChartConfig | - | 语义化配置(Agent 模式,唯一数据源) |
204
+ | kWidth | number | 10 | K 线实体宽度 |
205
+ | kGap | number | 2 | K 线间距 |
206
+ | yPaddingPx | number | 60 | Y 轴上下留白像素 |
207
+ | showMA | MAFlags | { ma5: true, ma10: true, ma20: true } | 移动平均线配置 |
208
+ | autoScrollToRight | boolean | true | 数据更新后自动滚动到最右侧 |
300
209
 
301
- AKTools/东方财富获取 K 线数据。
210
+ ## 环境要求
302
211
 
303
- > **⚠️ 注意:** 此接口依赖 AKShare,存在反爬机制,频繁请求可能导致 IP 被封禁。
212
+ - Node.js: ^20.19.0 || >=22.12.0
213
+ - pnpm: 包管理器
214
+ - Python: 用于运行数据源服务(可选)
215
+ - uv: Python 包管理器
304
216
 
305
- **参数:**
217
+ ## 构建与部署
306
218
 
307
- ```ts
308
- interface KLineDailyDongCaiRequest {
309
- symbol: string // 股票代码
310
- period: 'daily' | 'weekly' | 'monthly' // 周期
311
- start_date: string // 开始日期,格式:YYYYMMDD
312
- end_date: string // 结束日期,格式:YYYYMMDD
313
- adjust?: 'qfq' | 'hfq' // 复权方式,qfq: 前复权, hfq: 后复权
314
- timeout?: number // 超时时间(秒)
315
- }
219
+ ```bash
220
+ pnpm build # 生产环境构建
221
+ pnpm preview # 预览生产包
316
222
  ```
317
223
 
318
- **返回值:**
319
- `Promise<KLineDailyDongCaiResponse[]>` - K 线数据数组(需调用 `toKLineData()` 转换)
320
-
321
- ## 贡献
322
-
323
- 欢迎提交 Issue 和 Pull Request 来改进这个项目。
324
-
325
- ## 许可证
326
-
327
- 本项目采用 MIT 许可证,详情请见 [LICENSE](./LICENSE) 文件。
328
-
329
224
  ## 相关链接
330
225
 
331
226
  - [Vue.js 官方文档](https://vuejs.org/guide/introduction.html)
332
227
  - [Vite 官方文档](https://vite.dev/guide/)
333
228
  - [BaoStock 官方文档](http://baostock.com/)
334
229
  - [AKTools 官方文档](https://github.com/akfamily/aktools)
335
- - [AKShare 官方文档](https://akshare.akfamily.xyz/)
336
230
  - [Canvas API MDN 文档](https://developer.mozilla.org/zh-CN/docs/Web/API/Canvas_API)
337
- - [Vitest 官方文档](https://vitest.dev/)
231
+ - [Vitest 官方文档](https://vitest.dev/)
232
+ - [语义化配置文档](./docs/semantic-config.md) - Agent JSON 配置说明
233
+
234
+ ## 许可证
235
+
236
+ 本项目采用 MIT 许可证,详情请见 [LICENSE](./LICENSE) 文件。
@@ -0,0 +1,28 @@
1
+ export interface ParamConfig {
2
+ key: string;
3
+ label: string;
4
+ type: 'number';
5
+ min?: number;
6
+ max?: number;
7
+ step?: number;
8
+ default?: number;
9
+ /** 参数描述 */
10
+ description?: string;
11
+ }
12
+ type __VLS_Props = {
13
+ visible: boolean;
14
+ indicatorId: string;
15
+ indicatorName: string;
16
+ /** 指标描述 */
17
+ indicatorDescription?: string;
18
+ params: ParamConfig[];
19
+ values: Record<string, number>;
20
+ };
21
+ declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
22
+ close: () => any;
23
+ confirm: (values: Record<string, number>) => any;
24
+ }, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
25
+ onClose?: (() => any) | undefined;
26
+ onConfirm?: ((values: Record<string, number>) => any) | undefined;
27
+ }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
28
+ export default _default;
@@ -1,17 +1,27 @@
1
+ import { ParamConfig } from './IndicatorParams.vue';
1
2
  export interface Indicator {
2
3
  id: string;
3
4
  label: string;
4
5
  name: string;
6
+ pane: 'main' | 'sub';
7
+ /** 指标描述 */
8
+ description?: string;
9
+ params?: ParamConfig[];
5
10
  }
6
11
  type __VLS_Props = {
7
12
  /** 当前选中的指标列表 */
8
13
  activeIndicators?: string[];
14
+ /** 指标参数配置 */
15
+ indicatorParams?: Record<string, Record<string, number>>;
9
16
  };
10
17
  declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
11
18
  toggle: (indicatorId: string, active: boolean) => any;
19
+ updateParams: (indicatorId: string, params: Record<string, number>) => any;
12
20
  }, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
13
21
  onToggle?: ((indicatorId: string, active: boolean) => any) | undefined;
22
+ onUpdateParams?: ((indicatorId: string, params: Record<string, number>) => any) | undefined;
14
23
  }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
15
24
  scrollContainerRef: HTMLDivElement;
25
+ itemRefs: HTMLDivElement[];
16
26
  }, HTMLDivElement>;
17
27
  export default _default;
@@ -1,18 +1,11 @@
1
- import { KLineData } from '../types/price';
2
- type MAFlags = {
3
- ma5?: boolean;
4
- ma10?: boolean;
5
- ma20?: boolean;
6
- ma30?: boolean;
7
- ma60?: boolean;
8
- };
1
+ import { SemanticChartConfig } from '../semantic';
2
+ import { SubIndicatorType } from '../core/renderers/Indicator';
9
3
  type __VLS_Props = {
10
- data: KLineData[];
4
+ /** 语义化配置(必需,唯一控制源) */
5
+ semanticConfig: SemanticChartConfig;
11
6
  kWidth?: number;
12
7
  kGap?: number;
13
8
  yPaddingPx?: number;
14
- showMA?: MAFlags;
15
- autoScrollToRight?: boolean;
16
9
  minKWidth?: number;
17
10
  maxKWidth?: number;
18
11
  /** 右侧价格轴宽度 */
@@ -21,26 +14,30 @@ type __VLS_Props = {
21
14
  bottomAxisHeight?: number;
22
15
  /** 价格标签额外宽度(用于显示涨跌幅,默认 60px) */
23
16
  priceLabelWidth?: number;
24
- /** Pane 高度比例(主/副),默认 [0.85, 0.15] */
25
- paneRatios?: [number, number];
26
17
  };
27
18
  declare function scheduleRender(): void;
19
+ declare function addSubPane(indicatorId?: SubIndicatorType, params?: Record<string, number>): boolean;
20
+ declare function removeSubPane(paneId: string): void;
21
+ declare function clearAllSubPanes(): void;
22
+ declare function switchSubIndicator(paneId: string, newIndicatorId: SubIndicatorType): void;
28
23
  declare function scrollToRight(): void;
29
24
  declare const _default: import('vue').DefineComponent<__VLS_Props, {
30
25
  scheduleRender: typeof scheduleRender;
31
26
  scrollToRight: typeof scrollToRight;
27
+ addSubPane: typeof addSubPane;
28
+ removeSubPane: typeof removeSubPane;
29
+ switchSubIndicator: typeof switchSubIndicator;
30
+ clearAllSubPanes: typeof clearAllSubPanes;
31
+ plugin: import('..').PluginHostImpl | undefined;
32
32
  }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
33
- yPaddingPx: number;
34
33
  kWidth: number;
35
34
  kGap: number;
36
- showMA: MAFlags;
35
+ yPaddingPx: number;
37
36
  rightAxisWidth: number;
38
37
  bottomAxisHeight: number;
39
38
  minKWidth: number;
40
39
  maxKWidth: number;
41
40
  priceLabelWidth: number;
42
- autoScrollToRight: boolean;
43
- paneRatios: [number, number];
44
41
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
45
42
  containerRef: HTMLDivElement;
46
43
  canvasLayerRef: HTMLDivElement;
@@ -0,0 +1,10 @@
1
+ import { MarkerEntity, CustomMarkerEntity } from '../core/marker/registry';
2
+ type __VLS_Props = {
3
+ marker: MarkerEntity | CustomMarkerEntity | null;
4
+ pos: {
5
+ x: number;
6
+ y: number;
7
+ };
8
+ };
9
+ declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
10
+ export default _default;