概述

zenbot是一个数字币交易机器人控制台程序。和gekko(另外一篇来说说gekko)一样。都是强大的交易机器人程序。

简单来说就是能够通过使用交易策略来进行数字币交易。可以叫它脚本也可以叫它机器人。如果你没有交易所账号也没有关系,可以下载交易所数据来进行backtest或者直接使用策略进行paper trade。不过需要注意的是,不管是backtest还是paper trade,和真实的交易还是会有出入,例如,backtest会直接买到,而真实交易可不一定,会有操盘者进行干扰,不停的调整价格,让你无法在理想价格买到或卖出。

环境准备

首先是准备好运行环境。我使用的是Mac系统,Win系统请自行对应。

安装NodeJSGitMongoDB

然后下载zenbot的源代码并拷贝默认的配置

$ git clone https://github.com/DeviaVir/zenbot
$ cd zenbot
$ cp conf-sample.js conf.js

编辑配置

用你熟悉的文本编辑器打开conf.js文件,我最常用的是 vs-code,打开之后有几个模块需要关注的地方。

  • selector: 是'交易所名称.交易对'的形式,例如'binance.NULS-BTC',你也可以在控制台中输入命令来查看支持的selectors
$ ./zenbot list-selectors

middle

不过我建议你直接查看源码,因为直接列出的selectors非常的多。源码的位置就在这里。

middle

通过这个文件结构你可以看到所支持的市场都在这里,当然你也可以自己增加市场,根据zenbot的结构形式可以很容易的增加市场。

  • strategy:是'策略'的形式,例如'rsi',你也可以在控制台中输入命令来查看支持的策略
$ ./zenbot list-strategies

middle

这也是一个很长的列表,可以看到灰色的是策略名,如bollinger和cci_srsi,咖啡色的是说明,绿色的是参数名,可以在执行策略之前调整参数,不同的参数运行的结果也大相径庭。

当然,作为一个coder,我还是建议你直接看代码,因为确实太长了。

middle

这里看到自带支持的策略就有这么多,我们就暂不列举这些策略都是干啥的了(有空后面慢慢加入策略的解释)。

其他的配置项可以暂时不管了,我们暂时还不会进行实盘操作,但我们可以先来做做backtest。

下载数据

在做backtest之前,我们下载历史数据,当然作为Nuls的技术顾问,我们肯定是要下载Nuls的数据的,通过命令行输入指令,加上市场、交易对和要下载的历史天数。就能开始下载历史数据了。

$ ./zenbot.sh backfill binance.NULS-BTC -d 60

实例命令中的'backfill'就是下载历史数据的指令,'binance.NULS-BTC'这个前面提到的,就是'市场名称.交易对','-d'表示天数,60就是参数具体值,这里就是60天的意思,程序会启动开始从今天的这一刻算起的前60天开始下载数据。

需要注意的是,交易市场有时候会导致下载中断,这个时候你只需要接着那个天数下载即可,或者直接重新执行当前命令也可以,zenbot会自动跳过已经下载完成的部分。

开始Backtest

数据下载完成之后,我们就可以开始进行backtest了,就是使用策略在历史数据上进行操作,看是否盈利。

现在我们尝试使用第一个交易策略'bollinger',并使用默认设置来进行backtest,默认的初始资金是100个BTC(我真的有这么多就好了,😁)。

在命令行中直接输入指令即刻开始。

$ ./zenbot sim binance.NULS-BTC --days 60 --strategy bollinger

命令中的'sim'就是模拟的意思,'--days'是从现在这刻起的前多少天,这就是我们刚刚下了这么多的数据,'--strategy'就是使用的策略,我们用的是'bollinger',运行结果如下图。

middle

我们注意贯彻这几个结果值。

end balance: 374.10519393 (274.10%)
buy hold: 700.67590987 (600.67%)
vs. buy hold: -46.61%
163 trades over 62 days (avg 2.62 trades/day)
win/loss: 85/0
error rate: 0.00%
  • end balance:是结束的余额,还记得我们的初始余额是多少吗?对,100,这个策略让我们翻了接近4倍,现在是374多一点,这个结果还真是令人欣喜!
  • buy hold:是从第一天购买,然后不卖到结束的余额,我的天,居然是700多,翻了7倍,所以
  • vs. buy hold:我们是不如购买一直持有的,是负值。
  • 163 trades over 62 days (avg 2.62 trades/day):表示的是62天交易了163次,平均每天2.62次交易,算不算高频呀?
  • win/loss和error rate:是一致的,就是win/loss,我们可以看到这个策略,虽然赚得不多,但是没有让我们在中途亏过,每一次的趋势都判断正确,很稳健。

