/** * KLineChart 图表常量配置 * * 包含图表默认配置、技术指标列表、事件标记配置等 */ import type { ChartConfig, ChartType } from '../types'; /** * 图表默认高度(px) */ export const CHART_HEIGHTS = { /** 主图高度 */ main: 400, /** 副图高度(技术指标) */ sub: 150, /** 移动端主图高度 */ mainMobile: 300, /** 移动端副图高度 */ subMobile: 100, } as const; /** * 技术指标配置 */ export const INDICATORS = { /** 主图指标(叠加在 K 线图上) */ main: [ { name: 'MA', label: '均线', params: [5, 10, 20, 30], colors: ['#FF6B6B', '#4ECDC4', '#45B7D1', '#FFA07A'], }, { name: 'EMA', label: '指数移动平均', params: [5, 10, 20, 30], colors: ['#FF6B6B', '#4ECDC4', '#45B7D1', '#FFA07A'], }, { name: 'BOLL', label: '布林带', params: [20, 2], colors: ['#FF6B6B', '#4ECDC4', '#45B7D1'], }, ], /** 副图指标(单独窗口显示) */ sub: [ { name: 'VOL', label: '成交量', params: [5, 10, 20], colors: ['#ef5350', '#26a69a'], }, { name: 'MACD', label: 'MACD', params: [12, 26, 9], colors: ['#FF6B6B', '#4ECDC4', '#45B7D1'], }, { name: 'KDJ', label: 'KDJ', params: [9, 3, 3], colors: ['#FF6B6B', '#4ECDC4', '#45B7D1'], }, { name: 'RSI', label: 'RSI', params: [6, 12, 24], colors: ['#FF6B6B', '#4ECDC4', '#45B7D1'], }, ], } as const; /** * 默认主图指标(初始显示) */ export const DEFAULT_MAIN_INDICATOR = 'MA'; /** * 默认副图指标(初始显示) */ export const DEFAULT_SUB_INDICATORS = ['VOL', 'MACD']; /** * 图表类型配置 */ export const CHART_TYPE_CONFIG: Record = { timeline: { label: '分时图', dateFormat: 'HH:mm', // 时间格式:09:30 }, daily: { label: '日K线', dateFormat: 'YYYY-MM-DD', // 日期格式:2024-01-01 }, } as const; /** * 事件标记配置 */ export const EVENT_MARKER_CONFIG = { /** 默认颜色 */ defaultColor: '#ff9800', /** 默认位置 */ defaultPosition: 'top' as const, /** 默认图标 */ defaultIcon: '📌', /** 标记大小 */ size: { point: 8, // 标记点半径 icon: 20, // 图标大小 }, /** 文本配置 */ text: { fontSize: 12, fontFamily: 'Helvetica, Arial, sans-serif', color: '#ffffff', padding: 4, borderRadius: 4, }, } as const; /** * 数据加载配置 */ export const DATA_LOADER_CONFIG = { /** 最大数据点数(避免性能问题) */ maxDataPoints: 1000, /** 初始加载数据点数 */ initialLoadCount: 100, /** 加载更多时的数据点数 */ loadMoreCount: 50, } as const; /** * 缩放配置 */ export const ZOOM_CONFIG = { /** 最小缩放比例(显示更多 K 线) */ minZoom: 0.5, /** 最大缩放比例(显示更少 K 线) */ maxZoom: 2.0, /** 默认缩放比例 */ defaultZoom: 1.0, /** 缩放步长 */ zoomStep: 0.1, } as const; /** * 默认图表配置 */ export const DEFAULT_CHART_CONFIG: ChartConfig = { type: 'daily', showIndicators: true, defaultIndicators: DEFAULT_SUB_INDICATORS, height: CHART_HEIGHTS.main, showGrid: true, showCrosshair: true, } as const; /** * 图表初始化选项(传递给 KLineChart.init) */ export const CHART_INIT_OPTIONS = { /** 时区(中国标准时间) */ timezone: 'Asia/Shanghai', /** 语言 */ locale: 'zh-CN', /** 自定义配置 */ customApi: { formatDate: (timestamp: number, format: string) => { // 可在此处自定义日期格式化逻辑 return new Date(timestamp).toLocaleString('zh-CN'); }, }, } as const; /** * 分时图特殊配置 */ export const TIMELINE_CONFIG = { /** 交易时段(A 股) */ tradingSessions: [ { start: '09:30', end: '11:30' }, // 上午 { start: '13:00', end: '15:00' }, // 下午 ], /** 是否显示均价线 */ showAverageLine: true, /** 均价线颜色 */ averageLineColor: '#FFB74D', } as const; /** * 日K线特殊配置 */ export const DAILY_KLINE_CONFIG = { /** 最大显示天数 */ maxDays: 250, // 约一年交易日 /** 默认显示天数 */ defaultDays: 60, } as const;