1 Star 0 Fork 14

zhuzhenping / go_real_md

forked from 海风 / go_real_md 
加入 Gitee
与超过 1000 万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README.md

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 库配置

生成镜像

make docker

redis 容器

docker-compose.yml

version: '3.7'
services:
    # 启动: docker-compose --compatibility up -d
    realmd:
        image: haifengat/go_real_md:20220730
        container_name: realmd
        restart: on-failure:3
        environment:
            - 'TZ=Asia/Shanghai'
            - 'redisAddr=redis:6379'
            - 'tradeFront=tcp://180.168.146.187:10101'
            - 'quoteFront=tcp://180.168.146.187:10111'
            - 'loginInfo=008105/1/9999/simnow_client_test/0000000000000000'
            - 'pgMin=postgresql://postgres:12345@pg_real:5432/postgres?sslmode=disable'
            # 订阅合约列表 p1,p2... 默认订阅所有合约
            # - "products="
        deploy:
            resources:
                limits:
                    cpus: '1'
                    memory: 2G
                reservations:
                    memory: 200M
        depends_on:
            - redis
            - pg_real
    # 遇到the database system is starting up错误, 配置数据文件下的postgres.conf,hot_standby=on
    pg_real:
        image: postgres:12-alpine
        container_name: pg_real
        restart: on-failure:3
        environment:
            TZ: 'Asia/Shanghai'
            POSTGRES_PASSWORD: '12345'
        volumes:
            - ./pg_data:/var/lib/postgresql/data
    redis:
        image: redis:6.0.8-alpine3.12
        container_name: redis
        restart: on-failure:3
        environment:
            - TZ=Asia/Shanghai

内容查看

# 进入 docker redis cli
docker exec -it ${redis_docker} redis-cli
# 合约列表
> KEYS *
# 查看存储的行情
> LRANGE ${合约} 0 -1
# 查看存储的交易日
> HGET tradingday curday

postgres

导入导出

# 数据导出
docker exec -it pg容器 pg_dump -U postgres |gzip > ./`date +%Y%m%d`.sql.gz
# 数据导入
gzip -dc ./`date +%Y%m%d`.sql.gz | docker exec -i pg容器 psql -U postgres -d 数据库

本地部署

make local broker/investor/password/appid/authcode="xx/xx/xx/xx/xx"
# 查看日志
docker logs -f go_real_md

行情订阅后收不到 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 处理 分钟是否更新用 > 判断,防止小于当前分钟的数据生成

简介

golang 接收CTP实时行情 展开 收起
Go
Apache-2.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Go
1
https://gitee.com/zhuzhenping/go_real_md.git
git@gitee.com:zhuzhenping/go_real_md.git
zhuzhenping
go_real_md
go_real_md
master

搜索帮助