# tradehk 系统架构总览 > 返回:[tradehk 文档中心](./README.md) ## 技术栈 | 层次 | 技术 | 说明 | |------|------|------| | 前端框架 | React + TypeScript + Vite | 单页应用,实时更新 | | UI 组件 | TailwindCSS + shadcn/ui | 深色专业交易终端风格 | | 图表库 | lightweight-charts | TradingView 同款 K 线图库 | | 后端框架 | Node.js + tRPC | 类型安全的 API 层 | | 数据库 | MySQL(Drizzle ORM) | 信号持久化、用户配置 | | 实时数据 | Binance WebSocket + REST API | K 线、行情、账户数据 | | 通知推送 | 飞书 Webhook(Lark) | EWO 转换通知、信号通知 | | 部署 | Docker Compose + Nginx | Node.js + MySQL + 反向代理 | | 字体 | JetBrains Mono + Inter | 数字等宽字体 + 界面字体 | ## 目录结构 ``` tradehk/ ├── client/ # 前端代码 │ └── src/ │ ├── lib/ │ │ ├── indicators.ts # ★ 核心:所有技术指标计算 + 信号引擎 │ │ ├── types.ts # ★ 核心:所有 TypeScript 类型定义 │ │ ├── binanceApi.ts # Binance API 封装(前端) │ │ ├── tradeService.ts # 交易服务(下单、持仓管理) │ │ └── store.ts # 全局状态管理 │ ├── components/ # UI 组件 │ └── pages/ # 页面(Home、Login、NotFound) ├── server/ │ ├── _core/ │ │ ├── marketEngine.ts # ★ 核心:市场引擎(轮询、信号、EWO通知) │ │ ├── marketData.ts # Binance API 封装(服务端) │ │ ├── notification.ts # 通知服务基础层 │ │ ├── lark.ts # 飞书 Webhook 推送 │ │ └── dataApi.ts # 数据 API 路由 │ ├── db.ts # 数据库操作层 │ └── storage.ts # 存储抽象层 ├── shared/ │ └── types.ts # 共享类型(数据库 schema 导出) ├── drizzle/ │ ├── schema.ts # ★ 数据库表结构定义 │ └── *.sql # 迁移文件 ├── deploy/ │ ├── deploy.sh # 一键部署脚本 │ ├── nginx.conf # Nginx 反向代理配置 │ └── mysql/my.cnf # MySQL 配置 └── docker-compose.yml # 生产环境容器编排 ``` ## 数据流向 ### 1. 实时行情流(前端) ``` Binance WebSocket ↓ 订阅 K 线流(kline_10m 等) useMarketData Hook ↓ 更新 K 线缓存(最新300根) K 线图组件(lightweight-charts) ↓ 同步渲染 指标子图(EWO / MACD / AO / RSI 等) ``` ### 2. 信号检测流(服务端) ``` setInterval(每30秒,可配置 MARKET_ENGINE_POLL_MS) ↓ buildUserRuntimeConfigs() ← 从 MySQL 读取用户配置和监控列表 ↓ refreshCacheForPairs() ← 从 Binance REST API 拉取最新220根K线 ↓ evaluateSignalsForUser() ← 调用 generateSignal() 计算信号 ↓ hasSignalRecord() ← 去重检查(同币同方向同时间戳) ↓ saveSignal() ← 持久化到 MySQL signals 表 ↓ maybePushSignalLark() ← 频控后推送飞书通知 ``` ### 3. EWO 转换检测流(服务端) ``` 每次引擎轮询 ↓ evaluateEwoTurnForUser() ↓ 取最后两根已收线K线的 EWO 值 ↓ 比较颜色(red/green)是否发生变化 ↓ 计算上一阶段持续时间和K线根数 ↓ consumeSharedEwoTurnDedupeSlot() ← 去重(同币同方向同时间戳只推一次) ↓ pushLarkWebhookMessage() ← 推送飞书通知 ``` ## 关键配置参数 | 参数 | 默认值 | 说明 | |------|--------|------| | `MARKET_ENGINE_POLL_MS` | 30000 | 引擎轮询间隔(毫秒),最小10秒 | | `MARKET_SUMMARY_INTERVAL_HOURS` | 4 | 定期汇总推送间隔(小时) | | `CACHE_CANDLE_LIMIT` | 300 | 每对缓存K线数量上限 | | `DEFAULT_SYMBOL_INTERVAL` | 10m | 默认K线周期 | | `signalLarkThrottleMinutes` | 10 | 信号推送频控(分钟) | ## 设计风格 tradehk 采用**精英深色仪表盘**风格(Elite Dark Dashboard): - **主背景**:`#0A0E17`(深海蓝黑) - **主色调**:`#F0B90B`(Binance 黄金) - **涨势色**:`#0ECB81`(清新绿) - **跌势色**:`#F6465D`(警示红) - **数字字体**:JetBrains Mono(等宽,确保对齐) - **界面字体**:Inter(清晰易读) ## 相关文档 - [指标引擎详解](./指标引擎详解.md) - [信号评分引擎](./信号评分引擎.md) - [EWO转换检测机制](./EWO转换检测机制.md) - [部署运维指南](./部署运维指南.md)