@363045841yyt/klinechart 0.1.0 → 0.1.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 (2) hide show
  1. package/README.md +217 -20
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -1,48 +1,245 @@
1
- # kmap
1
+ # kmap - 金融图表绘制库
2
2
 
3
- This template should help get you started developing with Vue 3 in Vite.
3
+ 这是一个基于 Vue 3 Canvas 的金融图表绘制库,专注于提供高性能的 K 线图展示功能。该库支持横向滚动、移动平均线(MA)显示以及从多种数据源(包括 AKTools)获取金融数据。
4
4
 
5
- ## Recommended IDE Setup
5
+ ## 功能特性
6
6
 
7
- [VS Code](https://code.visualstudio.com/) + [Vue (Official)](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur).
7
+ - 📊 **K 线图绘制**:使用 Canvas 实现高性能的 K 线图绘制
8
+ - 📈 **移动平均线**:支持 MA5、MA10、MA20 等多种移动平均线显示
9
+ - ↔️ **横向滚动**:支持大量历史数据的横向滚动浏览
10
+ - 🎨 **深色模式**:自动适配系统深色模式
11
+ - 📱 **响应式设计**:适配不同屏幕尺寸
12
+ - ⚡ **高性能**:使用 requestAnimationFrame 优化渲染性能
8
13
 
9
- ## Recommended Browser Setup
14
+ ## 技术栈
10
15
 
11
- - Chromium-based browsers (Chrome, Edge, Brave, etc.):
12
- - [Vue.js devtools](https://chromewebstore.google.com/detail/vuejs-devtools/nhdogjmejiglipccpnnnanhbledajbpd)
13
- - [Turn on Custom Object Formatter in Chrome DevTools](http://bit.ly/object-formatters)
14
- - Firefox:
15
- - [Vue.js devtools](https://addons.mozilla.org/en-US/firefox/addon/vue-js-devtools/)
16
- - [Turn on Custom Object Formatter in Firefox DevTools](https://fxdx.dev/firefox-devtools-custom-object-formatters/)
16
+ - [Vue 3](https://vuejs.org/) - 渐进式 JavaScript 框架
17
+ - [Vite](https://vite.dev/) - 下一代前端构建工具
18
+ - [TypeScript](https://www.typescriptlang.org/) - JavaScript 类型检查
19
+ - [Canvas API](https://developer.mozilla.org/zh-CN/docs/Web/API/Canvas_API) - 图形绘制
20
+ - [AKTools](https://github.com/akfamily/aktools) - 开源金融数据接口库
17
21
 
18
- ## Type Support for `.vue` Imports in TS
22
+ ## 项目结构
19
23
 
20
- TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) to make the TypeScript language service aware of `.vue` types.
24
+ ```
25
+ src/
26
+ ├── api/ # API 接口定义
27
+ │ └── data/
28
+ │ └── kLine.ts # K 线数据接口
29
+ ├── components/ # 组件
30
+ │ └── KLineChart.vue # K 线图主组件
31
+ ├── types/ # 类型定义
32
+ │ ├── kLine.ts # K 线类型定义
33
+ │ └── price.ts # 价格类型定义
34
+ ├── utils/ # 工具函数
35
+ │ ├── draw/ # 绘制工具
36
+ │ │ ├── kLine.ts # K 线绘制
37
+ │ │ └── MA.ts # 移动平均线绘制
38
+ │ ├── mock/ # 模拟数据生成
39
+ │ ├── logger.ts # 日志工具
40
+ │ └── priceToY.ts # 价格转 Y 坐标
41
+ ├── stores/ # 状态管理 (Pinia)
42
+ └── assets/ # 静态资源
43
+ ```
44
+
45
+ ## 数据接入
46
+
47
+ ### AKTools 数据接入
21
48
 
22
- ## Customize configuration
49
+ AKTools 是一个开源的金融数据接口库,可以免费获取股票、期货、期权等金融产品的历史数据。
23
50
 
24
- See [Vite Configuration Reference](https://vite.dev/config/).
51
+ #### 安装 AKTools
25
52
 
26
- ## Project Setup
53
+ 使用 uv pip 安装:
54
+
55
+ ```bash
56
+ # 安装 uv(如果尚未安装)
57
+ pip install uv
58
+
59
+ # 使用 uv 安装 AKTools
60
+ uv pip install aktools
61
+ ```
62
+
63
+ 或者直接使用 pip 安装:
64
+
65
+ ```bash
66
+ pip install aktools
67
+ ```
68
+
69
+ #### 启动 AKTools 数据服务
70
+
71
+ 方法一:使用 uv 直接运行 AKTools
72
+ ```bash
73
+ uv run python -m aktools
74
+ ```
75
+
76
+ 方法二:创建自定义后端服务
77
+ 除了使用 AKTools 自带的服务外,你也可以根据需要创建自定义的后端服务来处理数据。
78
+
79
+ #### 配置前端环境变量
80
+
81
+ 在项目根目录创建 `.env` 文件:
82
+
83
+ ```
84
+ VITE_API_BASE_URL=http://127.0.0.1:8080
85
+ VITE_API_PATH=/api/public/stock_zh_a_hist
86
+ ```
87
+
88
+ 然后在 [vite.config.ts](file:///d:/Code/kmap/kmap/vite.config.ts) 中确保环境变量被正确加载:
89
+
90
+ ```ts
91
+ import { defineConfig } from 'vite'
92
+ import vue from '@vitejs/plugin-vue'
93
+
94
+ export default defineConfig({
95
+ plugins: [vue()],
96
+ define: {
97
+ 'process.env': process.env
98
+ }
99
+ })
100
+ ```
101
+
102
+ ### 数据格式
103
+
104
+ K 线数据需要包含以下字段:
105
+
106
+ ```ts
107
+ interface KLineDailyDongCaiResponse {
108
+ 日期: string // 日期
109
+ 股票代码: string // 股票代码
110
+ 开盘: number // 开盘价
111
+ 收盘: number // 收盘价
112
+ 最高: number // 最高价
113
+ 最低: number // 最低价
114
+ 成交量: number // 成交量
115
+ 成交额: number // 成交额
116
+ 振幅: number // 振幅
117
+ 涨跌幅: number // 涨跌幅
118
+ 涨跌额: number // 涨跌额
119
+ 换手率: number // 换手率
120
+ }
121
+ ```
122
+
123
+ ## 使用方法
124
+
125
+ ### 1. 安装依赖
27
126
 
28
127
  ```sh
29
128
  pnpm install
30
129
  ```
31
130
 
32
- ### Compile and Hot-Reload for Development
131
+ ### 2. 启动开发服务器
33
132
 
34
133
  ```sh
35
134
  pnpm dev
36
135
  ```
37
136
 
38
- ### Type-Check, Compile and Minify for Production
137
+ ### 3. 在组件中使用 K 线图
138
+
139
+ ```vue
140
+ <template>
141
+ <KLineChart
142
+ :data="klineData"
143
+ :kWidth="10"
144
+ :kGap="2"
145
+ :yPaddingPx="60"
146
+ :showMA="{ ma5: true, ma10: true, ma20: true }"
147
+ :autoScrollToRight="true"
148
+ />
149
+ </template>
150
+
151
+ <script setup lang="ts">
152
+ import { ref, onMounted } from 'vue'
153
+ import KLineChart from '@/components/KLineChart.vue'
154
+ import { getKlineDataDongCai } from '@/api/data/kLine'
155
+ import { toKLineData, type KLineData } from '@/types/price'
156
+
157
+ const klineData = ref<KLineData[]>([])
158
+
159
+ onMounted(async () => {
160
+ const raw = await getKlineDataDongCai({
161
+ symbol: '601360', // 三六零股票代码
162
+ period: 'daily',
163
+ start_date: '20250501',
164
+ end_date: '20251230',
165
+ adjust: 'qfq', // 前复权
166
+ })
167
+ klineData.value = toKLineData(raw) // 转换并排序数据
168
+ })
169
+ </script>
170
+ ```
171
+
172
+ ### 组件属性
173
+
174
+ | 属性 | 类型 | 默认值 | 说明 |
175
+ |------|------|--------|------|
176
+ | data | KLineData[] | [] | K 线数据数组 |
177
+ | kWidth | number | 10 | K 线实体宽度 |
178
+ | kGap | number | 2 | K 线间距 |
179
+ | yPaddingPx | number | 60 | Y 轴上下留白像素 |
180
+ | showMA | MAFlags | { ma5: true, ma10: true, ma20: true } | 是否显示移动平均线 |
181
+ | autoScrollToRight | boolean | true | 数据更新后是否自动滚动到最右侧 |
182
+
183
+ ## 性能优化
184
+
185
+ - 使用 `requestAnimationFrame` 优化渲染性能
186
+ - 对于滚动等高频事件,使用 passive 模式提升响应性能
187
+ - Canvas 绘制时使用设备像素比(devicePixelRatio)确保在高分屏上清晰显示
188
+ - 通过路径重置(beginPath)避免路径污染
189
+
190
+ ## 环境要求
191
+
192
+ - Node.js: ^20.19.0 || >=22.12.0
193
+ - pnpm: 包管理器
194
+ - Python: 用于运行 AKTools 服务(可选)
195
+
196
+ ## 构建与部署
197
+
198
+ ### 生产环境构建
39
199
 
40
200
  ```sh
41
201
  pnpm build
42
202
  ```
43
203
 
44
- ### Run Unit Tests with [Vitest](https://vitest.dev/)
204
+ ### 预览生产包
45
205
 
46
206
  ```sh
47
- pnpm test:unit
207
+ pnpm preview
208
+ ```
209
+
210
+ ## API 接口说明
211
+
212
+ ### getKlineDataDongCai
213
+
214
+ 获取 K 线数据的异步函数。
215
+
216
+ **参数:**
217
+
218
+ ```ts
219
+ interface KLineDailyDongCaiRequest {
220
+ symbol: string // 股票代码
221
+ period: 'daily' | 'weekly' | 'monthly' // 周期
222
+ start_date: string // 开始日期,格式:YYYYMMDD
223
+ end_date: string // 结束日期,格式:YYYYMMDD
224
+ adjust?: 'qfq' | 'hfq' // 复权方式,qfq: 前复权, hfq: 后复权
225
+ timeout?: number // 超时时间(秒)
226
+ }
48
227
  ```
228
+
229
+ **返回值:**
230
+ `Promise<KLineDailyDongCaiResponse[]>` - K 线数据数组
231
+
232
+ ## 贡献
233
+
234
+ 欢迎提交 Issue 和 Pull Request 来改进这个项目。
235
+
236
+ ## 许可证
237
+
238
+ 本项目采用 MIT 许可证,详情请见 [LICENSE](./LICENSE) 文件。
239
+
240
+ ## 相关链接
241
+
242
+ - [Vue.js 官方文档](https://vuejs.org/guide/introduction.html)
243
+ - [Vite 官方文档](https://vite.dev/guide/)
244
+ - [AKTools 官方文档](https://github.com/akfamily/aktools)
245
+ - [Canvas API MDN 文档](https://developer.mozilla.org/zh-CN/docs/Web/API/Canvas_API)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@363045841yyt/klinechart",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "type": "module",
5
5
  "engines": {
6
6
  "node": "^20.19.0 || >=22.12.0"