安装编码工具cmake、go、gcc、 g++
#更新源
sudo apt-get update
sudo apt-get install gcc g++
##################安装cmake#########
sudo apt-get install cmake
创建一个程序目录
mkdir -p /ctp
#将mykline源码文件go_cds.tar.gz 、myctp源码文件myctpCompile.tar.gz 和 myctp.tar.gz运行程序都上传到这个目录中并解压
tar -zxvf go_cds.tar.gz
tar -zxvf myctpCompile.tar.gz
tar -zxvf myctp.tar.gz
##########安装golang并配置环境:##############
#下载
wget https://dl.google.com/go/go1.19.1.linux-amd64.tar.gz
#解压到/usr/local
sudo tar -C /usr/local -xzf go1.19.1.linux-amd64.tar.gz
#软连接
sudo ln -sf /usr/local/go/bin/* /usr/bin/
#进入配置文件配置go环境
sudo vim ~/.bashrc
#进入编辑界面后Shift+G跳转至尾行,按o新插入一行,输入:
export GOROOT=/usr/local/go #go安装目录
export PATH=$PATH:$GOROOT/bin
export PATH=$PATH:$GOPATH/bin
export GO111MODULE="auto"
export GOMODCACHE="/ctp/go_cds/pkg/mod"
export GOPATH="/ctp/go_cds" #go工作目录
#保存退出生效
wq
source ~/.bashrc
#查看配置
echo $GOPATH
#查看版本
go version
sudo apt purge cmake* #卸载cmake
查找go目录删除即可卸载
MySQL8,Redis7、MongoDB可以通过docker创建容器:
apt install docker.io #安装docker
拉取镜像
docker pull mongo:3.6.3
docker pull redis:7.0
docker pull mysql:8.0
#创建容器映射目录
cd /
mkdir -p redis/data
mkdir -p mysql
mkdir -p mongodb/data
docker run -id -p 6379:6379 --name=d_redis -v /redis/data:/data redis:7.0 --requirepass 123456
将 宿主机/redis/data 目录映射到redis容器data目录 --requirepass 123456 设置redis密码123456 可以运行 redis-cli -v 查看版本
#cd到新建的mysql目录下
cd mysql
docker run -id \
-p 3306:3306 \
--name=d_mysql \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:8.0
- 参数说明:
- **-p 3307:3306**:将容器的 3306 端口映射到宿主机的 3307 端口。
- **-v $PWD/conf:/etc/mysql/conf.d**:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。配置目录
- **-v $PWD/logs:/logs**:将主机当前目录下的 logs 目录挂载到容器的 /logs。日志目录
- **-v $PWD/data:/var/lib/mysql** :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。数据目录
- **-e MYSQL_ROOT_PASSWORD=123456:**初始化 root 用户的密码。
修改navicat工具远程登录密码:
#进入mysql容器
docker exec -it d_mysql /bin/bash
#登录mysql,密码就是刚刚设置的123456
mysql -uroot -p
####如果登录报错: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) 那么使用 mysql -h 127.0.0.1 -p 先登录一下生成mysqld.sock即可。或者退出到主机中重启该容器再进入试一下。或者在容器中随便cd 某个目录ls一下再登录。
#下面开始设置远程root密码
mysql> use mysql;
mysql> alter user 'root'@'%' identified with mysql_native_password by '123456';
mysql> flush privileges;
navicat远程连接mysql就成功了。
#连接mysql,导入数据库备份文件config.sql
#创建数据库本地映射目录
docker run -d -p 27017:27017 -v /mongodb/data:/data/db --name d_mongo mongo:3.6.3
进入MongoDB,创建用户名admin和密码123456:
#进入MongoDB容器
docker exec -it d_mongo /bin/bash
#下面开始设置密码
mongo
use admin
db.createUser({ user:'admin',pwd:'123456',roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] });
MongoDB Compass 连接管理工具下载:https://www.mongodb.com/try/download/compass
设置容器开机启动
docker update --restart=always d_mysql
docker update --restart=always d_redis
docker update --restart=always d_mongo
1.解压myctp.tar.gz
tar -zxvf myctp.tar.gz
cd myctp
修改数据库和ctp接口连接配置信息:
cd broker
#修改数据库连接信息,mysql,mongodb,redis
vim configDB.ini
#修改ctp连接信息(以下下是simnow测试账号的API)
vim configs.ini
MarketFront = tcp://180.168.146.187:10212
Trade Front = tcp://180.168.146.187:10202
BrokerID = 9999
UserID = 180972
Password = yesun@189.cn
AuthCode = 0000000000000000
AppID = simnow_client_test
解压后进入文件夹新建build文件夹,
cd myCTPcompile
mkdir build
进入build文件夹分别执行以下编译命令:
cd build
cmake ..
cmake --build .
将新生成的myctp文件夹下的myctp可执行文件替换原程序中文件即可。
#进入源码目录
cd go_cds/src/Kline_cds
#编译
go build -o mykline main.go kline.go mysql.go commonFile.go mongodb.go redis.go
将生成的可执行文件mykline替换到myctp程序目录下的mykline文件即可。
cd myctp
#添加可执行权限
chmod +x getContract myctp mykline updatekline yxctp yxdingshi yxkline dingshiGetcontract dingshiGetkline
需在目录 myctp 下执行
① 有效合约获取程序
./getContract
是否成功运行,请观察是否有报错并是否生成了最新的 broker/configIns.ini 文件 (看时间戳)
② myctp,CTP 接收程序,需要超级用户权限
./yxctp
是否成功运行,请查看 log/runctp9.log 文件的最后部分,是否有报错,如果没有 则运行成功 如果出现 error:while loading shared libraries: libthostmduserapi.se: cannot open shared object file: no such file or directory 可能系统缺少 c++运行库,执行命令:#apt-get install cmake gcc g++
③ 及时 k 线生成程序
./yxkline
是否成功运行,请查看 log/runkline0.log 文件的最后部分,是否有报错,如果没 有则运行成功
④ 历史 k 线更新程序
./updatekline
#先查看myctp、mykline进程是否运行成功
ps -ef | grep my
root@ubuntu18:/ctp/myctp# ps -ef | grep my
root 12688 1 10 10:25 pts/0 00:00:46 ./myctp
999 12900 12874 2 10:26 ? 00:00:08 mysqld
root 13356 1 96 10:33 pts/0 00:00:04 ./mykline
root 13460 1537 0 10:33 pts/0 00:00:00 grep --color=auto my
#登录redis查看是否实时收到数据
docker exec -it d_redis /bin/bash #进入redis容器
redis-cli #登录
127.0.0.1:6379> auth 123456
127.0.0.1:6379> keys * #查看所有key
#随便选择一个带real的key查看是否收到最新数据
127.0.0.1:6379> get FG01_real_1m
"FG401,20231023,1m,20231023103902,20231023104000,1595.00,1595.00,1595.00,1596.00,570,924540.00,679879,1102763738.00,20231023104000"
#登录MongoDB查看是否写入数据
docker exec -it d_mongo /bin/bash
root@0b8d4ed91b35:/# mongo
> show dbs; #查询数据库列表
admin 0.000GB
config 0.000GB
kline 0.003GB
local 0.000GB
> use kline #使用该数据库
switched to db kline
> show collections #查询该数据库所有表名
FG01
MA01
OI01
PF01
PK01
RM01
SF01
SM01
SR01
TA01
UR01
a11
bu01
bu12
c01
cs01
cs11
eb11
eg01
hc01
i01
j01
jd01
jm01
l01
m01
p01
pg10
pg11
rb01
ru01
sp01
ss11
v01
y01
> db.getCollection('FG01').find({"period": "1m"}).sort({'local_kline_time':-1}).limit(1); #查询某个表中最新一条数据
{ "_id" : ObjectId("6535e0feb62fce2df013ad2a"), "InstrumentID" : "FG401", "period" : "1m", "local_time" : "20231023105601", "local_kline_time" : "20231023105700", "kline_time" : "20231023105700", "TradingDay" : "20231023", "OpenPrice" : 1594, "HighestPrice" : 1594, "LowestPrice" : 1592, "ClosePrice" : 1593, "Volume" : NumberLong(2972), "Amounts" : 4817612, "AOSMA5" : 0, "AOSMA34" : 0, "ACSMA5" : 0, "AO" : 0, "AC" : 0 }
vim /etc/crontab
添加一下任务内容:
#myctp
30 19 * * * root cd /ctp/myctp && ./getContract >> /ctp/myctp/log/dingshigetContract1.log
42 20 * * * root cd /ctp/myctp && ./mykline >> /ctp/myctp/log/dingshigetKline2.log
00 19 * * * root cd /ctp/myctp && if pgrep -x "myctp" > /dev/null; then echo "Running"; else ./yxctp; fi
注意修改以上路径为实际myctp路径。
sudo service cron restart #重启服务
开启任务日志功能:
sudo vim /etc/rsyslog.d/50-default.conf
cron.* /var/log/cron.log #将cron前面的注释符去掉
sudo service rsyslog restart #重启rsyslog
sudo service cron restart #重启cron