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