erosiners / bitesla

个人原创:bitesla(比特斯拉)-基于微服务(go-micro)的代币量化交易框架

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Bitesla-比特斯拉

基于微服务(go-micro)的代币量化交易框架

  • 本项目旨在追逐以下3个目标:

    1. 提高个人技术开发能力
    2. 深化个人对金融行业的理解
    3. 通过简单的策略编辑,实现代币自动化交易
  • 愿景:
    为下一步实现股市量化交易框架做准备(毕竟总使用第三方公司的服务,并不那么自由)

  • 本项目注意事项:

    1. 暂不提供前端web展示页面,仅提供接口页面展示(swagger)
    2. 目前仅提供火币交易所的对接,其余交易所待本项目稳定后再添加
    3. 本项目还处在初期阶段,安全性、稳定性并无法绝对保证,使用者若急需,可根据需要自行完善
    4. 目前仅支持使用golang编辑策略

框架图与解析

ps: 本节所展示的结构图是根据本项目已实现内容绘制的。

全局框架

image
使用了go-micro微服务框架,划分了5大服务,每个服务拥有各自独立的职责。所有服务均使用一个全局的关系型数据库mysql,当前项目没有加入redis缓存。而终端用户,是通过restful api来访问的。 接着来解释下这五大服务的功能和细节。

service-api(对外接口服务)

该服务统一对外提供restful接口通信(后续会新增socket通信),就是说,微服务中的其余每个服务都是通过该服务对终端提供接口的。 该服务集成了gin框架,通过该框架来进行web端操作。 该服务在整个框架中的定位如下图所示: image

service-user(用户管理服务)

该服务主要负责项目全局账户管理,如:用户注册、用户登录、token令牌生成等。 该服务相比较要简单很多,这里就不画图介绍了。

service-exchange(交易所管理服务)

该服务主要是用来管理各大交易所,将不同交易所的接口统一,能够提供每个交易所的k线、订单、交易等内容。 目前只集成了火币交易所,火币交易所受制于国内政策,不能直接访问,需要通过代理来访问。 整体结构如下图所示: image

service-strategy(策略管理服务)

该服务很简单,就不画图了,主要是如下内容:

  • 该服务主要是用来管理策略的,编写、删除、查看策略等操作。
  • 注意,这是用来简单管理策略的,该服务并不提供执行策略功能。
  • 目前仅仅支持使用golang编写策略,策略编写好后,会被存放在全局数据库mysql中

service-trader(策略执行服务)

该服务主要是运行终端用户指定的策略,该模块比较复杂,涉及到策略执行队列,策略执行语言、编译等问题。 关于编辑策略的开发语言选择问题,我考虑了很久,首先参考的是Samaritan,它是使用JavaScript来编辑策略的, 对应的需要otto来支撑,这个库有一段时间没更新了,实在有点勉强,最终JavaScript我选择了放弃。 我另外一个备选方案是Python,因为在股票量化中是非常受欢迎的(计算库很强大),我本人用过一段时间这个语言,但分精力去想办法集成一种新的语言到本项目是比较消耗时间的,因此我决定暂时放弃该方案,待后续项目稳定后再来支持该语言。 最终选择了使用golang来编写策略,这个对于自己来说,要容易很多,毕竟先实现功能才是重要的。策略的编写与应用我会在后面章节中详细讲解。 该服务的整体结构如下图所示: image 就是说,用户发起的所有策略执行请求,都依次加入到队列,然后依次取出,并发执行策略。 当然,这个服务仅仅是完成了上述所说的基本内容,而策略中断,策略重复执行等问题暂时还未处理,后续将会逐步解决这些问题。

项目部署及使用

我是在macos上开发的,windows应该也类似,可参考下述内容,最终整个项目都是在docker容器中运行。

环境

需要预先安装以下内容: 1. golang 1.11.1 2. docker 18.09.0 3. docker-compose 1.23.2 后面版本号是我开发时使用的版本,具体安装过程请自行百度。

下载项目

在$GPATH/github.com/jason-wj/目录下执行如下命令:

git clone https://github.com/jason-wj/bitesla

主要目录介绍

.
|____bitesla-server //这是项目运行时候,mysql、redis、nsq等镜像的volume默认映射位置,我测试时候的所有数据均在这里,可直接使用
|____common //golang的通用内容
|____service //微服务,其中有不同的服务
| |____service-api
| |____service-exchange
| |____service-strategy
| |____service-trader
| |____service-user
|____bitesla-config.ini //用于配置当前项目处于哪个环境下,目前来说,哪个环境都一样
|____Makefile //统一编译各服务
|____docker-compose.yml //镜像部署目录
|____bitesla.sh //脚本,便捷操作编译运行项目或者清理项目

项目启动

在根目录下,执行:

./bitesla.sh docker start

备注: bitesla.sh脚本的其余命令的使用方式,可执行以下命令来参考:

./bitesla.sh help

image

项目效果展示

项目启动后,在浏览器中输入: http://localhost:8090/swagger/index.html 可以看到如下内容: image image image

项目接口基本使用

  1. 获取token 上述页面中,使用账户操作部分的邮箱注册接口或者邮箱登录接口生成token,如下图所示: image

  2. 将token复制到页面顶部的 image

  3. 然后就可以操作其余接口了

策略编写及运行

这个过程我新开了一个项目来单独描述,请参考这里:bitesla策略编写(golang版) 简单来说,就是在strategy.go文件中编辑好自己的策略后,将其中的内容复制出来,通过如下两个接口来实现运行:

  1. 先将策略添加到数据库
  2. 另一个接口执行策略 image

特别感谢

QuantBot

Samaritan

GoEx

About

个人原创:bitesla(比特斯拉)-基于微服务(go-micro)的代币量化交易框架


Languages

Language:Go 100.0%