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