# go_real_md **Repository Path**: eeyy123/go_real_md ## Basic Information - **Project Name**: go_real_md - **Description**: golang 接收CTP实时行情 - **Primary Language**: Go - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 20 - **Created**: 2021-06-23 - **Last Updated**: 2021-06-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # go_real_md ### 介绍 golang 接收CTP实时行情 ### 软件架构 1. 采用goctp接口订阅行情 2. 接收后合成分钟数据落入redis 3. 以md.{instrumentid}发布分钟数据,应用端可订阅后接收分钟数据。 4. 收盘后分钟数据保存至postgres数据库中 ### 分钟处理 * 只处理处于可交易状态的品种(会过滤掉开/收时的tick) * 处理actionDay * tradingday前一**交易日**为actionDay * actionDay下一**自然日**为actionDayNight * hour>=17 取 actionDay * hour<=3 取 actionDayNight * hour其他 取 tradingDay * 分钟Volume * preVol前一分钟最后tick的Volume * 当前分钟的Volume = tick.Volume-preVol ### 使用说明 #### 环境变量 变量|默认值|说明 -|-|- tradeFront|tcp://180.168.146.187:10130|ctp交易前置 quoteFront|tcp://180.168.146.187:10131|ctp行情前置 loginInfo|9999/008107/1/simnow_client_test/0000000000000000|登录配置格式 broker/investor/pwd/appid/authcode redisAddr|127.0.0.1:6379|redis库配置host:port pgMin|127.0.0.1:5432|分钟pg库配置 ### 生成镜像 ```bash # 先编码再做镜像(要用centos基础镜像) go build -o realmd docker build -t haifengat/go_real_md:`date +%Y%m%d` . # hub.docker.com docker push haifengat/go_real_md:`date +%Y%m%d` ``` ## 附 ### 行情订阅后收不到ontick响应 原因:交易所状态处理问题 处理:已修复 ### 接口断开重连,收不到login响应 原因:猜测为匿名函数被回收 解决:实际函数替代匿名函数 ### 收盘时间的tick仍被处理 双tick仍无法避免,即15:00:00时收到2两个tick。例:y2105 20201214 解决:3tick ### concurrent map read and map write 原因是mapMin变量用map[string]interface{}保存分钟数据,在lastInstMin读取时冲突 解决:改为Bar{} ### pq: duplicate key value violates unique constraint "future_min_datetime_instrument ticks改用bar.ticks处理 分钟是否更新用 > 判断,防止小于当前分钟的数据生成