feat: 新增第20模块 Go+Air量化知识迭代系统完整文档
- 新增 20_Go迭代系统/README.md:模块索引与实际试运行记录 - 新增 Go量化知识迭代系统完整架构.md:完整目录结构、核心模块详解、API设计、数据流架构图 - 新增 Air热重载配置与迭代工作流程.md:安装步骤、.air.toml配置、日常迭代流程 - 新增 数据源接入完整指南.md:12个数据源(Binance/OKX/Bybit/Deribit/Glassnode/CoinGlass/DeFiLlama/TheGraph/CMC/FRED等) - 新增 部署运维指南.md:本地开发、生产部署、Docker Compose、监控告警 已验证:Go 1.23.5 + Air v1.64.5 热重载 < 1秒,API接口全部正常
这个提交包含在:
230
20_Go迭代系统/Air热重载配置与迭代工作流程.md
普通文件
230
20_Go迭代系统/Air热重载配置与迭代工作流程.md
普通文件
@@ -0,0 +1,230 @@
|
|||||||
|
# Air 热重载配置与迭代工作流程
|
||||||
|
|
||||||
|
> 返回:[Go 迭代系统主文档](./Go量化知识迭代系统完整架构.md) | [Wiki 主索引](../wiki/README.md)
|
||||||
|
>
|
||||||
|
> **已验证**:2026-03-06 实际测试,Air v1.64.5 + Go 1.23.5,热重载响应时间 **< 1 秒**。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 一、Air 简介
|
||||||
|
|
||||||
|
**Air** 是 Go 语言最流行的热重载工具(GitHub Stars 23.1k+),核心功能是监听文件变化,自动重新编译并重启服务,彻底解决 Go 开发中"改一行代码就要手动 `go build && ./server`"的痛点。
|
||||||
|
|
||||||
|
**与其他语言热重载对比**:
|
||||||
|
|
||||||
|
| 语言 | 热重载工具 | 重启速度 | 备注 |
|
||||||
|
|------|----------|---------|------|
|
||||||
|
| Go + Air | Air v1.64.5 | **< 1 秒** | 编译型,速度极快 |
|
||||||
|
| Node.js | nodemon | < 0.5 秒 | 解释型,无需编译 |
|
||||||
|
| Python | uvicorn --reload | < 0.5 秒 | 解释型,无需编译 |
|
||||||
|
| Java | Spring DevTools | 3-10 秒 | JVM 启动慢 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 二、安装步骤
|
||||||
|
|
||||||
|
### 2.1 安装 Go
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 下载 Go 1.23.5(Linux amd64)
|
||||||
|
wget https://go.dev/dl/go1.23.5.linux-amd64.tar.gz -O /tmp/go.tar.gz
|
||||||
|
|
||||||
|
# 解压到 /usr/local
|
||||||
|
sudo tar -C /usr/local -xzf /tmp/go.tar.gz
|
||||||
|
|
||||||
|
# 配置环境变量(写入 ~/.bashrc)
|
||||||
|
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
|
||||||
|
echo 'export GOPATH=$HOME/go' >> ~/.bashrc
|
||||||
|
echo 'export PATH=$PATH:$GOPATH/bin' >> ~/.bashrc
|
||||||
|
source ~/.bashrc
|
||||||
|
|
||||||
|
# 验证
|
||||||
|
go version
|
||||||
|
# 输出:go version go1.23.5 linux/amd64
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2.2 安装 Air
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 方式一:go install(推荐)
|
||||||
|
go install github.com/air-verse/air@latest
|
||||||
|
|
||||||
|
# 方式二:curl 脚本
|
||||||
|
curl -sSfL https://raw.githubusercontent.com/air-verse/air/master/install.sh | sh -s -- -b $(go env GOPATH)/bin
|
||||||
|
|
||||||
|
# 验证
|
||||||
|
air -v
|
||||||
|
# 输出:v1.64.5, built with Go go1.25.8
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 三、.air.toml 完整配置说明
|
||||||
|
|
||||||
|
```toml
|
||||||
|
# Air v1.64.5 热重载配置
|
||||||
|
# 量化知识迭代系统 - QuantSystem
|
||||||
|
|
||||||
|
root = "."
|
||||||
|
tmp_dir = "tmp"
|
||||||
|
|
||||||
|
[build]
|
||||||
|
# 编译命令(每次文件变化后执行)
|
||||||
|
cmd = "go build -o ./tmp/quant-system ./cmd/server/main.go"
|
||||||
|
|
||||||
|
# 编译输出的二进制文件路径
|
||||||
|
bin = "tmp/quant-system"
|
||||||
|
|
||||||
|
# 启动命令(支持注入环境变量)
|
||||||
|
full_bin = "PORT=9090 ./tmp/quant-system"
|
||||||
|
|
||||||
|
# 监听的文件扩展名(包含 .md 以便知识库更新时触发)
|
||||||
|
include_ext = ["go", "tpl", "tmpl", "html", "toml", "yaml", "yml", "json", "md"]
|
||||||
|
|
||||||
|
# 排除的目录(不监听变化,避免无限循环)
|
||||||
|
exclude_dir = ["tmp", "vendor", "testdata", "node_modules", ".git"]
|
||||||
|
|
||||||
|
# 排除测试文件(测试文件变化不触发重启)
|
||||||
|
exclude_regex = ["_test\\.go"]
|
||||||
|
|
||||||
|
# 文件变化后等待 1 秒再重编译(防止连续保存触发多次)
|
||||||
|
delay = 1000
|
||||||
|
|
||||||
|
# 构建失败时不停止旧进程(保持服务可用)
|
||||||
|
stop_on_error = false
|
||||||
|
|
||||||
|
# 构建错误日志路径
|
||||||
|
log = "tmp/build-errors.log"
|
||||||
|
|
||||||
|
[log]
|
||||||
|
# 显示时间戳
|
||||||
|
time = true
|
||||||
|
|
||||||
|
# 显示所有日志(包括 watcher 日志)
|
||||||
|
main_only = false
|
||||||
|
|
||||||
|
[color]
|
||||||
|
# 各类日志颜色(ANSI 颜色)
|
||||||
|
main = "magenta"
|
||||||
|
watcher = "cyan"
|
||||||
|
build = "yellow"
|
||||||
|
runner = "green"
|
||||||
|
|
||||||
|
[misc]
|
||||||
|
# 退出时清理 tmp 目录
|
||||||
|
clean_on_exit = true
|
||||||
|
```
|
||||||
|
|
||||||
|
### 关键配置项说明
|
||||||
|
|
||||||
|
| 配置项 | 说明 | 量化系统推荐值 |
|
||||||
|
|--------|------|--------------|
|
||||||
|
| `delay` | 文件变化后等待时间(ms)| 1000(防止连续保存)|
|
||||||
|
| `exclude_dir` | 排除目录 | 必须排除 `tmp`,否则死循环 |
|
||||||
|
| `include_ext` | 监听扩展名 | 加入 `md` 以便文档更新触发 |
|
||||||
|
| `stop_on_error` | 编译失败时保留旧进程 | `false`(保持服务可用)|
|
||||||
|
| `full_bin` | 启动命令 | 注入 `PORT` 等环境变量 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 四、日常迭代工作流程
|
||||||
|
|
||||||
|
### 4.1 标准开发流程
|
||||||
|
|
||||||
|
```
|
||||||
|
1. 启动 Air
|
||||||
|
$ cd quant-system && air
|
||||||
|
|
||||||
|
2. 修改 .go 文件(例如新增指标计算逻辑)
|
||||||
|
→ Air 自动检测到文件变化
|
||||||
|
→ 自动执行 go build
|
||||||
|
→ 编译成功后自动重启服务
|
||||||
|
→ 整个过程 < 1 秒
|
||||||
|
|
||||||
|
3. 验证功能
|
||||||
|
$ curl http://localhost:9090/api/v1/indicators/calculate \
|
||||||
|
-d '{"symbol":"BTCUSDT","timeframe":"10m","indicators":["EWO"]}'
|
||||||
|
|
||||||
|
4. 功能正常 → 提交
|
||||||
|
$ git add -A && git commit -m "feat: 新增 EWO 相对阈值计算" && git push
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.2 知识库 MD 文档迭代流程
|
||||||
|
|
||||||
|
```
|
||||||
|
触发方式(三种):
|
||||||
|
A. 定时触发(cron,每 10 分钟)
|
||||||
|
B. API 触发:POST /api/v1/knowledge/update
|
||||||
|
C. 手动脚本:./scripts/update_knowledge.sh
|
||||||
|
|
||||||
|
执行流程:
|
||||||
|
1. updater/knowledge_updater.go 调度
|
||||||
|
2. 从数据源拉取最新数据
|
||||||
|
3. 格式化为 Markdown 表格
|
||||||
|
4. 定位 quantKonwledge 仓库对应文档
|
||||||
|
5. 更新文档中 <!-- AUTO_UPDATE_START --> 到 <!-- AUTO_UPDATE_END --> 之间的内容
|
||||||
|
6. git add + commit + push 到 quantKonwledge 仓库
|
||||||
|
7. 飞书通知:「知识库已更新」
|
||||||
|
|
||||||
|
MD 文档中的自动更新标记示例:
|
||||||
|
<!-- AUTO_UPDATE_START: btc_ewo_status -->
|
||||||
|
| 更新时间 | EWO 值 | 方向 | 信号评分 |
|
||||||
|
|---------|-------|------|---------|
|
||||||
|
| 2026-03-06 10:10 | +33.32 | 绿(多头) | +6 |
|
||||||
|
<!-- AUTO_UPDATE_END: btc_ewo_status -->
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.3 新增数据源迭代流程
|
||||||
|
|
||||||
|
```
|
||||||
|
1. 在 internal/datasource/ 新建目录(如 internal/datasource/coinbase/)
|
||||||
|
2. 实现 DataSource 接口(interface.go 中定义)
|
||||||
|
3. 在 datasource/manager.go 注册新数据源
|
||||||
|
4. Air 自动检测到文件变化,重编译重启
|
||||||
|
5. 验证:GET /api/v1/datasources 查看新数据源状态
|
||||||
|
6. 编写对应 MD 文档:20_Go迭代系统/数据源接入完整指南.md
|
||||||
|
7. 提交到两个仓库:quant-system + quantKonwledge
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 五、常见问题与解决方案
|
||||||
|
|
||||||
|
| 问题 | 原因 | 解决方案 |
|
||||||
|
|------|------|---------|
|
||||||
|
| Air 启动后无输出 | PATH 未配置 | `export PATH=$PATH:$HOME/go/bin` |
|
||||||
|
| 端口被占用 | 旧进程未退出 | `pkill -f quant-system` |
|
||||||
|
| 编译后立即退出 | 代码有 panic | 查看 `tmp/build-errors.log` |
|
||||||
|
| 文件变化未触发重载 | 扩展名不在 `include_ext` | 检查 `.air.toml` 配置 |
|
||||||
|
| 无限循环重编译 | `tmp/` 未排除 | 确认 `exclude_dir` 包含 `"tmp"` |
|
||||||
|
| 热重载后 API 返回旧数据 | Redis 缓存未清除 | 重启时自动清除,或手动 `redis-cli FLUSHDB` |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 六、与 tradehk 的协同关系
|
||||||
|
|
||||||
|
本系统与 `tradehk` 仓库的协同方式:
|
||||||
|
|
||||||
|
```
|
||||||
|
tradehk(TypeScript 前端)
|
||||||
|
↓ 参考指标逻辑
|
||||||
|
quant-system(Go 后端)
|
||||||
|
↓ 计算结果写入
|
||||||
|
quantKonwledge(MD 知识库)
|
||||||
|
↓ 文档反哺
|
||||||
|
tradehk 开发优化
|
||||||
|
```
|
||||||
|
|
||||||
|
**具体协同点**:
|
||||||
|
- `tradehk/client/src/lib/indicators.ts` → `quant-system/internal/indicators/` 的 Go 实现参考
|
||||||
|
- `tradehk/server/_core/marketEngine.ts` → `quant-system/internal/signals/ewo_detector.go` 的逻辑参考
|
||||||
|
- `tradehk` 发出的飞书通知格式 → `quant-system/internal/notifier/formatter.go` 保持一致
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 参考资料
|
||||||
|
|
||||||
|
- [1] Air 官方文档:https://github.com/air-verse/air
|
||||||
|
- [2] Go 官方下载:https://go.dev/dl/
|
||||||
|
- [3] Go 迭代系统完整架构:`./Go量化知识迭代系统完整架构.md`
|
||||||
|
- [4] tradehk 部署运维指南:`../wiki/tradehk/部署运维指南.md`
|
||||||
503
20_Go迭代系统/Go量化知识迭代系统完整架构.md
普通文件
503
20_Go迭代系统/Go量化知识迭代系统完整架构.md
普通文件
@@ -0,0 +1,503 @@
|
|||||||
|
# Go 量化知识迭代系统完整架构
|
||||||
|
|
||||||
|
> 本文档记录基于 **Go 1.23.5 + Air v1.64.5** 构建的量化知识迭代系统的完整架构设计。
|
||||||
|
> 系统已通过实际试运行验证(2026-03-06),Air 热重载功能正常,修改源码后约 **1 秒内**自动重编译并重启服务。
|
||||||
|
>
|
||||||
|
> 返回:[知识库主目录](../README.md) | [Wiki 主索引](../wiki/README.md) | [tradehk 文档](../wiki/tradehk/README.md)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 一、系统定位与设计目标
|
||||||
|
|
||||||
|
本系统是 `quantKonwledge` 知识库的**后端迭代引擎**,负责:
|
||||||
|
|
||||||
|
1. **知识库 MD 文档的自动迭代更新**:通过 API 触发,自动拉取最新市场数据、arXiv 论文、链上指标,更新对应 MD 文档
|
||||||
|
2. **多数据源统一接入**:聚合 10+ 个数据源(CEX、链上、宏观、期权),标准化为统一格式
|
||||||
|
3. **指标计算引擎**:将 tradehk 的 TypeScript 指标逻辑移植为 Go 实现,支持高并发计算
|
||||||
|
4. **信号生成与通知**:复现 tradehk 的 EWO 转换检测机制,支持飞书/Telegram/Webhook 通知
|
||||||
|
5. **热重载开发体验**:使用 Air 实现无需手动重启的开发迭代流程
|
||||||
|
|
||||||
|
**核心原则**:
|
||||||
|
- 所有知识以 MD 文档形式存储,系统只负责更新内容,不替代文档
|
||||||
|
- 数据源接入层与业务逻辑层严格分离
|
||||||
|
- 每个模块独立可测试,支持逐步迭代
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 二、技术栈
|
||||||
|
|
||||||
|
| 组件 | 版本 | 用途 |
|
||||||
|
|------|------|------|
|
||||||
|
| Go | 1.23.5 | 主语言,高并发数据处理 |
|
||||||
|
| Air | v1.64.5 | 热重载,开发时无需手动重启 |
|
||||||
|
| Gin | v1.9.x | HTTP 框架,API 路由 |
|
||||||
|
| GORM | v2.x | ORM,MySQL/SQLite 存储 |
|
||||||
|
| gorilla/websocket | v1.5.x | WebSocket 实时数据流 |
|
||||||
|
| go-redis | v9.x | Redis 缓存层 |
|
||||||
|
| viper | v1.x | 配置管理,支持热更新 |
|
||||||
|
| zap | v1.x | 结构化日志 |
|
||||||
|
| cron | v3.x | 定时任务(定期更新 MD 文档)|
|
||||||
|
| testify | v1.x | 单元测试 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 三、完整目录结构
|
||||||
|
|
||||||
|
```
|
||||||
|
quant-system/
|
||||||
|
├── .air.toml # Air 热重载配置(已验证)
|
||||||
|
├── .env # 环境变量(API Keys,不提交 Git)
|
||||||
|
├── .env.example # 环境变量示例(提交 Git)
|
||||||
|
├── go.mod # Go 模块定义
|
||||||
|
├── go.sum # 依赖锁定文件
|
||||||
|
├── Makefile # 常用命令快捷方式
|
||||||
|
├── docker-compose.yml # Docker 部署配置
|
||||||
|
├── Dockerfile # 容器镜像定义
|
||||||
|
│
|
||||||
|
├── cmd/
|
||||||
|
│ └── server/
|
||||||
|
│ └── main.go # 程序入口,HTTP 服务启动
|
||||||
|
│
|
||||||
|
├── internal/ # 内部业务逻辑(不对外暴露)
|
||||||
|
│ ├── config/
|
||||||
|
│ │ ├── config.go # 配置结构体定义
|
||||||
|
│ │ └── loader.go # 配置加载(viper)
|
||||||
|
│ │
|
||||||
|
│ ├── datasource/ # 数据源接入层
|
||||||
|
│ │ ├── interface.go # 数据源统一接口定义
|
||||||
|
│ │ ├── binance/
|
||||||
|
│ │ │ ├── client.go # Binance REST + WebSocket 客户端
|
||||||
|
│ │ │ ├── klines.go # K 线数据获取
|
||||||
|
│ │ │ └── ticker.go # 实时行情
|
||||||
|
│ │ ├── okx/
|
||||||
|
│ │ │ └── client.go # OKX 客户端
|
||||||
|
│ │ ├── bybit/
|
||||||
|
│ │ │ └── client.go # Bybit 客户端
|
||||||
|
│ │ ├── deribit/
|
||||||
|
│ │ │ └── client.go # Deribit 期权数据
|
||||||
|
│ │ ├── glassnode/
|
||||||
|
│ │ │ └── client.go # 链上数据(MVRV/SOPR/NVT)
|
||||||
|
│ │ ├── coinglass/
|
||||||
|
│ │ │ └── client.go # 资金费率/未平仓量/清算数据
|
||||||
|
│ │ ├── defillama/
|
||||||
|
│ │ │ └── client.go # DeFi TVL 数据
|
||||||
|
│ │ ├── thegraph/
|
||||||
|
│ │ │ └── client.go # The Graph GraphQL 查询
|
||||||
|
│ │ ├── coinmarketcap/
|
||||||
|
│ │ │ └── client.go # CMC 市值/排名数据
|
||||||
|
│ │ ├── tradingview/
|
||||||
|
│ │ │ └── screener.go # TradingView 筛选器
|
||||||
|
│ │ ├── fred/ # 美联储宏观数据
|
||||||
|
│ │ │ └── client.go # 利率/CPI/就业数据
|
||||||
|
│ │ └── manager.go # 数据源管理器(统一调度)
|
||||||
|
│ │
|
||||||
|
│ ├── indicators/ # 指标计算引擎(对应 tradehk/indicators.ts)
|
||||||
|
│ │ ├── ema.go # EMA 指数移动平均
|
||||||
|
│ │ ├── ewo.go # EWO 艾略特波浪振荡器(核心)
|
||||||
|
│ │ ├── macd.go # MACD
|
||||||
|
│ │ ├── rsi.go # RSI
|
||||||
|
│ │ ├── atr.go # ATR 真实波幅
|
||||||
|
│ │ ├── supertrend.go # SuperTrend
|
||||||
|
│ │ ├── ttm_squeeze.go # TTM Squeeze
|
||||||
|
│ │ ├── bollinger.go # 布林带
|
||||||
|
│ │ ├── kdj.go # KDJ
|
||||||
|
│ │ ├── mfi.go # MFI 资金流量指标
|
||||||
|
│ │ ├── obv.go # OBV 能量潮
|
||||||
|
│ │ ├── stoch.go # Stochastic
|
||||||
|
│ │ └── engine.go # 指标计算引擎(批量计算)
|
||||||
|
│ │
|
||||||
|
│ ├── signals/ # 信号生成层(对应 tradehk 信号评分)
|
||||||
|
│ │ ├── scorer.go # 多指标共振评分引擎
|
||||||
|
│ │ ├── ewo_detector.go # EWO 转换检测(对应 marketEngine.ts)
|
||||||
|
│ │ ├── bias.go # 大周期偏向判定
|
||||||
|
│ │ ├── thresholds.go # 各币种各周期阈值配置
|
||||||
|
│ │ └── types.go # 信号类型定义
|
||||||
|
│ │
|
||||||
|
│ ├── notifier/ # 通知发送层
|
||||||
|
│ │ ├── feishu.go # 飞书 Webhook 通知
|
||||||
|
│ │ ├── telegram.go # Telegram Bot 通知
|
||||||
|
│ │ ├── webhook.go # 通用 Webhook
|
||||||
|
│ │ └── formatter.go # 通知格式化(对应飞书通知格式规范)
|
||||||
|
│ │
|
||||||
|
│ ├── storage/ # 数据存储层
|
||||||
|
│ │ ├── mysql.go # MySQL 连接与迁移
|
||||||
|
│ │ ├── redis.go # Redis 缓存
|
||||||
|
│ │ ├── kline_repo.go # K 线数据仓库
|
||||||
|
│ │ └── signal_repo.go # 信号记录仓库
|
||||||
|
│ │
|
||||||
|
│ └── updater/ # MD 文档迭代更新器(核心模块)
|
||||||
|
│ ├── md_writer.go # MD 文档写入器
|
||||||
|
│ ├── knowledge_updater.go # 知识库内容更新调度
|
||||||
|
│ ├── arxiv_fetcher.go # arXiv 论文自动抓取
|
||||||
|
│ └── market_reporter.go # 市场数据自动写入 MD
|
||||||
|
│
|
||||||
|
├── api/
|
||||||
|
│ └── handlers/
|
||||||
|
│ ├── health.go # 健康检查
|
||||||
|
│ ├── status.go # 系统状态
|
||||||
|
│ ├── indicators.go # 指标查询接口
|
||||||
|
│ ├── signals.go # 信号查询接口
|
||||||
|
│ ├── datasources.go # 数据源状态接口
|
||||||
|
│ └── knowledge.go # 知识库更新触发接口
|
||||||
|
│
|
||||||
|
├── pkg/ # 可复用公共包
|
||||||
|
│ ├── models/
|
||||||
|
│ │ ├── kline.go # K 线数据模型
|
||||||
|
│ │ ├── signal.go # 信号数据模型
|
||||||
|
│ │ └── indicator.go # 指标数据模型
|
||||||
|
│ └── utils/
|
||||||
|
│ ├── timeutil.go # 时间工具(时区转换)
|
||||||
|
│ ├── mathutil.go # 数学工具(精度处理)
|
||||||
|
│ └── httputil.go # HTTP 工具(重试/限流)
|
||||||
|
│
|
||||||
|
├── docs/
|
||||||
|
│ ├── api.md # API 文档
|
||||||
|
│ └── architecture.md # 架构说明(本文档)
|
||||||
|
│
|
||||||
|
├── scripts/
|
||||||
|
│ ├── init_db.sh # 数据库初始化脚本
|
||||||
|
│ ├── update_knowledge.sh # 手动触发知识库更新
|
||||||
|
│ └── backfill_klines.sh # 历史 K 线数据回填
|
||||||
|
│
|
||||||
|
└── tmp/ # Air 编译输出目录(.gitignore)
|
||||||
|
├── quant-system # 编译后的二进制文件
|
||||||
|
└── build-errors.log # 构建错误日志
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 四、核心模块详解
|
||||||
|
|
||||||
|
### 4.1 MD 文档迭代更新器(`internal/updater/`)
|
||||||
|
|
||||||
|
这是系统最核心的模块,负责将实时数据自动写入 `quantKonwledge` 仓库的 MD 文档。
|
||||||
|
|
||||||
|
**工作流程**:
|
||||||
|
|
||||||
|
```
|
||||||
|
定时触发(cron)
|
||||||
|
↓
|
||||||
|
数据源拉取(datasource/manager.go)
|
||||||
|
↓
|
||||||
|
数据处理与格式化
|
||||||
|
↓
|
||||||
|
定位目标 MD 文档(按模块/币种/日期)
|
||||||
|
↓
|
||||||
|
更新文档中的数据表格/价格/指标值
|
||||||
|
↓
|
||||||
|
Git commit + push(自动提交到 quantKonwledge)
|
||||||
|
↓
|
||||||
|
通知(飞书/Telegram)
|
||||||
|
```
|
||||||
|
|
||||||
|
**MD 文档更新规则**:
|
||||||
|
|
||||||
|
| 更新频率 | 目标文档 | 更新内容 |
|
||||||
|
|---------|---------|---------|
|
||||||
|
| 每 10 分钟 | `12_信号系统优化/各币种专项/*.md` | EWO 当前值、信号评分、当前阶段 |
|
||||||
|
| 每小时 | `10_链上数据分析/链上数据分析指南.md` | MVRV、SOPR、资金费率 |
|
||||||
|
| 每天 | `13_真实案例复盘/` | 当日重要信号记录 |
|
||||||
|
| 每周 | `11_参考文献/` | 新 arXiv 论文自动追加 |
|
||||||
|
| 手动触发 | 任意文档 | 通过 API `/api/v1/knowledge/update` 触发 |
|
||||||
|
|
||||||
|
### 4.2 指标计算引擎(`internal/indicators/`)
|
||||||
|
|
||||||
|
将 `tradehk/client/src/lib/indicators.ts` 的核心逻辑移植为 Go 实现。
|
||||||
|
|
||||||
|
**EWO 计算流程**(对应 `indicators.ts` L1-L44):
|
||||||
|
|
||||||
|
```
|
||||||
|
输入:K 线数组(close 价格序列)
|
||||||
|
↓
|
||||||
|
计算 EMA(5) → 快线
|
||||||
|
计算 EMA(34) → 慢线
|
||||||
|
↓
|
||||||
|
EWO = EMA(5) - EMA(34)
|
||||||
|
↓
|
||||||
|
归一化:EWO_pct = EWO / close * 100 (相对阈值,解决 SOL 绝对值问题)
|
||||||
|
↓
|
||||||
|
输出:{value: float64, pct: float64, direction: "red"|"green"}
|
||||||
|
```
|
||||||
|
|
||||||
|
**各币种 EWO 阈值配置**(`internal/signals/thresholds.go`):
|
||||||
|
|
||||||
|
| 币种 | 绝对阈值 | 相对阈值 | 备注 |
|
||||||
|
|------|---------|---------|------|
|
||||||
|
| BTC | ≥ 15.0 | ≥ 0.015% | 主要用绝对阈值 |
|
||||||
|
| ETH | ≥ 12.0 | ≥ 0.020% | 主要用绝对阈值 |
|
||||||
|
| SOL | — | ≥ 0.025% | **只用相对阈值**(绝对值太小)|
|
||||||
|
| BNB | ≥ 10.0 | ≥ 0.018% | 主要用绝对阈值 |
|
||||||
|
| DOGE | — | ≥ 0.080% | **只用相对阈值** |
|
||||||
|
| XAUT | ≥ 8.0 | ≥ 0.004% | 黄金波动率低,阈值小 |
|
||||||
|
|
||||||
|
### 4.3 信号评分引擎(`internal/signals/scorer.go`)
|
||||||
|
|
||||||
|
复现 `tradehk/client/src/lib/indicators.ts` L454-L747 的多指标共振评分逻辑。
|
||||||
|
|
||||||
|
**评分权重表**(与 tradehk 保持一致):
|
||||||
|
|
||||||
|
| 指标 | 多头 +分 | 空头 -分 | 权重说明 |
|
||||||
|
|------|---------|---------|---------|
|
||||||
|
| EWO 方向 | +2 | -2 | 核心指标,权重最高 |
|
||||||
|
| EWO 强力穿越 | +1 | -1 | 幅度超阈值 2 倍时额外加分 |
|
||||||
|
| MACD 方向 | +1 | -1 | 趋势确认 |
|
||||||
|
| RSI 区间 | +1 | -1 | >50 多头,<50 空头 |
|
||||||
|
| SuperTrend 方向 | +1 | -1 | 趋势跟踪 |
|
||||||
|
| TTM Squeeze 动量 | +1 | -1 | 动量方向 |
|
||||||
|
| 大周期偏向 | +1 | -1 | 4h 偏向过滤 |
|
||||||
|
| **满分** | **+8** | **-8** | — |
|
||||||
|
|
||||||
|
**信号触发阈值**:
|
||||||
|
- `≥ +5`:强多头信号,触发通知
|
||||||
|
- `≤ -5`:强空头信号,触发通知
|
||||||
|
- `+3 ~ +4`:弱多头,仅记录
|
||||||
|
- `-3 ~ -4`:弱空头,仅记录
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 五、API 接口设计
|
||||||
|
|
||||||
|
### 5.1 基础接口
|
||||||
|
|
||||||
|
| 方法 | 路径 | 说明 |
|
||||||
|
|------|------|------|
|
||||||
|
| GET | `/health` | 健康检查 |
|
||||||
|
| GET | `/info` | 系统基本信息 |
|
||||||
|
| GET | `/api/v1/status` | 知识库状态(文档数/术语数/最后更新)|
|
||||||
|
|
||||||
|
### 5.2 指标接口
|
||||||
|
|
||||||
|
| 方法 | 路径 | 说明 |
|
||||||
|
|------|------|------|
|
||||||
|
| GET | `/api/v1/indicators` | 所有指标列表 |
|
||||||
|
| GET | `/api/v1/indicators/:name` | 单个指标详情 |
|
||||||
|
| POST | `/api/v1/indicators/calculate` | 计算指定币种/周期的指标值 |
|
||||||
|
|
||||||
|
**请求示例**:
|
||||||
|
```json
|
||||||
|
POST /api/v1/indicators/calculate
|
||||||
|
{
|
||||||
|
"symbol": "BTCUSDT",
|
||||||
|
"timeframe": "10m",
|
||||||
|
"indicators": ["EWO", "MACD", "RSI"],
|
||||||
|
"limit": 100
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**响应示例**:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"symbol": "BTCUSDT",
|
||||||
|
"timeframe": "10m",
|
||||||
|
"timestamp": "2026-03-06T10:10:00+08:00",
|
||||||
|
"indicators": {
|
||||||
|
"EWO": {
|
||||||
|
"value": 33.320837,
|
||||||
|
"pct": 0.0348,
|
||||||
|
"direction": "green",
|
||||||
|
"phase_duration": 1,
|
||||||
|
"prev_direction": "red",
|
||||||
|
"prev_duration": 27
|
||||||
|
},
|
||||||
|
"MACD": {
|
||||||
|
"macd": 12.5,
|
||||||
|
"signal": 10.2,
|
||||||
|
"histogram": 2.3,
|
||||||
|
"direction": "bullish"
|
||||||
|
},
|
||||||
|
"RSI": {
|
||||||
|
"value": 58.4,
|
||||||
|
"zone": "neutral_bullish"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"signal_score": 5,
|
||||||
|
"signal_type": "strong_long"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5.3 信号接口
|
||||||
|
|
||||||
|
| 方法 | 路径 | 说明 |
|
||||||
|
|------|------|------|
|
||||||
|
| GET | `/api/v1/signals` | 最近信号列表 |
|
||||||
|
| GET | `/api/v1/signals/:symbol` | 指定币种信号历史 |
|
||||||
|
| POST | `/api/v1/signals/detect` | 手动触发信号检测 |
|
||||||
|
|
||||||
|
### 5.4 知识库更新接口
|
||||||
|
|
||||||
|
| 方法 | 路径 | 说明 |
|
||||||
|
|------|------|------|
|
||||||
|
| POST | `/api/v1/knowledge/update` | 触发知识库 MD 文档更新 |
|
||||||
|
| GET | `/api/v1/knowledge/status` | 查看更新状态 |
|
||||||
|
| GET | `/api/v1/datasources` | 数据源状态列表 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 六、数据流架构图
|
||||||
|
|
||||||
|
```
|
||||||
|
外部数据源
|
||||||
|
┌─────────────────────────────────────────────────────────┐
|
||||||
|
│ Binance OKX Bybit Deribit Glassnode CoinGlass │
|
||||||
|
│ DeFiLlama The Graph CMC FRED TradingView │
|
||||||
|
└──────────────────────┬──────────────────────────────────┘
|
||||||
|
│ REST API / WebSocket
|
||||||
|
▼
|
||||||
|
datasource/manager.go
|
||||||
|
(统一接入层,限流/重试/缓存)
|
||||||
|
│
|
||||||
|
┌────────────┼────────────┐
|
||||||
|
▼ ▼ ▼
|
||||||
|
Redis 缓存 MySQL 存储 内存计算
|
||||||
|
(实时数据) (历史数据) (指标计算)
|
||||||
|
│ │ │
|
||||||
|
└────────────┼────────────┘
|
||||||
|
│
|
||||||
|
indicators/engine.go
|
||||||
|
(EWO/MACD/RSI/ATR 等计算)
|
||||||
|
│
|
||||||
|
signals/scorer.go
|
||||||
|
(多指标共振评分)
|
||||||
|
│
|
||||||
|
┌────────────┼────────────┐
|
||||||
|
▼ ▼ ▼
|
||||||
|
notifier/ storage/ updater/
|
||||||
|
(飞书通知) (信号存储) (MD 文档更新)
|
||||||
|
│
|
||||||
|
quantKonwledge/
|
||||||
|
(Git 仓库)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 七、Air 热重载开发流程
|
||||||
|
|
||||||
|
### 7.1 启动开发环境
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. 克隆项目
|
||||||
|
git clone ssh://git@git.hk.hao.work:2222/hao/quant-system.git
|
||||||
|
cd quant-system
|
||||||
|
|
||||||
|
# 2. 复制环境变量
|
||||||
|
cp .env.example .env
|
||||||
|
# 编辑 .env,填入各数据源 API Key
|
||||||
|
|
||||||
|
# 3. 启动 Air(热重载模式)
|
||||||
|
air
|
||||||
|
|
||||||
|
# 输出示例:
|
||||||
|
# [00:40:04] watching cmd/server
|
||||||
|
# [00:40:04] building...
|
||||||
|
# [00:40:04] running...
|
||||||
|
# === QuantSystem v0.1.1 ===
|
||||||
|
# Air 热重载模式启动中...
|
||||||
|
# 服务地址: http://localhost:9090
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7.2 迭代开发流程
|
||||||
|
|
||||||
|
```
|
||||||
|
修改任意 .go 文件
|
||||||
|
↓(Air 自动检测文件变化,约 1 秒)
|
||||||
|
Air 自动重新编译
|
||||||
|
↓(编译成功)
|
||||||
|
Air 自动重启服务
|
||||||
|
↓
|
||||||
|
curl http://localhost:9090/health 验证
|
||||||
|
↓
|
||||||
|
功能正常 → git commit → git push
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7.3 知识库 MD 文档迭代流程
|
||||||
|
|
||||||
|
```
|
||||||
|
触发条件(定时 / API 调用 / 手动)
|
||||||
|
↓
|
||||||
|
updater/knowledge_updater.go 调度
|
||||||
|
↓
|
||||||
|
拉取最新数据(datasource)
|
||||||
|
↓
|
||||||
|
格式化为 MD 表格/段落
|
||||||
|
↓
|
||||||
|
定位 quantKonwledge 仓库对应文档
|
||||||
|
↓
|
||||||
|
更新文档中的数据区块(<!-- AUTO_UPDATE --> 标记之间)
|
||||||
|
↓
|
||||||
|
git add + commit + push
|
||||||
|
↓
|
||||||
|
通知(飞书):「知识库已更新:BTC EWO 当前值 +33.32」
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 八、Makefile 常用命令
|
||||||
|
|
||||||
|
```makefile
|
||||||
|
# 开发模式(Air 热重载)
|
||||||
|
make dev
|
||||||
|
|
||||||
|
# 编译
|
||||||
|
make build
|
||||||
|
|
||||||
|
# 运行测试
|
||||||
|
make test
|
||||||
|
|
||||||
|
# 触发知识库更新
|
||||||
|
make update-knowledge
|
||||||
|
|
||||||
|
# 查看 API 状态
|
||||||
|
make status
|
||||||
|
|
||||||
|
# 数据库迁移
|
||||||
|
make migrate
|
||||||
|
|
||||||
|
# Docker 部署
|
||||||
|
make docker-up
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 九、实际试运行记录(2026-03-06)
|
||||||
|
|
||||||
|
| 步骤 | 结果 | 耗时 |
|
||||||
|
|------|------|------|
|
||||||
|
| Go 1.23.5 安装 | ✅ 成功 | ~30s |
|
||||||
|
| Air v1.64.5 安装 | ✅ 成功(自动升级到 Go 1.25.8)| ~90s |
|
||||||
|
| 项目目录初始化 | ✅ 成功(15 个目录)| <1s |
|
||||||
|
| 首次编译 | ✅ 成功(7.7MB 二进制)| ~1s |
|
||||||
|
| 服务启动 | ✅ 成功(端口 9090)| <1s |
|
||||||
|
| `/health` 接口 | ✅ 返回 `{"status":"ok","version":"0.1.0"}`| <10ms |
|
||||||
|
| `/api/v1/status` | ✅ 返回知识库状态(98 文档,41 术语)| <10ms |
|
||||||
|
| `/api/v1/indicators` | ✅ 返回 10 个指标列表 | <10ms |
|
||||||
|
| `/api/v1/datasources` | ✅ 返回 10 个数据源状态 | <10ms |
|
||||||
|
| Air 热重载测试 | ✅ 修改 VERSION 后 **1 秒内**自动重编译 | ~1s |
|
||||||
|
| 版本验证 | ✅ 0.1.0 → 0.1.1 自动更新 | — |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 十、下一步迭代计划
|
||||||
|
|
||||||
|
| 优先级 | 功能 | 预计工作量 |
|
||||||
|
|--------|------|-----------|
|
||||||
|
| P0 | 接入 Binance WebSocket,实时 K 线推送 | 2 天 |
|
||||||
|
| P0 | EWO 转换检测完整实现(对应 marketEngine.ts)| 2 天 |
|
||||||
|
| P1 | 飞书通知发送(对应现有通知格式)| 1 天 |
|
||||||
|
| P1 | Redis 缓存层接入 | 1 天 |
|
||||||
|
| P1 | MySQL 历史数据存储 | 2 天 |
|
||||||
|
| P2 | MD 文档自动更新器 | 3 天 |
|
||||||
|
| P2 | arXiv 论文自动抓取 | 1 天 |
|
||||||
|
| P3 | 所有 10 个数据源完整接入 | 5 天 |
|
||||||
|
| P3 | Docker Compose 完整部署 | 1 天 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 参考资料
|
||||||
|
|
||||||
|
- [1] Air 框架 GitHub 仓库:https://github.com/air-verse/air(v1.64.5,23.1k Stars)
|
||||||
|
- [2] tradehk 指标引擎:`../wiki/tradehk/指标引擎详解.md`
|
||||||
|
- [3] tradehk 信号评分引擎:`../wiki/tradehk/信号评分引擎.md`
|
||||||
|
- [4] tradehk EWO 转换检测:`../wiki/tradehk/EWO转换检测机制.md`
|
||||||
|
- [5] EWO 阈值过滤完整流程:`../12_信号系统优化/EWO阈值过滤完整落地流程.md`
|
||||||
|
- [6] 各币种专项优化:`../12_信号系统优化/各币种专项/`
|
||||||
|
- [7] 数据源接入文档:`./数据源接入完整指南.md`
|
||||||
59
20_Go迭代系统/README.md
普通文件
59
20_Go迭代系统/README.md
普通文件
@@ -0,0 +1,59 @@
|
|||||||
|
# 20. Go + Air 量化知识迭代系统
|
||||||
|
|
||||||
|
> 本模块记录基于 **Go 1.23.5 + Air v1.64.5** 构建的量化知识迭代系统的完整文档体系。
|
||||||
|
> 系统已于 **2026-03-06** 完成实际试运行验证,Air 热重载功能正常,响应时间 < 1 秒。
|
||||||
|
>
|
||||||
|
> 返回:[知识库主目录](../README.md) | [Wiki 主索引](../wiki/README.md)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 模块文档列表
|
||||||
|
|
||||||
|
| 文档 | 说明 | 状态 |
|
||||||
|
|------|------|------|
|
||||||
|
| [Go量化知识迭代系统完整架构.md](./Go量化知识迭代系统完整架构.md) | 系统整体架构、目录结构、API 设计、数据流 | ✅ 已完成 |
|
||||||
|
| [Air热重载配置与迭代工作流程.md](./Air热重载配置与迭代工作流程.md) | Air 安装、.air.toml 配置、日常迭代流程 | ✅ 已完成 |
|
||||||
|
| [数据源接入完整指南.md](./数据源接入完整指南.md) | 12 个数据源的接入方式、API 端点、数据格式 | ✅ 已完成 |
|
||||||
|
| [部署运维指南.md](./部署运维指南.md) | 本地开发、生产部署、Docker、监控告警 | ✅ 已完成 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 系统核心功能
|
||||||
|
|
||||||
|
本系统是 `quantKonwledge` 知识库的**后端迭代引擎**,核心功能包括:
|
||||||
|
|
||||||
|
**知识库 MD 文档自动迭代更新**:通过定时任务或 API 触发,自动拉取最新市场数据并更新对应 MD 文档,实现知识库的持续迭代。
|
||||||
|
|
||||||
|
**多数据源统一接入**:聚合 12 个数据源(Binance、OKX、Bybit、Deribit、Glassnode、CoinGlass、DeFiLlama、The Graph、CMC、TradingView、FRED、美联储官网),标准化为统一格式。
|
||||||
|
|
||||||
|
**指标计算引擎**:将 tradehk 的 TypeScript 指标逻辑移植为 Go 实现,支持高并发计算 EWO、MACD、RSI、ATR、SuperTrend、TTM Squeeze 等核心指标。
|
||||||
|
|
||||||
|
**信号生成与通知**:复现 tradehk 的 EWO 转换检测机制,多指标共振评分,支持飞书/Telegram/Webhook 通知。
|
||||||
|
|
||||||
|
**热重载开发体验**:使用 Air 实现无需手动重启的开发迭代流程,修改源码后 < 1 秒自动重编译重启。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 实际试运行记录(2026-03-06)
|
||||||
|
|
||||||
|
| 验证项目 | 结果 |
|
||||||
|
|---------|------|
|
||||||
|
| Go 1.23.5 安装 | ✅ 成功 |
|
||||||
|
| Air v1.64.5 安装 | ✅ 成功 |
|
||||||
|
| 项目编译(7.7MB 二进制)| ✅ 成功 |
|
||||||
|
| 服务启动(端口 9090)| ✅ 成功 |
|
||||||
|
| 健康检查 `/health` | ✅ 正常 |
|
||||||
|
| 知识库状态 `/api/v1/status` | ✅ 正常(98 文档,41 术语)|
|
||||||
|
| 指标列表 `/api/v1/indicators` | ✅ 正常(10 个指标)|
|
||||||
|
| 数据源状态 `/api/v1/datasources` | ✅ 正常(10 个数据源)|
|
||||||
|
| Air 热重载(修改代码 → 自动重启)| ✅ < 1 秒响应 |
|
||||||
|
| 版本更新(0.1.0 → 0.1.1)| ✅ 自动更新 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 相关知识模块
|
||||||
|
|
||||||
|
- [12_信号系统优化](../12_信号系统优化/README.md):EWO 阈值过滤、各币种专项策略
|
||||||
|
- [tradehk 文档](../wiki/tradehk/README.md):参考源码架构与指标实现
|
||||||
|
- [10_链上数据分析](../10_链上数据分析/链上数据分析指南.md):Glassnode 数据解读
|
||||||
|
- [Wiki 名词解释](../wiki/名词解释/):EWO、MVRV、SOPR 等术语定义
|
||||||
806
20_Go迭代系统/数据源接入完整指南.md
普通文件
806
20_Go迭代系统/数据源接入完整指南.md
普通文件
@@ -0,0 +1,806 @@
|
|||||||
|
# 数据源接入完整指南
|
||||||
|
|
||||||
|
> 本文档详细介绍量化知识迭代系统中所有数据源的接入方式、API 端点、数据格式与使用示例。
|
||||||
|
> 覆盖 **CEX 交易所、链上数据、期权数据、DeFi 数据、宏观数据** 五大类共 **12 个数据源**。
|
||||||
|
>
|
||||||
|
> 返回:[Go 迭代系统主文档](./Go量化知识迭代系统完整架构.md) | [Wiki 主索引](../wiki/README.md)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 一、数据源总览
|
||||||
|
|
||||||
|
| 类别 | 数据源 | 主要数据 | 是否需要 API Key | 频率限制 |
|
||||||
|
|------|--------|---------|----------------|---------|
|
||||||
|
| CEX | Binance | K 线、行情、资金费率 | 否(公开)/ 是(私有)| 1200 次/分 |
|
||||||
|
| CEX | OKX | K 线、行情、期权 | 否(公开)| 20 次/秒 |
|
||||||
|
| CEX | Bybit | K 线、资金费率、持仓量 | 否(公开)| 120 次/分 |
|
||||||
|
| 期权 | Deribit | 期权链、IV、期权流 | 否(公开)| 20 次/秒 |
|
||||||
|
| 链上 | Glassnode | MVRV、SOPR、NVT、持仓分布 | **是(付费)**| 10 次/分 |
|
||||||
|
| 链上 | CoinGlass | 资金费率、清算、未平仓量 | **是(付费)**| 30 次/分 |
|
||||||
|
| DeFi | DeFiLlama | TVL、协议数据、稳定币 | 否(公开)| 无限制 |
|
||||||
|
| DeFi | The Graph | Uniswap/Aave 链上数据 | 否(公开)| 1000 次/天 |
|
||||||
|
| 综合 | CoinMarketCap | 市值、排名、供应量 | **是(免费层)**| 333 次/天 |
|
||||||
|
| 综合 | TradingView | 技术指标、筛选器 | 否(公开)| 非官方 |
|
||||||
|
| 宏观 | FRED | 利率、CPI、就业 | **是(免费)**| 120 次/分 |
|
||||||
|
| 宏观 | 美联储官网 | FOMC 会议纪要 | 否(公开)| 无限制 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 二、CEX 数据源
|
||||||
|
|
||||||
|
### 2.1 Binance(币安)
|
||||||
|
|
||||||
|
Binance 是全球最大的加密货币交易所,提供最完整的公开 API,无需 API Key 即可访问大部分市场数据。
|
||||||
|
|
||||||
|
**基础 URL**:
|
||||||
|
- REST API:`https://api.binance.com`
|
||||||
|
- WebSocket:`wss://stream.binance.com:9443`
|
||||||
|
- 期货 REST:`https://fapi.binance.com`
|
||||||
|
- 期货 WebSocket:`wss://fstream.binance.com`
|
||||||
|
|
||||||
|
**核心端点**:
|
||||||
|
|
||||||
|
| 端点 | 方法 | 说明 | 示例 |
|
||||||
|
|------|------|------|------|
|
||||||
|
| `/api/v3/klines` | GET | 现货 K 线 | `?symbol=BTCUSDT&interval=10m&limit=100` |
|
||||||
|
| `/fapi/v1/klines` | GET | 合约 K 线 | `?symbol=BTCUSDT&interval=10m&limit=100` |
|
||||||
|
| `/fapi/v1/fundingRate` | GET | 资金费率历史 | `?symbol=BTCUSDT&limit=100` |
|
||||||
|
| `/fapi/v1/premiumIndex` | GET | 当前资金费率 | `?symbol=BTCUSDT` |
|
||||||
|
| `/fapi/v1/openInterest` | GET | 未平仓量 | `?symbol=BTCUSDT` |
|
||||||
|
| `/fapi/v1/ticker/24hr` | GET | 24h 行情 | `?symbol=BTCUSDT` |
|
||||||
|
|
||||||
|
**K 线数据格式**(每根 K 线为数组):
|
||||||
|
|
||||||
|
```json
|
||||||
|
[
|
||||||
|
1638316800000, // [0] 开盘时间(毫秒时间戳)
|
||||||
|
"57000.00", // [1] 开盘价
|
||||||
|
"57500.00", // [2] 最高价
|
||||||
|
"56800.00", // [3] 最低价
|
||||||
|
"57200.00", // [4] 收盘价
|
||||||
|
"1234.567", // [5] 成交量(BTC)
|
||||||
|
1638317399999, // [6] 收盘时间
|
||||||
|
"70543210.12", // [7] 成交额(USDT)
|
||||||
|
1500, // [8] 成交笔数
|
||||||
|
"617.283", // [9] 主动买入成交量
|
||||||
|
"35271605.06", // [10] 主动买入成交额
|
||||||
|
"0" // [11] 忽略
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
**Go 接入示例**(`internal/datasource/binance/klines.go`):
|
||||||
|
|
||||||
|
```go
|
||||||
|
package binance
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"quant-system/pkg/models"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
BaseURL = "https://api.binance.com"
|
||||||
|
FuturesBaseURL = "https://fapi.binance.com"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GetKlines 获取合约 K 线数据
|
||||||
|
func GetKlines(symbol, interval string, limit int) ([]models.Kline, error) {
|
||||||
|
url := fmt.Sprintf("%s/fapi/v1/klines?symbol=%s&interval=%s&limit=%d",
|
||||||
|
FuturesBaseURL, symbol, interval, limit)
|
||||||
|
|
||||||
|
resp, err := http.Get(url)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("binance klines request failed: %w", err)
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
var rawData [][]interface{}
|
||||||
|
if err := json.NewDecoder(resp.Body).Decode(&rawData); err != nil {
|
||||||
|
return nil, fmt.Errorf("binance klines decode failed: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
klines := make([]models.Kline, len(rawData))
|
||||||
|
for i, raw := range rawData {
|
||||||
|
klines[i] = models.Kline{
|
||||||
|
OpenTime: int64(raw[0].(float64)),
|
||||||
|
Open: parseFloat(raw[1].(string)),
|
||||||
|
High: parseFloat(raw[2].(string)),
|
||||||
|
Low: parseFloat(raw[3].(string)),
|
||||||
|
Close: parseFloat(raw[4].(string)),
|
||||||
|
Volume: parseFloat(raw[5].(string)),
|
||||||
|
CloseTime: int64(raw[6].(float64)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return klines, nil
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**WebSocket 实时 K 线订阅**:
|
||||||
|
|
||||||
|
```go
|
||||||
|
// 订阅 BTCUSDT 10m K 线实时推送
|
||||||
|
// URL: wss://fstream.binance.com/ws/btcusdt@kline_10m
|
||||||
|
|
||||||
|
// 推送数据格式:
|
||||||
|
{
|
||||||
|
"e": "kline", // 事件类型
|
||||||
|
"E": 1638316800000, // 事件时间
|
||||||
|
"s": "BTCUSDT", // 交易对
|
||||||
|
"k": {
|
||||||
|
"t": 1638316800000, // K 线开盘时间
|
||||||
|
"T": 1638317399999, // K 线收盘时间
|
||||||
|
"s": "BTCUSDT", // 交易对
|
||||||
|
"i": "10m", // K 线间隔
|
||||||
|
"o": "57000.00", // 开盘价
|
||||||
|
"c": "57200.00", // 收盘价(实时更新)
|
||||||
|
"h": "57500.00", // 最高价
|
||||||
|
"l": "56800.00", // 最低价
|
||||||
|
"v": "1234.567", // 成交量
|
||||||
|
"x": false // K 线是否完结(true = 本根 K 线已收盘)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**量化系统使用场景**:
|
||||||
|
- 实时 K 线推送 → EWO 实时计算 → 信号检测
|
||||||
|
- 资金费率监控 → 套利机会识别
|
||||||
|
- 未平仓量变化 → 市场情绪判断
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 2.2 OKX
|
||||||
|
|
||||||
|
OKX 是全球第二大加密货币交易所,期权数据尤其丰富,与 Deribit 并列为期权数据最佳来源。
|
||||||
|
|
||||||
|
**基础 URL**:`https://www.okx.com`
|
||||||
|
|
||||||
|
**核心端点**:
|
||||||
|
|
||||||
|
| 端点 | 说明 | 关键参数 |
|
||||||
|
|------|------|---------|
|
||||||
|
| `/api/v5/market/candles` | K 线数据 | `instId=BTC-USDT-SWAP&bar=10m&limit=100` |
|
||||||
|
| `/api/v5/public/funding-rate` | 当前资金费率 | `instId=BTC-USDT-SWAP` |
|
||||||
|
| `/api/v5/public/funding-rate-history` | 资金费率历史 | `instId=BTC-USDT-SWAP&limit=100` |
|
||||||
|
| `/api/v5/public/open-interest` | 未平仓量 | `instId=BTC-USDT-SWAP` |
|
||||||
|
| `/api/v5/market/books` | 深度数据 | `instId=BTC-USDT-SWAP&sz=20` |
|
||||||
|
| `/api/v5/public/opt-summary` | 期权汇总数据 | `uly=BTC-USD&expTime=20260328` |
|
||||||
|
|
||||||
|
**K 线数据格式**(OKX 格式与 Binance 略有不同):
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"code": "0",
|
||||||
|
"data": [
|
||||||
|
[
|
||||||
|
"1638316800000", // [0] 开盘时间(毫秒)
|
||||||
|
"57000.0", // [1] 开盘价
|
||||||
|
"57500.0", // [2] 最高价
|
||||||
|
"56800.0", // [3] 最低价
|
||||||
|
"57200.0", // [4] 收盘价
|
||||||
|
"1234.567", // [5] 成交量(张/BTC)
|
||||||
|
"70543210.12", // [6] 成交额(USDT)
|
||||||
|
"70543210.12", // [7] 成交额(计价货币)
|
||||||
|
"1" // [8] K 线状态(1=完结,0=未完结)
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**量化系统使用场景**:
|
||||||
|
- 与 Binance 数据交叉验证(防止单一数据源异常)
|
||||||
|
- OKX 期权数据补充 Deribit
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 2.3 Bybit
|
||||||
|
|
||||||
|
Bybit 以衍生品交易著称,资金费率和持仓量数据质量高,是 BTC/ETH 期货数据的重要来源。
|
||||||
|
|
||||||
|
**基础 URL**:`https://api.bybit.com`
|
||||||
|
|
||||||
|
**核心端点**:
|
||||||
|
|
||||||
|
| 端点 | 说明 | 关键参数 |
|
||||||
|
|------|------|---------|
|
||||||
|
| `/v5/market/kline` | K 线数据 | `category=linear&symbol=BTCUSDT&interval=10&limit=100` |
|
||||||
|
| `/v5/market/funding/history` | 资金费率历史 | `category=linear&symbol=BTCUSDT&limit=200` |
|
||||||
|
| `/v5/market/open-interest` | 未平仓量 | `category=linear&symbol=BTCUSDT&intervalTime=5min` |
|
||||||
|
| `/v5/market/tickers` | 实时行情 | `category=linear&symbol=BTCUSDT` |
|
||||||
|
| `/v5/market/orderbook` | 深度数据 | `category=linear&symbol=BTCUSDT&limit=50` |
|
||||||
|
|
||||||
|
**资金费率数据格式**:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"retCode": 0,
|
||||||
|
"result": {
|
||||||
|
"list": [
|
||||||
|
{
|
||||||
|
"symbol": "BTCUSDT",
|
||||||
|
"fundingRate": "0.0001", // 资金费率(0.01%)
|
||||||
|
"fundingRateTimestamp": "1638316800000" // 结算时间
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**量化系统使用场景**:
|
||||||
|
- 资金费率三所对比(Binance + OKX + Bybit)→ 判断市场情绪极值
|
||||||
|
- 未平仓量趋势 → 判断资金流入/流出
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 三、期权数据源
|
||||||
|
|
||||||
|
### 3.1 Deribit
|
||||||
|
|
||||||
|
Deribit 是全球最大的加密货币期权交易所,BTC/ETH 期权市场份额超过 90%,是期权数据的权威来源。
|
||||||
|
|
||||||
|
**基础 URL**:`https://www.deribit.com/api/v2`
|
||||||
|
|
||||||
|
**核心端点**:
|
||||||
|
|
||||||
|
| 端点 | 说明 | 关键参数 |
|
||||||
|
|------|------|---------|
|
||||||
|
| `/public/get_instruments` | 获取所有期权合约 | `currency=BTC&kind=option&expired=false` |
|
||||||
|
| `/public/get_book_summary_by_currency` | 期权汇总数据 | `currency=BTC&kind=option` |
|
||||||
|
| `/public/get_index_price` | 指数价格 | `index_name=btc_usd` |
|
||||||
|
| `/public/get_volatility_index_data` | 波动率指数(DVOL)| `currency=BTC&resolution=60` |
|
||||||
|
| `/public/ticker` | 单个合约行情 | `instrument_name=BTC-28MAR26-100000-C` |
|
||||||
|
|
||||||
|
**期权合约命名规则**:
|
||||||
|
```
|
||||||
|
BTC-28MAR26-100000-C
|
||||||
|
│ │ │ └── C = Call(看涨),P = Put(看跌)
|
||||||
|
│ │ └── 行权价(100000 USDT)
|
||||||
|
│ └── 到期日(2026年3月28日)
|
||||||
|
└── 标的资产
|
||||||
|
```
|
||||||
|
|
||||||
|
**DVOL(Deribit 波动率指数)数据格式**:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"result": {
|
||||||
|
"data": [
|
||||||
|
[1638316800000, 75.5], // [时间戳, DVOL 值]
|
||||||
|
[1638316860000, 76.2],
|
||||||
|
...
|
||||||
|
],
|
||||||
|
"continuation": null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**关键期权指标说明**:
|
||||||
|
|
||||||
|
| 指标 | 说明 | 量化意义 |
|
||||||
|
|------|------|---------|
|
||||||
|
| IV(隐含波动率)| 市场对未来波动的预期 | IV > 80% → 市场恐慌,可能见底 |
|
||||||
|
| DVOL | Deribit 波动率指数(类似 VIX)| DVOL 急升 → 恐慌情绪 |
|
||||||
|
| Put/Call Ratio | 看跌/看涨期权比率 | > 1.2 → 市场偏空 |
|
||||||
|
| 最大痛点 | 期权到期时最多期权失效的价格 | 到期日前价格有向最大痛点靠拢的倾向 |
|
||||||
|
| GEX(Gamma 敞口)| 做市商 Gamma 对冲方向 | 正 GEX → 价格稳定,负 GEX → 价格波动加剧 |
|
||||||
|
|
||||||
|
**Go 接入示例**(获取 BTC DVOL):
|
||||||
|
|
||||||
|
```go
|
||||||
|
package deribit
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
const BaseURL = "https://www.deribit.com/api/v2"
|
||||||
|
|
||||||
|
type DVOLData struct {
|
||||||
|
Timestamp int64 `json:"timestamp"`
|
||||||
|
Value float64 `json:"value"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetDVOL 获取 Deribit 波动率指数
|
||||||
|
func GetDVOL(currency string, resolution int) ([]DVOLData, error) {
|
||||||
|
url := fmt.Sprintf("%s/public/get_volatility_index_data?currency=%s&resolution=%d",
|
||||||
|
BaseURL, currency, resolution)
|
||||||
|
|
||||||
|
resp, err := http.Get(url)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
var result struct {
|
||||||
|
Result struct {
|
||||||
|
Data [][]float64 `json:"data"`
|
||||||
|
} `json:"result"`
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
dvol := make([]DVOLData, len(result.Result.Data))
|
||||||
|
for i, d := range result.Result.Data {
|
||||||
|
dvol[i] = DVOLData{
|
||||||
|
Timestamp: int64(d[0]),
|
||||||
|
Value: d[1],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dvol, nil
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 四、链上数据源
|
||||||
|
|
||||||
|
### 4.1 Glassnode
|
||||||
|
|
||||||
|
Glassnode 是最权威的链上数据平台,提供 MVRV、SOPR、NVT、持仓分布等核心链上指标。
|
||||||
|
|
||||||
|
**基础 URL**:`https://api.glassnode.com/v1`
|
||||||
|
|
||||||
|
**认证方式**:API Key 通过 URL 参数传入(`?api_key=YOUR_KEY`)
|
||||||
|
|
||||||
|
**核心端点**:
|
||||||
|
|
||||||
|
| 端点 | 指标 | 说明 |
|
||||||
|
|------|------|------|
|
||||||
|
| `/metrics/market/mvrv_z_score` | MVRV Z-Score | 市值/实现价值 Z 分数,判断市场高低估 |
|
||||||
|
| `/metrics/indicators/sopr` | SOPR | 已花费输出利润率,判断持仓者盈亏 |
|
||||||
|
| `/metrics/indicators/nvt` | NVT | 网络价值/交易量,判断网络估值 |
|
||||||
|
| `/metrics/distribution/balance_exchanges` | 交易所余额 | 交易所 BTC 存量(减少=看涨)|
|
||||||
|
| `/metrics/distribution/balance_1pct_holders` | 巨鲸持仓 | 前 1% 地址持仓量 |
|
||||||
|
| `/metrics/mining/difficulty_latest` | 挖矿难度 | 最新挖矿难度 |
|
||||||
|
| `/metrics/market/price_usd_close` | 价格 | 日收盘价 |
|
||||||
|
|
||||||
|
**通用请求参数**:
|
||||||
|
|
||||||
|
```
|
||||||
|
?a=BTC # 资产(BTC/ETH)
|
||||||
|
&i=24h # 时间间隔(1h/24h/10m)
|
||||||
|
&s=1609459200 # 开始时间(Unix 时间戳)
|
||||||
|
&u=1640995200 # 结束时间(Unix 时间戳)
|
||||||
|
&api_key=YOUR_API_KEY
|
||||||
|
```
|
||||||
|
|
||||||
|
**MVRV Z-Score 数据格式**:
|
||||||
|
|
||||||
|
```json
|
||||||
|
[
|
||||||
|
{"t": 1638316800, "v": 2.45}, // t=Unix时间戳, v=MVRV Z-Score值
|
||||||
|
{"t": 1638403200, "v": 2.51},
|
||||||
|
...
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
**MVRV Z-Score 解读**:
|
||||||
|
|
||||||
|
| 数值范围 | 市场状态 | 操作建议 |
|
||||||
|
|---------|---------|---------|
|
||||||
|
| > 7 | 极度高估(历史顶部区域)| 减仓/清仓 |
|
||||||
|
| 3 ~ 7 | 高估 | 谨慎持仓 |
|
||||||
|
| 0 ~ 3 | 合理估值 | 正常操作 |
|
||||||
|
| -1 ~ 0 | 低估 | 考虑加仓 |
|
||||||
|
| < -1 | 极度低估(历史底部区域)| 积极建仓 |
|
||||||
|
|
||||||
|
**免费层限制**:仅提供 BTC/ETH 的部分指标,日级别数据。付费层提供小时级数据和全部指标。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 4.2 CoinGlass
|
||||||
|
|
||||||
|
CoinGlass 专注于衍生品市场数据,提供资金费率、清算数据、未平仓量等核心指标。
|
||||||
|
|
||||||
|
**基础 URL**:`https://open-api.coinglass.com/public/v2`
|
||||||
|
|
||||||
|
**认证方式**:`coinglassSecret: YOUR_API_KEY`(HTTP Header)
|
||||||
|
|
||||||
|
**核心端点**:
|
||||||
|
|
||||||
|
| 端点 | 说明 | 关键参数 |
|
||||||
|
|------|------|---------|
|
||||||
|
| `/indicator/funding_rates` | 多所资金费率对比 | `symbol=BTC` |
|
||||||
|
| `/indicator/open_interest` | 未平仓量(多所汇总)| `symbol=BTC&interval=h4` |
|
||||||
|
| `/indicator/liquidation` | 清算数据 | `symbol=BTC&interval=1h` |
|
||||||
|
| `/indicator/long_short_ratio` | 多空比 | `symbol=BTC&interval=1h` |
|
||||||
|
| `/indicator/taker_buy_sell_ratio` | 主动买卖比 | `symbol=BTC&interval=1h` |
|
||||||
|
|
||||||
|
**资金费率数据格式**:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"code": "0",
|
||||||
|
"data": [
|
||||||
|
{
|
||||||
|
"exchangeName": "Binance",
|
||||||
|
"symbol": "BTCUSDT",
|
||||||
|
"fundingRate": 0.0001, // 当前资金费率
|
||||||
|
"nextFundingTime": 1638316800000,
|
||||||
|
"predictedFundingRate": 0.00015 // 预测下期资金费率
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"exchangeName": "OKX",
|
||||||
|
"symbol": "BTC-USDT-SWAP",
|
||||||
|
"fundingRate": -0.0002,
|
||||||
|
...
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**资金费率解读**:
|
||||||
|
|
||||||
|
| 费率范围 | 市场状态 | 含义 |
|
||||||
|
|---------|---------|------|
|
||||||
|
| > +0.1% | 极度多头 | 多头支付空头,市场过热 |
|
||||||
|
| +0.01% ~ +0.1% | 正常多头 | 正常偏多市场 |
|
||||||
|
| -0.01% ~ +0.01% | 中性 | 市场平衡 |
|
||||||
|
| -0.01% ~ -0.1% | 正常空头 | 正常偏空市场 |
|
||||||
|
| < -0.1% | 极度空头 | 空头支付多头,市场恐慌 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 五、DeFi 数据源
|
||||||
|
|
||||||
|
### 5.1 DeFiLlama
|
||||||
|
|
||||||
|
DeFiLlama 是最权威的 DeFi 数据聚合平台,提供免费的 TVL、协议、稳定币数据,无需 API Key。
|
||||||
|
|
||||||
|
**基础 URL**:`https://api.llama.fi`
|
||||||
|
|
||||||
|
**核心端点**:
|
||||||
|
|
||||||
|
| 端点 | 说明 | 返回内容 |
|
||||||
|
|------|------|---------|
|
||||||
|
| `/protocols` | 所有协议列表 | 协议名称、TVL、链、类别 |
|
||||||
|
| `/tvl/{protocol}` | 单协议 TVL 历史 | 日级别 TVL 历史数据 |
|
||||||
|
| `/charts` | 全链 TVL 历史 | 所有链的 TVL 汇总 |
|
||||||
|
| `/chains` | 各链 TVL | 按链分类的 TVL |
|
||||||
|
| `https://stablecoins.llama.fi/stablecoins` | 稳定币数据 | 各稳定币市值、流通量 |
|
||||||
|
|
||||||
|
**全链 TVL 数据格式**:
|
||||||
|
|
||||||
|
```json
|
||||||
|
[
|
||||||
|
{"date": 1638316800, "totalLiquidityUSD": 270000000000}, // 2700 亿美元 TVL
|
||||||
|
{"date": 1638403200, "totalLiquidityUSD": 275000000000},
|
||||||
|
...
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
**量化系统使用场景**:
|
||||||
|
- DeFi TVL 趋势 → 判断 DeFi 生态资金流入/流出
|
||||||
|
- 稳定币市值变化 → 判断场外资金入场意愿
|
||||||
|
- 特定协议 TVL(如 Aave、Uniswap)→ 判断 DeFi 活跃度
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 5.2 The Graph
|
||||||
|
|
||||||
|
The Graph 是去中心化的区块链数据索引协议,通过 GraphQL 查询链上历史数据,适合获取 DEX 交易量、流动性等精细数据。
|
||||||
|
|
||||||
|
**基础 URL**:`https://api.thegraph.com/subgraphs/name/`
|
||||||
|
|
||||||
|
**常用子图**:
|
||||||
|
|
||||||
|
| 子图 | 地址 | 数据内容 |
|
||||||
|
|------|------|---------|
|
||||||
|
| Uniswap V3 | `uniswap/uniswap-v3` | 交易量、流动性、价格 |
|
||||||
|
| Aave V3 | `aave/protocol-v3` | 借贷量、利率、清算 |
|
||||||
|
| Curve | `curvefi/curve-mainnet` | 稳定币交换量 |
|
||||||
|
| GMX | `gmx-io/gmx-stats` | 永续合约交易量 |
|
||||||
|
|
||||||
|
**GraphQL 查询示例**(Uniswap V3 BTC/USDC 交易量):
|
||||||
|
|
||||||
|
```graphql
|
||||||
|
{
|
||||||
|
pool(id: "0x99ac8ca7087fa4a2a1fb6357269965a2014abc35") {
|
||||||
|
token0 { symbol }
|
||||||
|
token1 { symbol }
|
||||||
|
volumeUSD
|
||||||
|
txCount
|
||||||
|
totalValueLockedUSD
|
||||||
|
poolDayData(first: 7, orderBy: date, orderDirection: desc) {
|
||||||
|
date
|
||||||
|
volumeUSD
|
||||||
|
tvlUSD
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Go 接入示例**:
|
||||||
|
|
||||||
|
```go
|
||||||
|
package thegraph
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/json"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
const UniswapV3URL = "https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3"
|
||||||
|
|
||||||
|
func QueryGraphQL(subgraphURL, query string) (map[string]interface{}, error) {
|
||||||
|
body := map[string]string{"query": query}
|
||||||
|
bodyBytes, _ := json.Marshal(body)
|
||||||
|
|
||||||
|
resp, err := http.Post(subgraphURL, "application/json", bytes.NewBuffer(bodyBytes))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
var result map[string]interface{}
|
||||||
|
json.NewDecoder(resp.Body).Decode(&result)
|
||||||
|
return result, nil
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 六、综合数据源
|
||||||
|
|
||||||
|
### 6.1 CoinMarketCap(CMC)
|
||||||
|
|
||||||
|
CMC 提供最权威的市值排名、供应量、价格数据,免费层每天 333 次请求。
|
||||||
|
|
||||||
|
**基础 URL**:`https://pro-api.coinmarketcap.com/v1`
|
||||||
|
|
||||||
|
**认证方式**:`X-CMC_PRO_API_KEY: YOUR_API_KEY`(HTTP Header)
|
||||||
|
|
||||||
|
**核心端点**:
|
||||||
|
|
||||||
|
| 端点 | 说明 | 关键参数 |
|
||||||
|
|------|------|---------|
|
||||||
|
| `/cryptocurrency/listings/latest` | 最新市值排名 | `limit=100&convert=USD` |
|
||||||
|
| `/cryptocurrency/quotes/latest` | 指定币种最新报价 | `symbol=BTC,ETH,SOL` |
|
||||||
|
| `/global-metrics/quotes/latest` | 全球市场指标 | — |
|
||||||
|
| `/cryptocurrency/market-pairs/latest` | 交易对数据 | `symbol=BTC&limit=10` |
|
||||||
|
|
||||||
|
**全球市场指标数据格式**:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"total_market_cap": {"USD": 2500000000000}, // 总市值 2.5 万亿
|
||||||
|
"total_volume_24h": {"USD": 150000000000}, // 24h 成交量
|
||||||
|
"bitcoin_dominance": 52.5, // BTC 市占率
|
||||||
|
"ethereum_dominance": 17.2, // ETH 市占率
|
||||||
|
"active_cryptocurrencies": 23000,
|
||||||
|
"active_exchanges": 800
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**量化系统使用场景**:
|
||||||
|
- BTC 市占率变化 → 判断山寨季/BTC 季
|
||||||
|
- 全球市值趋势 → 宏观市场判断
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 七、宏观数据源
|
||||||
|
|
||||||
|
### 7.1 FRED(美联储经济数据)
|
||||||
|
|
||||||
|
FRED(Federal Reserve Economic Data)是美联储圣路易斯分行维护的宏观经济数据库,提供免费 API,覆盖利率、通胀、就业等核心宏观指标。
|
||||||
|
|
||||||
|
**基础 URL**:`https://api.stlouisfed.org/fred`
|
||||||
|
|
||||||
|
**认证方式**:`api_key=YOUR_API_KEY`(URL 参数,免费注册获取)
|
||||||
|
|
||||||
|
**核心数据系列**:
|
||||||
|
|
||||||
|
| Series ID | 指标名称 | 频率 | 量化意义 |
|
||||||
|
|-----------|---------|------|---------|
|
||||||
|
| `FEDFUNDS` | 联邦基金利率 | 月度 | 加息/降息周期判断 |
|
||||||
|
| `CPIAUCSL` | CPI(城市消费者)| 月度 | 通胀水平 |
|
||||||
|
| `UNRATE` | 失业率 | 月度 | 经济健康度 |
|
||||||
|
| `DGS10` | 10 年期美债收益率 | 日度 | 无风险利率基准 |
|
||||||
|
| `DGS2` | 2 年期美债收益率 | 日度 | 短期利率预期 |
|
||||||
|
| `T10Y2Y` | 10Y-2Y 利差(收益率曲线)| 日度 | 倒挂 = 衰退预警 |
|
||||||
|
| `M2SL` | M2 货币供应量 | 月度 | 流动性判断 |
|
||||||
|
| `DCOILWTICO` | WTI 原油价格 | 日度 | 大宗商品/通胀关联 |
|
||||||
|
| `DEXUSEU` | 美元/欧元汇率 | 日度 | 美元强弱 |
|
||||||
|
|
||||||
|
**数据获取示例**:
|
||||||
|
|
||||||
|
```
|
||||||
|
GET https://api.stlouisfed.org/fred/series/observations
|
||||||
|
?series_id=FEDFUNDS
|
||||||
|
&api_key=YOUR_API_KEY
|
||||||
|
&file_type=json
|
||||||
|
&observation_start=2024-01-01
|
||||||
|
&observation_end=2026-03-06
|
||||||
|
```
|
||||||
|
|
||||||
|
**响应格式**:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"observations": [
|
||||||
|
{"date": "2024-01-01", "value": "5.33"},
|
||||||
|
{"date": "2024-02-01", "value": "5.33"},
|
||||||
|
{"date": "2025-01-01", "value": "4.33"},
|
||||||
|
...
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**宏观指标对加密市场的影响**:
|
||||||
|
|
||||||
|
| 宏观事件 | 对 BTC 的典型影响 | 滞后时间 |
|
||||||
|
|---------|----------------|---------|
|
||||||
|
| 降息 | 利好(流动性宽松)| 1-3 个月 |
|
||||||
|
| 加息 | 利空(流动性收紧)| 1-3 个月 |
|
||||||
|
| CPI 超预期 | 利空(加息预期升温)| 即时 |
|
||||||
|
| 失业率上升 | 利空(经济衰退担忧)| 1-2 个月 |
|
||||||
|
| 收益率曲线倒挂 | 中期利空 | 6-18 个月 |
|
||||||
|
| M2 扩张 | 利好(流动性充裕)| 3-6 个月 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 八、数据源统一接口设计
|
||||||
|
|
||||||
|
### 8.1 DataSource 接口定义
|
||||||
|
|
||||||
|
```go
|
||||||
|
// internal/datasource/interface.go
|
||||||
|
|
||||||
|
package datasource
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"quant-system/pkg/models"
|
||||||
|
)
|
||||||
|
|
||||||
|
// DataSource 所有数据源必须实现的统一接口
|
||||||
|
type DataSource interface {
|
||||||
|
// Name 返回数据源名称
|
||||||
|
Name() string
|
||||||
|
|
||||||
|
// GetKlines 获取 K 线数据
|
||||||
|
GetKlines(ctx context.Context, symbol, interval string, limit int) ([]models.Kline, error)
|
||||||
|
|
||||||
|
// GetFundingRate 获取资金费率(仅合约交易所)
|
||||||
|
GetFundingRate(ctx context.Context, symbol string) (*models.FundingRate, error)
|
||||||
|
|
||||||
|
// GetOpenInterest 获取未平仓量(仅合约交易所)
|
||||||
|
GetOpenInterest(ctx context.Context, symbol string) (*models.OpenInterest, error)
|
||||||
|
|
||||||
|
// Ping 健康检查
|
||||||
|
Ping(ctx context.Context) error
|
||||||
|
|
||||||
|
// RateLimit 返回每分钟请求限制
|
||||||
|
RateLimit() int
|
||||||
|
}
|
||||||
|
|
||||||
|
// OnChainDataSource 链上数据源接口(Glassnode 等)
|
||||||
|
type OnChainDataSource interface {
|
||||||
|
Name() string
|
||||||
|
GetMVRV(ctx context.Context, asset string) ([]models.TimeSeriesPoint, error)
|
||||||
|
GetSOPR(ctx context.Context, asset string) ([]models.TimeSeriesPoint, error)
|
||||||
|
GetExchangeBalance(ctx context.Context, asset string) ([]models.TimeSeriesPoint, error)
|
||||||
|
Ping(ctx context.Context) error
|
||||||
|
}
|
||||||
|
|
||||||
|
// MacroDataSource 宏观数据源接口(FRED 等)
|
||||||
|
type MacroDataSource interface {
|
||||||
|
Name() string
|
||||||
|
GetSeries(ctx context.Context, seriesID string, start, end time.Time) ([]models.TimeSeriesPoint, error)
|
||||||
|
Ping(ctx context.Context) error
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 8.2 数据源管理器
|
||||||
|
|
||||||
|
```go
|
||||||
|
// internal/datasource/manager.go
|
||||||
|
|
||||||
|
package datasource
|
||||||
|
|
||||||
|
import "sync"
|
||||||
|
|
||||||
|
type Manager struct {
|
||||||
|
mu sync.RWMutex
|
||||||
|
cexSources map[string]DataSource
|
||||||
|
onChainSrcs map[string]OnChainDataSource
|
||||||
|
macroSrcs map[string]MacroDataSource
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewManager() *Manager {
|
||||||
|
return &Manager{
|
||||||
|
cexSources: make(map[string]DataSource),
|
||||||
|
onChainSrcs: make(map[string]OnChainDataSource),
|
||||||
|
macroSrcs: make(map[string]MacroDataSource),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Manager) RegisterCEX(source DataSource) {
|
||||||
|
m.mu.Lock()
|
||||||
|
defer m.mu.Unlock()
|
||||||
|
m.cexSources[source.Name()] = source
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetAggregatedKlines 从多个数据源获取 K 线并取平均(数据质量更高)
|
||||||
|
func (m *Manager) GetAggregatedKlines(symbol, interval string, limit int) ([]models.Kline, error) {
|
||||||
|
// 优先从 Binance 获取,失败时切换到 OKX
|
||||||
|
// 对比两个数据源的收盘价,差异超过 0.1% 时报警
|
||||||
|
...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 九、数据源状态监控
|
||||||
|
|
||||||
|
系统提供 `/api/v1/datasources` 接口,实时监控所有数据源状态:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"timestamp": "2026-03-06T10:10:00+08:00",
|
||||||
|
"sources": [
|
||||||
|
{
|
||||||
|
"name": "Binance",
|
||||||
|
"type": "cex",
|
||||||
|
"status": "online",
|
||||||
|
"latency_ms": 45,
|
||||||
|
"last_success": "2026-03-06T10:09:55+08:00",
|
||||||
|
"rate_limit": "1200/min",
|
||||||
|
"remaining": 1150
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Glassnode",
|
||||||
|
"type": "onchain",
|
||||||
|
"status": "online",
|
||||||
|
"latency_ms": 320,
|
||||||
|
"last_success": "2026-03-06T10:05:00+08:00",
|
||||||
|
"rate_limit": "10/min",
|
||||||
|
"remaining": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "FRED",
|
||||||
|
"type": "macro",
|
||||||
|
"status": "online",
|
||||||
|
"latency_ms": 180,
|
||||||
|
"last_success": "2026-03-06T09:00:00+08:00",
|
||||||
|
"rate_limit": "120/min",
|
||||||
|
"remaining": 119
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"summary": {
|
||||||
|
"total": 12,
|
||||||
|
"online": 11,
|
||||||
|
"offline": 1,
|
||||||
|
"degraded": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 参考资料
|
||||||
|
|
||||||
|
- [1] Binance API 文档:https://binance-docs.github.io/apidocs/futures/en/
|
||||||
|
- [2] OKX API 文档:https://www.okx.com/docs-v5/en/
|
||||||
|
- [3] Bybit API 文档:https://bybit-exchange.github.io/docs/v5/intro
|
||||||
|
- [4] Deribit API 文档:https://docs.deribit.com/
|
||||||
|
- [5] Glassnode API 文档:https://docs.glassnode.com/basic-api/api/
|
||||||
|
- [6] CoinGlass API 文档:https://coinglass.com/api
|
||||||
|
- [7] DeFiLlama API 文档:https://defillama.com/docs/api
|
||||||
|
- [8] The Graph 文档:https://thegraph.com/docs/en/
|
||||||
|
- [9] CoinMarketCap API 文档:https://coinmarketcap.com/api/documentation/v1/
|
||||||
|
- [10] FRED API 文档:https://fred.stlouisfed.org/docs/api/fred/
|
||||||
|
- [11] Go 迭代系统完整架构:`./Go量化知识迭代系统完整架构.md`
|
||||||
|
- [12] 链上数据分析指南:`../10_链上数据分析/链上数据分析指南.md`
|
||||||
375
20_Go迭代系统/部署运维指南.md
普通文件
375
20_Go迭代系统/部署运维指南.md
普通文件
@@ -0,0 +1,375 @@
|
|||||||
|
# Go 量化知识迭代系统部署运维指南
|
||||||
|
|
||||||
|
> 返回:[Go 迭代系统主文档](./Go量化知识迭代系统完整架构.md) | [数据源接入指南](./数据源接入完整指南.md)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 一、环境要求
|
||||||
|
|
||||||
|
| 组件 | 最低版本 | 推荐版本 | 说明 |
|
||||||
|
|------|---------|---------|------|
|
||||||
|
| Go | 1.21 | 1.23.5 | 已验证版本 |
|
||||||
|
| Air | 1.40 | v1.64.5 | 已验证版本 |
|
||||||
|
| Redis | 6.0 | 7.x | 缓存层 |
|
||||||
|
| MySQL | 8.0 | 8.0.x | 历史数据存储 |
|
||||||
|
| Docker | 20.x | 24.x | 容器化部署(可选)|
|
||||||
|
| Linux | Ubuntu 20.04 | Ubuntu 22.04 | 推荐操作系统 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 二、本地开发部署
|
||||||
|
|
||||||
|
### 2.1 克隆项目
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone ssh://git@git.hk.hao.work:2222/hao/quant-system.git
|
||||||
|
cd quant-system
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2.2 配置环境变量
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cp .env.example .env
|
||||||
|
vim .env
|
||||||
|
```
|
||||||
|
|
||||||
|
`.env` 文件内容示例:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 服务配置
|
||||||
|
PORT=9090
|
||||||
|
ENV=development
|
||||||
|
LOG_LEVEL=debug
|
||||||
|
|
||||||
|
# 数据库
|
||||||
|
MYSQL_DSN=root:password@tcp(localhost:3306)/quant_system?charset=utf8mb4&parseTime=True
|
||||||
|
REDIS_ADDR=localhost:6379
|
||||||
|
REDIS_PASSWORD=
|
||||||
|
|
||||||
|
# 数据源 API Keys
|
||||||
|
GLASSNODE_API_KEY=your_glassnode_api_key
|
||||||
|
COINGLASS_API_KEY=your_coinglass_api_key
|
||||||
|
CMC_API_KEY=your_cmc_api_key
|
||||||
|
FRED_API_KEY=your_fred_api_key
|
||||||
|
|
||||||
|
# 通知配置
|
||||||
|
FEISHU_WEBHOOK_URL=https://open.feishu.cn/open-apis/bot/v2/hook/xxx
|
||||||
|
TELEGRAM_BOT_TOKEN=your_telegram_bot_token
|
||||||
|
TELEGRAM_CHAT_ID=your_chat_id
|
||||||
|
|
||||||
|
# 知识库仓库路径
|
||||||
|
KNOWLEDGE_REPO_PATH=/home/ubuntu/quantKnowledge
|
||||||
|
KNOWLEDGE_REPO_REMOTE=ssh://git@git.hk.hao.work:2222/hao/quantKonwledge.git
|
||||||
|
|
||||||
|
# Binance(公开 API,无需 Key)
|
||||||
|
BINANCE_BASE_URL=https://api.binance.com
|
||||||
|
BINANCE_FUTURES_URL=https://fapi.binance.com
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2.3 启动开发模式(Air 热重载)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 安装依赖
|
||||||
|
go mod tidy
|
||||||
|
|
||||||
|
# 启动 Air 热重载
|
||||||
|
air
|
||||||
|
|
||||||
|
# 验证服务
|
||||||
|
curl http://localhost:9090/health
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2.4 数据库初始化
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 创建数据库
|
||||||
|
mysql -u root -p -e "CREATE DATABASE quant_system CHARACTER SET utf8mb4;"
|
||||||
|
|
||||||
|
# 运行迁移
|
||||||
|
./scripts/init_db.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 三、生产环境部署
|
||||||
|
|
||||||
|
### 3.1 编译二进制
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 编译 Linux amd64 二进制
|
||||||
|
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \
|
||||||
|
go build -ldflags="-w -s" -o quant-system ./cmd/server/main.go
|
||||||
|
|
||||||
|
# 查看文件大小(应约 7-10 MB)
|
||||||
|
ls -lh quant-system
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.2 Systemd 服务配置
|
||||||
|
|
||||||
|
```ini
|
||||||
|
# /etc/systemd/system/quant-system.service
|
||||||
|
|
||||||
|
[Unit]
|
||||||
|
Description=Quant Knowledge Iteration System
|
||||||
|
After=network.target mysql.service redis.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=ubuntu
|
||||||
|
WorkingDirectory=/opt/quant-system
|
||||||
|
EnvironmentFile=/opt/quant-system/.env
|
||||||
|
ExecStart=/opt/quant-system/quant-system
|
||||||
|
Restart=always
|
||||||
|
RestartSec=5
|
||||||
|
StandardOutput=journal
|
||||||
|
StandardError=journal
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 启用并启动服务
|
||||||
|
sudo systemctl enable quant-system
|
||||||
|
sudo systemctl start quant-system
|
||||||
|
|
||||||
|
# 查看状态
|
||||||
|
sudo systemctl status quant-system
|
||||||
|
|
||||||
|
# 查看日志
|
||||||
|
sudo journalctl -u quant-system -f
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.3 Docker Compose 部署
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# docker-compose.yml
|
||||||
|
|
||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
quant-system:
|
||||||
|
build: .
|
||||||
|
ports:
|
||||||
|
- "9090:9090"
|
||||||
|
environment:
|
||||||
|
- ENV=production
|
||||||
|
- PORT=9090
|
||||||
|
env_file:
|
||||||
|
- .env
|
||||||
|
depends_on:
|
||||||
|
- mysql
|
||||||
|
- redis
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- /home/ubuntu/quantKnowledge:/knowledge:rw # 挂载知识库目录
|
||||||
|
networks:
|
||||||
|
- quant-net
|
||||||
|
|
||||||
|
mysql:
|
||||||
|
image: mysql:8.0
|
||||||
|
environment:
|
||||||
|
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
|
||||||
|
MYSQL_DATABASE: quant_system
|
||||||
|
volumes:
|
||||||
|
- mysql_data:/var/lib/mysql
|
||||||
|
networks:
|
||||||
|
- quant-net
|
||||||
|
|
||||||
|
redis:
|
||||||
|
image: redis:7-alpine
|
||||||
|
volumes:
|
||||||
|
- redis_data:/data
|
||||||
|
networks:
|
||||||
|
- quant-net
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
mysql_data:
|
||||||
|
redis_data:
|
||||||
|
|
||||||
|
networks:
|
||||||
|
quant-net:
|
||||||
|
driver: bridge
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 启动所有服务
|
||||||
|
docker-compose up -d
|
||||||
|
|
||||||
|
# 查看日志
|
||||||
|
docker-compose logs -f quant-system
|
||||||
|
|
||||||
|
# 停止服务
|
||||||
|
docker-compose down
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 四、Makefile 命令参考
|
||||||
|
|
||||||
|
```makefile
|
||||||
|
.PHONY: dev build test clean update-knowledge status migrate docker-up
|
||||||
|
|
||||||
|
# 开发模式(Air 热重载)
|
||||||
|
dev:
|
||||||
|
air
|
||||||
|
|
||||||
|
# 编译
|
||||||
|
build:
|
||||||
|
CGO_ENABLED=0 go build -o ./tmp/quant-system ./cmd/server/main.go
|
||||||
|
|
||||||
|
# 运行测试
|
||||||
|
test:
|
||||||
|
go test ./... -v -cover
|
||||||
|
|
||||||
|
# 清理编译产物
|
||||||
|
clean:
|
||||||
|
rm -rf tmp/
|
||||||
|
|
||||||
|
# 触发知识库更新
|
||||||
|
update-knowledge:
|
||||||
|
curl -X POST http://localhost:9090/api/v1/knowledge/update
|
||||||
|
|
||||||
|
# 查看系统状态
|
||||||
|
status:
|
||||||
|
curl http://localhost:9090/api/v1/status | jq .
|
||||||
|
|
||||||
|
# 查看数据源状态
|
||||||
|
datasources:
|
||||||
|
curl http://localhost:9090/api/v1/datasources | jq .
|
||||||
|
|
||||||
|
# 数据库迁移
|
||||||
|
migrate:
|
||||||
|
./scripts/init_db.sh
|
||||||
|
|
||||||
|
# Docker 部署
|
||||||
|
docker-up:
|
||||||
|
docker-compose up -d
|
||||||
|
|
||||||
|
# Docker 停止
|
||||||
|
docker-down:
|
||||||
|
docker-compose down
|
||||||
|
|
||||||
|
# 查看日志
|
||||||
|
logs:
|
||||||
|
docker-compose logs -f quant-system
|
||||||
|
|
||||||
|
# 回填历史 K 线数据
|
||||||
|
backfill:
|
||||||
|
./scripts/backfill_klines.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 五、监控与告警
|
||||||
|
|
||||||
|
### 5.1 健康检查端点
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 基础健康检查
|
||||||
|
curl http://localhost:9090/health
|
||||||
|
# 返回:{"status":"ok","version":"0.1.1","uptime":"2h30m"}
|
||||||
|
|
||||||
|
# 详细状态
|
||||||
|
curl http://localhost:9090/api/v1/status
|
||||||
|
# 返回知识库状态、数据源状态、最后更新时间
|
||||||
|
|
||||||
|
# 数据源状态
|
||||||
|
curl http://localhost:9090/api/v1/datasources
|
||||||
|
# 返回所有数据源的在线状态和延迟
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5.2 日志配置
|
||||||
|
|
||||||
|
系统使用 **zap** 结构化日志,支持 JSON 格式输出,便于日志聚合分析:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"level": "info",
|
||||||
|
"ts": "2026-03-06T10:10:00.000+0800",
|
||||||
|
"caller": "signals/scorer.go:45",
|
||||||
|
"msg": "信号检测完成",
|
||||||
|
"symbol": "BTCUSDT",
|
||||||
|
"timeframe": "10m",
|
||||||
|
"score": 6,
|
||||||
|
"signal_type": "strong_long",
|
||||||
|
"ewo_value": 33.32,
|
||||||
|
"ewo_direction": "green"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5.3 关键告警规则
|
||||||
|
|
||||||
|
| 告警条件 | 级别 | 通知方式 |
|
||||||
|
|---------|------|---------|
|
||||||
|
| 服务宕机 | P0 | 飞书 + Telegram |
|
||||||
|
| 数据源离线 > 5 分钟 | P1 | 飞书 |
|
||||||
|
| 知识库更新失败 | P1 | 飞书 |
|
||||||
|
| 强信号触发(评分 ≥ 5)| P2 | 飞书 |
|
||||||
|
| API 响应延迟 > 5s | P2 | 日志记录 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 六、常见运维操作
|
||||||
|
|
||||||
|
### 6.1 手动触发知识库更新
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 更新所有模块
|
||||||
|
curl -X POST http://localhost:9090/api/v1/knowledge/update
|
||||||
|
|
||||||
|
# 更新指定模块
|
||||||
|
curl -X POST http://localhost:9090/api/v1/knowledge/update \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{"module": "12_信号系统优化", "symbol": "BTC"}'
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6.2 手动触发信号检测
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -X POST http://localhost:9090/api/v1/signals/detect \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{
|
||||||
|
"symbol": "BTCUSDT",
|
||||||
|
"timeframe": "10m",
|
||||||
|
"notify": true
|
||||||
|
}'
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6.3 清除缓存
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 清除 Redis 缓存(谨慎操作)
|
||||||
|
redis-cli FLUSHDB
|
||||||
|
|
||||||
|
# 或通过 API 清除指定缓存
|
||||||
|
curl -X DELETE http://localhost:9090/api/v1/cache/BTCUSDT
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6.4 回滚到上一版本
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 停止服务
|
||||||
|
sudo systemctl stop quant-system
|
||||||
|
|
||||||
|
# 回滚 Git
|
||||||
|
cd /opt/quant-system
|
||||||
|
git log --oneline -5 # 查看最近 5 次提交
|
||||||
|
git checkout <commit_hash>
|
||||||
|
|
||||||
|
# 重新编译
|
||||||
|
make build
|
||||||
|
|
||||||
|
# 重启服务
|
||||||
|
sudo systemctl start quant-system
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 参考资料
|
||||||
|
|
||||||
|
- [1] Go 官方文档:https://go.dev/doc/
|
||||||
|
- [2] Air 热重载配置:`./Air热重载配置与迭代工作流程.md`
|
||||||
|
- [3] 系统完整架构:`./Go量化知识迭代系统完整架构.md`
|
||||||
|
- [4] Docker Compose 文档:https://docs.docker.com/compose/
|
||||||
|
- [5] Systemd 服务管理:https://systemd.io/
|
||||||
在新工单中引用
屏蔽一个用户