4.6 KiB
4.6 KiB
QMT数据采集器
这是一个用于采集QMT交易客户端状态数据并存储到PostgreSQL数据库的服务。
功能特性
- ✅ 使用
github.com/robfig/cron/v3定时任务调度 - ✅ 每5秒(可配置)从HTTP接口采集数据
- ✅ 计算数据SHA256哈希值,检测数据变化
- ✅ 仅在数据变化时使用
GORMORM存储到数据库,避免重复数据 - ✅ 自动数据库表结构迁移
- ✅ 完整的日志记录
- ✅ 优雅退出支持
- ✅ 环境变量配置
数据结构
采集的数据包括:
- 资产信息: 账户资金、市值、盈亏等
- 订单信息: 所有委托订单详情
- 持仓信息: 当前持仓股票及盈亏
- 行情数据: 实时tick行情数据
数据库表结构
系统会自动创建以下数据表:
assets_snapshots- 资产快照表orders- 订单表positions- 持仓表tick_data- 行情数据表collection_logs- 采集日志表
详细的表结构请查看 scripts/schema.sql
快速开始
1. 安装依赖
go mod download
2. 配置环境变量
复制 .env.example 为 .env 并修改配置:
cp .env.example .env
编辑 .env 文件:
# 采集地址
COLLECTOR_URL=http://localhost:5000/status
# 数据库连接字符串 (修改为你的实际配置)
DATABASE_URL=postgres://user:password@localhost:5432/qmt_db?sslmode=disable
# 采集间隔(秒)
COLLECTION_INTERVAL=5
注意: 使用GORM后,程序会自动创建和迁移数据库表结构,无需手动执行SQL脚本。
3. 运行程序
go run cmd/main.go
或者设置环境变量后运行:
export COLLECTOR_URL=http://localhost:5000/status
export DATABASE_URL=postgres://user:password@localhost:5432/qmt_db?sslmode=disable
export COLLECTION_INTERVAL=5
go run cmd/main.go
4. 编译程序
go build -o collector cmd/main.go
配置说明
| 环境变量 | 说明 | 默认值 |
|---|---|---|
| COLLECTOR_URL | 数据采集地址 | http://localhost:5000/status |
| DATABASE_URL | PostgreSQL连接字符串 | postgres://user:password@localhost:5432/qmt_db?sslmode=disable |
| COLLECTION_INTERVAL | 采集间隔(秒) | 5 |
项目结构
collector/
├── cmd/
│ └── main.go # 主程序入口
├── collector/
│ └── collector.go # 数据采集器(HTTP请求、Hash计算)
├── models/
│ └── models.go # 数据模型定义
├── storage/
│ └── storage.go # 数据库存储模块
├── scripts/
│ ├── schema.sql # 数据库表结构SQL
│ ├── build.sh # 构建脚本
│ ├── deploy.sh # 部署脚本
│ └── update.sh # 更新脚本
├── exmple/
│ └── status.json # 数据样本
├── go.mod # Go模块文件
└── README.md # 说明文档
技术栈
- 定时任务: github.com/robfig/cron/v3 - 强大的cron表达式调度器
- ORM框架: GORM - Go语言优秀的ORM库
- 数据库驱动: gorm.io/driver/postgres - PostgreSQL驱动
- 数据库: PostgreSQL 9.6+
工作原理
- 定时调度: 使用cron调度器,根据配置的间隔定时执行采集任务
- 数据采集: 向配置的URL发起HTTP GET请求获取JSON数据
- Hash计算: 对获取的数据计算SHA256哈希值
- 变化检测: 对比当前哈希与上次哈希,判断数据是否变化
- 数据存储: 如果数据有变化,使用GORM事务将数据保存到PostgreSQL数据库
- 自动迁移: 启动时自动检查并创建/更新数据库表结构
- 日志记录: 每次采集都记录日志,包括hash值和是否变化
错误处理
- HTTP请求失败会记录错误日志并继续下一次采集
- 数据库连接失败会导致程序退出
- 数据存储失败会记录错误但不会中断程序
注意事项
- 确保PostgreSQL数据库已正确配置并可访问
- 使用GORM后无需手动执行SQL脚本,程序启动时会自动创建和迁移表结构
- 建议在生产环境使用更安全的数据库连接方式
- 可以根据需要调整采集间隔,但不建议设置过小
- GORM会自动管理索引和表结构变更
开发
添加新功能
- 在
models/models.go中添加数据模型 - 在
storage/storage.go中实现数据库操作 - 在
collector/collector.go中扩展采集逻辑 - 在
cmd/main.go中集成新功能
测试
可以使用 exmple/status.json 中的样本数据进行测试。
许可证
MIT License