所以,这个策略好不好,调整参数怎么样,留给看官自己实践。接下来有人会说,这个控制台看起来太麻烦了,可以更直观的看到结果吗?答案是:可以的,模拟结束之后,会有一个结果文件被存储在了'simulations'文件夹中。

middle

这个'sim_result_...'的文件就是我们刚刚执行的结果,我们用浏览器打开看一下结果。

middle

哇哦,每一个进出场时间都画在了图表上,图标可以放大缩写,可以很直观的看到是如何操作的。

注意

backtest只是验证你策略思路的一个方式,和真实的操作还是有很多细节上的不同,有可能你的backtest大赚,但是真实操作赔钱的情况,所以你一定要每隔一段时间盯着你的机器人,或者是使用一些手段来保证你不会亏太多。还好的是,zenbot有保护机制,如果亏出太多,是不允许卖掉的(例如刚刚那个截图中就有一个
'slippage protection: refusing to sell at 0.00004966 BTC, slippage of +5.67%')

不足的地方

zenbot这里的backtest不足的地方是没有用列表的形式列出buy和sell的时间,虽然有图,但是表格有时候也是很好的表现形式,当然有空的话也可以自己写代码加上去,gekko在这方面就具备完整的内容。

一点提示

我几乎把所有的默认策略都测试了一遍,除了1个策略的backtest表现惊人以外,其他的策略全部没有跑过buy hold,也就是买来持续持有的方式,所以这也从侧面表现出了NULS是一个值得长期持有的绩优币,从另外一个角度来说如果你想跑过buy hold,那还真的花一番功夫来研究呢。

我仿佛看到了深度学习

是的,策略里面有一个neural,是一个deep learning的方式,通过深度学习来预测走势,同时来进行买卖的策略,这也是一种人工智能的方法,使用的是convnet.js 这个js版本的深度学习库,具体的方式我们后面慢慢解读,但是不幸的是,这个策略的结果是导致我亏损了不少,在NULS扶摇直上的情况下居然能够使我亏损,看来路漫漫其修远。

最牛的策略是什么

我认为没有最牛的策略,每个策略都有在适合的土壤出现的时候,它可能是优于其他策略的,例如我们这个Nuls-BTC的交易对,就是zenbot自带的'trust_distrust'最厉害,可以达到如下恐怖的结果。

best1

可以看到我们翻了接近16倍,令人兴奋。但是这个策略用在其他交易对上,又不如其他的交易策略。

开始Paper Trade

既然我们已经backtest了,感觉还挺不错的,那我们开始直接Paper Trade吧,所谓Paper Trade就是用真实的大盘,但是用测试的账户,也就是数据是真的,账户是假的,我们来测试一段时间看能不能make me rich呢?

在命令行输入命令。

$ ./zenbot.sh trade --paper --conf ./conf.js

命令中'trade'即是进行交易的意思,'--paper'是使用测试账户,如果没有这个参数,则是真实账户,当然'--conf ./conf.js'的意思是使用conf.js中的配置,如果是真实交易,请在配置中相应的市场里面输入API-KEY和API-Secret。执行之后可以看到如下图,

middle

zenbot会加载参数,然后获取一些历史数据(这个数据周期可以设置),这里设置的是52个周期,每个周期30分钟,当数据准备完毕之后,即刻开始启动,zenbot不会一开始就买或者卖,当然,这取决于策略。

当启动之后,zenbot提供给了一个网页来观看结果,会在控制台的最后一行显示出地址,同时在控制台可以随时输入'l'来查看具体的结果,同时每一个检查周期都会在控制台中进行显示,也包括购买和卖出。

middle

截图中给出了网页地址为 http://0.0.0.0:20061,我们打开地址可以看到一些报告。

middle

这是我缩小以后的结果,正常的大小看起来更美观。可以看到有当前市场价格,你资本情况,策略利润,和购买不出之间的对比,每天交易的次数和趋势判断错误率,同时还有交易图,和交易的操作列表。这里需要注意的是“执行时间”,我认为这是zenbot比gekko好的地方,执行时间不是下单就能买到,还要看具体的量是否能够供给到,不过与真实还是有差距就是了。

可以看出来,我虽然使用了3个月翻17倍的交易策略,目前运行了1天多,还是处于亏损1.5%的情况,所以币市有风险,大家谨慎使用自动交易机器人。

总结

总的来说,zenbot是一个很好上手的交易机器人,当然对于完全没有一点点概念的小白来说,使用上还有很多优化的地方。但是对于一个热衷于做策略测试的人来说,已经非常了不起了,如果我有100个BTC,我一定拿2个BTC出来给作者打Call。

下一篇?

其实zenbot还有很多内容没有提到,例如我们如何用zenbot自己做一个策略,以及一些常用的策略介绍,同时可能还有一些深入的技术(程序)学习。还有gekko这个在github上Like最多的自动交易机器人系统。我有空就来更吧。