@363045841yyt/klinechart 0.1.5 → 0.2.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.
- package/README.md +140 -187
- package/dist/components/IndicatorParams.vue.d.ts +28 -0
- package/dist/components/IndicatorSelector.vue.d.ts +10 -0
- package/dist/components/KLineChart.vue.d.ts +14 -17
- package/dist/components/MarkerTooltip.vue.d.ts +10 -0
- package/dist/core/chart.d.ts +84 -47
- package/dist/core/controller/interaction.d.ts +56 -18
- package/dist/core/layout/pane.d.ts +2 -0
- package/dist/core/marker/registry.d.ts +174 -0
- package/dist/core/paneRenderer.d.ts +7 -40
- package/dist/core/renderers/Indicator/boll.d.ts +28 -0
- package/dist/core/renderers/Indicator/bollLegend.d.ts +16 -0
- package/dist/core/renderers/Indicator/cci.d.ts +34 -0
- package/dist/core/renderers/Indicator/fastk.d.ts +34 -0
- package/dist/core/renderers/Indicator/index.d.ts +31 -0
- package/dist/core/renderers/Indicator/kst.d.ts +49 -0
- package/dist/core/renderers/Indicator/ma.d.ts +12 -0
- package/dist/core/renderers/Indicator/maLegend.d.ts +9 -0
- package/dist/core/renderers/Indicator/macd.d.ts +46 -0
- package/dist/core/renderers/Indicator/macdLegend.d.ts +10 -0
- package/dist/core/renderers/Indicator/mom.d.ts +34 -0
- package/dist/core/renderers/Indicator/rsi.d.ts +42 -0
- package/dist/core/renderers/Indicator/stoch.d.ts +43 -0
- package/dist/core/renderers/Indicator/wmsr.d.ts +34 -0
- package/dist/core/renderers/candle.d.ts +17 -4
- package/dist/core/renderers/crosshair.d.ts +13 -20
- package/dist/core/renderers/customMarkers.d.ts +6 -0
- package/dist/core/renderers/extremaMarkers.d.ts +3 -4
- package/dist/core/renderers/globalBorders.d.ts +8 -13
- package/dist/core/renderers/gridLines.d.ts +4 -3
- package/dist/core/renderers/lastPrice.d.ts +3 -3
- package/dist/core/renderers/paneTitle.d.ts +37 -10
- package/dist/core/renderers/subVolume.d.ts +7 -3
- package/dist/core/renderers/timeAxis.d.ts +9 -22
- package/dist/core/renderers/yAxis.d.ts +5 -12
- package/dist/core/scale/priceScale.d.ts +1 -0
- package/dist/core/theme/colors.d.ts +80 -0
- package/dist/core/utils/klineConfig.d.ts +28 -0
- package/dist/core/utils/tickCount.d.ts +7 -0
- package/dist/core/viewport/viewport.d.ts +5 -5
- package/dist/index.cjs +16 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +10540 -1064
- package/dist/klinechart.css +1 -1
- package/dist/plugin/ConfigManager.d.ts +31 -0
- package/dist/plugin/EventBus.d.ts +34 -0
- package/dist/plugin/HookSystem.d.ts +28 -0
- package/dist/plugin/PluginHost.d.ts +47 -0
- package/dist/plugin/PluginRegistry.d.ts +40 -0
- package/dist/plugin/index.d.ts +11 -0
- package/dist/plugin/rendererPluginManager.d.ts +73 -0
- package/dist/plugin/types.d.ts +185 -0
- package/dist/semantic/controller.d.ts +29 -0
- package/dist/semantic/drawShape.d.ts +14 -0
- package/dist/semantic/index.d.ts +8 -0
- package/dist/semantic/schema.json.d.ts +259 -0
- package/dist/semantic/types.d.ts +185 -0
- package/dist/semantic/validator.d.ts +42 -0
- package/dist/types/volumePrice.d.ts +26 -0
- package/dist/utils/kLineDraw/MA.d.ts +5 -5
- package/dist/utils/logger.d.ts +1 -0
- package/dist/utils/volumePrice.d.ts +54 -0
- package/package.json +12 -11
- package/dist/core/renderers/crosshairLabels.d.ts +0 -36
- package/dist/core/renderers/grid.d.ts +0 -6
- package/dist/core/renderers/ma.d.ts +0 -15
- package/dist/core/renderers/maLegend.d.ts +0 -19
- package/dist/core/renderers/paneBorder.d.ts +0 -26
- package/dist/core/renderers/paneSeparator.d.ts +0 -18
package/README.md
CHANGED
|
@@ -2,16 +2,28 @@
|
|
|
2
2
|
|
|
3
3
|
[English](README_EN.md) | 简体中文
|
|
4
4
|
|
|
5
|
-
这是一个基于 Vue
|
|
5
|
+
这是一个基于 Canvas 的金融图表绘制库,提供 Vue 组件封装。专注于高性能 K 线图渲染,支持**语义化 JSON 配置**,便于 AI Agent 直接控制图表渲染。特性包括横向滚动、多种技术指标(MA/BOLL/MACD/RSI 等)、自定义标记标注、多数据源支持(BaoStock、东方财富)。
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+

