- 系统架构总览:技术栈、目录结构、数据流向 - 指标引擎详解:16个指标完整原理与参数(含源码行号) - 信号评分引擎:多指标共振评分机制、动态阈值、案例分析 - 大周期偏向判定:assessBigTimeframeBias 完整说明 - EWO转换检测机制:evaluateEwoTurnForUser 逐步流程 - 飞书通知格式规范:三类通知完整格式模板 - 类型系统参考:所有 TypeScript 类型完整文档 - 数据库与存储:MySQL 表结构、缓存机制、维护指南 - 部署运维指南:Docker Compose、Nginx、飞书配置 - 开发历史与TODO:功能状态表、优先级路线图 - 优化建议汇总:9项优化建议含源码位置和预期效果
131 行
4.7 KiB
Markdown
131 行
4.7 KiB
Markdown
# 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)
|