|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
## 功能特性
|
|
11
11
|
|
|
12
12
|
- **基于 Canvas**:使用 Canvas 实现高性能的 K 线图绘制
|
|
13
13
|
- **响应式设计**:适配不同屏幕尺寸,支持所有设备像素比(DPR),不同 DPR 下绘制清晰
|
|
14
|
+
- **影线处理**:统一 DPR 坐标计算,底层保证影线在不同 DPR 屏幕下绝对居中并绘制清晰
|
|
15
|
+
- **像素对齐**:统一坐标源,在物理坐标层面实现像素对齐,消除亚像素渲染,确保线条锐利清晰
|
|
14
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 输出
|
|
15
27
|
|
|
16
28
|
## 技术栈
|
|
17
29
|
|
|
@@ -21,146 +33,66 @@
|
|
|
21
33
|
- [Canvas API](https://developer.mozilla.org/zh-CN/docs/Web/API/Canvas_API)
|
|
22
34
|
- [Vitest](https://vitest.dev/) - 单元测试框架
|
|
23
35
|
|
|
24
|
-
## 数据源
|
|
25
|
-
- [BaoStock](http://baostock.com/) - 开源金融数据接口,每日支持十万次 API 调用
|
|
26
|
-
- [AKTools](https://github.com/akfamily/aktools) - 开源金融数据接口库(可能存在反爬限制)
|
|
27
|
-
|
|
28
|
-
## 使用 NPM 安装组件库
|
|
29
|
-
```bash
|
|
30
|
-
npm i @363045841yyt/klinechart
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
|
|
34
36
|
## 项目结构
|
|
35
37
|
|
|
36
38
|
```
|
|
37
39
|
src/
|
|
38
|
-
├── api/
|
|
39
|
-
│ └── data/
|
|
40
|
-
|
|
41
|
-
│
|
|
42
|
-
├──
|
|
43
|
-
│ └──
|
|
44
|
-
├── core/
|
|
45
|
-
│ ├── chart.ts
|
|
46
|
-
│ ├──
|
|
47
|
-
│ │
|
|
48
|
-
│ ├──
|
|
49
|
-
│ │ ├──
|
|
50
|
-
│ │
|
|
51
|
-
│ ├──
|
|
52
|
-
│ └──
|
|
53
|
-
├──
|
|
54
|
-
│ ├──
|
|
55
|
-
│ └──
|
|
56
|
-
├──
|
|
57
|
-
│ ├──
|
|
58
|
-
│ ├──
|
|
59
|
-
│
|
|
60
|
-
├──
|
|
61
|
-
└──
|
|
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/ # 工具函数
|
|
62
72
|
```
|
|
63
73
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
BaoStock 是免费开源的 Python 证券数据接口,提供稳定可靠的金融数据服务。
|
|
67
|
-
|
|
68
|
-
- 官方文档:[http://www.baostock.com/mainContent?file=stockKData.md](http://www.baostock.com/mainContent?file=stockKData.md)
|
|
74
|
+
## 数据源
|
|
69
75
|
|
|
70
|
-
|
|
76
|
+
- [BaoStock](http://baostock.com/) - 开源金融数据接口,每日支持十万次 API 调用
|
|
77
|
+
- [AKTools](https://github.com/akfamily/aktools) - 开源金融数据接口库(可能存在反爬限制)
|
|
71
78
|
|
|
72
|
-
|
|
73
|
-
# 安装
|
|
74
|
-
uv pip install baostock
|
|
75
|
-
```
|
|
79
|
+
## 使用 NPM 安装组件库
|
|
76
80
|
|
|
77
|
-
由于 BaoStock 未提供 AkTools 的后端接口,需要自行搭建 FastAPI 服务:
|
|
78
81
|
```bash
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
# 启动服务
|
|
82
|
-
python server.py
|
|
82
|
+
npm i @363045841yyt/klinechart
|
|
83
83
|
```
|
|
84
84
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
AKShare 基于 Python 的开源财经数据接口库,数据来源于东方财富等公开渠道。
|
|
88
|
-
|
|
89
|
-
- GitHub:[https://github.com/akfamily/akshare](https://github.com/akfamily/akshare)
|
|
90
|
-
|
|
91
|
-
> **⚠️ 注意:** 该库采取直连API,容易触发反爬机制,频繁请求可能导致 IP 被封禁
|
|
92
|
-
|
|
93
|
-
#### 快速开始
|
|
85
|
+
## 快速开始
|
|
94
86
|
|
|
95
87
|
```bash
|
|
96
|
-
#
|
|
97
|
-
uv pip install aktools
|
|
98
|
-
|
|
99
|
-
# 启动服务
|
|
100
|
-
uv run python -m aktools
|
|
101
|
-
|
|
102
|
-
# 或通过本项目脚本启动
|
|
103
|
-
pnpm aktools
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
### 后端数据源配置
|
|
107
|
-
|
|
108
|
-
#### Vite 代理配置
|
|
109
|
-
|
|
110
|
-
本项目已配置双数据源代理:
|
|
111
|
-
|
|
112
|
-
```ts
|
|
113
|
-
// vite.config.ts
|
|
114
|
-
proxy: {
|
|
115
|
-
'/api/stock': { // BaoStock (端口 8000)
|
|
116
|
-
target: 'http://127.0.0.1:8000',
|
|
117
|
-
changeOrigin: true,
|
|
118
|
-
},
|
|
119
|
-
'/api/public': { // AKTools (端口 8080)
|
|
120
|
-
target: 'http://127.0.0.1:8080',
|
|
121
|
-
changeOrigin: true,
|
|
122
|
-
},
|
|
123
|
-
}
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
#### 统一接口使用
|
|
127
|
-
|
|
128
|
-
```vue
|
|
129
|
-
<script setup lang="ts">
|
|
130
|
-
import { fetchKLineData, type KLineDataSourceConfig } from '@/api/data'
|
|
131
|
-
|
|
132
|
-
const DATA_SOURCE: 'baostock' | 'dongcai' = 'baostock'
|
|
133
|
-
|
|
134
|
-
// AKshare要求日期为YYYYMMDD格式, BaoStock要求日期为YYYY-MM-DD格式
|
|
135
|
-
const config: KLineDataSourceConfig = {
|
|
136
|
-
symbol: '601360',
|
|
137
|
-
startDate: '2024-01-01',
|
|
138
|
-
endDate: '2024-12-31',
|
|
139
|
-
period: 'daily',
|
|
140
|
-
adjust: 'qfq',
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
const data = await fetchKLineData(DATA_SOURCE, config)
|
|
144
|
-
</script>
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
## 使用方法
|
|
148
|
-
|
|
149
|
-
### 1. 安装依赖
|
|
150
|
-
|
|
151
|
-
```sh
|
|
88
|
+
# 安装依赖
|
|
152
89
|
pnpm install
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
### 2. 启动开发服务器
|
|
156
90
|
|
|
157
|
-
|
|
91
|
+
# 启动开发服务器
|
|
158
92
|
pnpm dev
|
|
159
93
|
```
|
|
160
94
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
#### 方式一:使用 BaoStock 数据源(推荐)
|
|
95
|
+
## 使用示例
|
|
164
96
|
|
|
165
97
|
```vue
|
|
166
98
|
<template>
|
|
@@ -177,100 +109,117 @@ pnpm dev
|
|
|
177
109
|
<script setup lang="ts">
|
|
178
110
|
import { ref, onMounted } from 'vue'
|
|
179
111
|
import KLineChart from '@/components/KLineChart.vue'
|
|
180
|
-
import { getKlineDataBaoStock } from '@/api/data/baostock'
|
|
181
112
|
import type { KLineData } from '@/types/price'
|
|
182
|
-
import { cache } from '@/utils/cache'
|
|
183
113
|
|
|
184
114
|
const klineData = ref<KLineData[]>([])
|
|
185
115
|
|
|
186
116
|
onMounted(async () => {
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
// 缓存键
|
|
196
|
-
const cacheKey = `kline:${params.symbol}:${params.start_date}:${params.end_date}`
|
|
197
|
-
|
|
198
|
-
// 先尝试从缓存获取(1小时有效期)
|
|
199
|
-
const cached = cache.get<KLineData[]>(cacheKey)
|
|
200
|
-
if (cached) {
|
|
201
|
-
klineData.value = cached
|
|
202
|
-
return
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
// 从 API 获取
|
|
206
|
-
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
|
+
})
|
|
207
125
|
klineData.value = data
|
|
208
|
-
|
|
209
|
-
// 存入缓存
|
|
210
|
-
cache.set(cacheKey, data)
|
|
211
126
|
})
|
|
212
127
|
</script>
|
|
213
128
|
```
|
|
214
129
|
|
|
215
|
-
|
|
130
|
+
### 语义化 JSON 控制(Agent 模式)
|
|
131
|
+
|
|
132
|
+
通过 `semanticConfig` prop,AI Agent 可以用 JSON 配置完整控制图表渲染:
|
|
216
133
|
|
|
217
134
|
```vue
|
|
218
|
-
<
|
|
219
|
-
|
|
220
|
-
|
|
135
|
+
<template>
|
|
136
|
+
<KLineChart :semanticConfig="config" />
|
|
137
|
+
</template>
|
|
221
138
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
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',
|
|
225
151
|
period: 'daily',
|
|
226
|
-
start_date: '20250501', // YYYYMMDD 格式
|
|
227
|
-
end_date: '20251230',
|
|
228
152
|
adjust: 'qfq',
|
|
229
|
-
}
|
|
230
|
-
|
|
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
|
+
},
|
|
231
169
|
})
|
|
232
170
|
</script>
|
|
233
171
|
```
|
|
234
172
|
|
|
235
|
-
|
|
173
|
+
详细配置说明请参阅 [语义化配置文档](./docs/semantic-config.md)。
|
|
236
174
|
|
|
237
|
-
|
|
238
|
-
| ----------------- | ----------- | ------------------------------------- | ------------------------------ |
|
|
239
|
-
| data | KLineData[] | [] | K 线数据数组 |
|
|
240
|
-
| kWidth | number | 10 | K 线实体宽度 |
|
|
241
|
-
| kGap | number | 2 | K 线间距 |
|
|
242
|
-
| yPaddingPx | number | 60 | Y 轴上下留白像素 |
|
|
243
|
-
| showMA | MAFlags | { ma5: true, ma10: true, ma20: true } | 是否显示移动平均线 |
|
|
244
|
-
| autoScrollToRight | boolean | true | 数据更新后是否自动滚动到最右侧 |
|
|
175
|
+
## 数据源配置
|
|
245
176
|
|
|
246
|
-
|
|
177
|
+
### BaoStock(推荐)
|
|
247
178
|
|
|
248
|
-
|
|
249
|
-
- pnpm: 包管理器
|
|
250
|
-
- Python: 用于运行 AKTools 服务(可选)
|
|
251
|
-
- uv: Python 包管理器
|
|
179
|
+
免费开源的 Python 证券数据接口,每日支持十万次 API 调用。
|
|
252
180
|
|
|
253
|
-
|
|
181
|
+
```bash
|
|
182
|
+
uv pip install baostock
|
|
183
|
+
git clone https://github.com/363045841/stockbao.git
|
|
184
|
+
python server.py # 启动服务
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### AKTools
|
|
254
188
|
|
|
255
|
-
|
|
189
|
+
基于 Python 的开源财经数据接口,数据来源于东方财富等公开渠道。
|
|
256
190
|
|
|
257
|
-
```
|
|
258
|
-
|
|
191
|
+
```bash
|
|
192
|
+
uv pip install aktools
|
|
193
|
+
uv run python -m aktools # 启动服务
|
|
259
194
|
```
|
|
260
195
|
|
|
261
|
-
|
|
196
|
+
> ⚠️ 注意:AKTools 采取直连 API,频繁请求可能触发反爬机制
|
|
262
197
|
|
|
263
|
-
|
|
264
|
-
pnpm preview
|
|
265
|
-
```
|
|
198
|
+
### 组件属性
|
|
266
199
|
|
|
267
|
-
|
|
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 | 数据更新后自动滚动到最右侧 |
|
|
268
209
|
|
|
269
|
-
|
|
210
|
+
## 环境要求
|
|
270
211
|
|
|
271
|
-
|
|
212
|
+
- Node.js: ^20.19.0 || >=22.12.0
|
|
213
|
+
- pnpm: 包管理器
|
|
214
|
+
- Python: 用于运行数据源服务(可选)
|
|
215
|
+
- uv: Python 包管理器
|
|
272
216
|
|
|
273
|
-
|
|
217
|
+
## 构建与部署
|
|
218
|
+
|
|
219
|
+
```bash
|
|
220
|
+
pnpm build # 生产环境构建
|
|
221
|
+
pnpm preview # 预览生产包
|
|
222
|
+
```
|
|
274
223
|
|
|
275
224
|
## 相关链接
|
|
276
225
|
|
|
@@ -278,6 +227,10 @@ pnpm preview
|
|
|
278
227
|
- [Vite 官方文档](https://vite.dev/guide/)
|
|
279
228
|
- [BaoStock 官方文档](http://baostock.com/)
|
|
280
229
|
- [AKTools 官方文档](https://github.com/akfamily/aktools)
|
|
281
|
-
- [AKShare 官方文档](https://akshare.akfamily.xyz/)
|
|
282
230
|
- [Canvas API MDN 文档](https://developer.mozilla.org/zh-CN/docs/Web/API/Canvas_API)
|
|
283
|
-
- [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 {
|
|
2
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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;
|