(一)

漫长暑假无事,借助botvs平台,在自动交易上下了一点功夫,也算完成了自己的策略,取得了一些收益,但回校后就遇到了瓶颈。最近我准备这个过程总结一下。

缘由:

1.总听到机器人交易,感觉很厉害。

2.程序可以实现无人值守,在虚拟货币这个变数很多的市场能反应更快。

3.自己操作损失严重啊。

4.在盯盘的时候发现一些套利的空间。

5.我也想趁机学一下编程。

6.暑假时间相当长。

于是我的虚拟货币自动化交易之路便开始了,这条路比自己想想的简单,也更困难。

(二)

初始的准备:

我开始把这个过程相当复杂了(其实本来就很复杂),借助于技术大牛Zero的平台,一切变得简单了。开始我准备了一下内容:

1.学习了公开课机器学习(还没学完)。

2.下载了Python学习的视频(其实没看)。

3.了解了botvs使用js编写策略后,看完了全套智能社的JS基础视频,很有用,回顾了编程的知识。但JS是网页开发用的,很多讲的也没用。

4.开始研读平台上共享的策略,如醍醐灌顶,收获很大。

5.了解了基本的自动化交易策略。

上面其实并没有多少内容,很快我便开始了自己编写策略的尝试。

(三)

botvs平台简介

本来想自己写一段,但zero发了了相关的帖子,索性拿来用。

本人开发的一个量化交易机器人创建平台,这类平台在国外一般都是收费的,但本平台完全免费。。for ever。

环境: 支持Windows, Mac, Linux, ARM平台的单片机如(RaspberryPI, CubieBoard)。

平台: 国内支持火币, BitVC, OKCoin, BTCChina, 貔貅, 中国比特币, 比特币交易网, BTC100. 国外支持BTC-E, Bitstamp, Bitfinex三大平台。

特点: 简单, 实时, 分布式, 可视化, 高度定制, 灵活, 可在线回测, 有文档 ...

共享: 每个人都可以共享策略或者复制别人共享的策略,这个不多说了,上面有已经公开的几十个策略,有高频做市的,有做趋势的,如果你是程序员,可以自己写策略,提供完美的在线回测机制趋势交易的海龟交易系统, 均线, MACD之类的, 高频的网格,做市,应有尽有下大单的冰山下单,买入卖入,可以在十个平台通用.

提供完备的API函数, 可以一分钟内就上手写策略, 希望技术宅们喜欢。

网址: www.botvs.com

后话: 你要是土豪或者感觉我的劳动让你受益了. 可以赞助BTC:1H5VD3howBTN4b81GJWDf5yzTpbyhCz8zF

(四)

Botvs平台API简介:

平台的API文档已经有全面的介绍,本文主要写一点自己的理解。

交易所常量,exchange,默认的主交易所,如果添加了多个交易所exchange也等同于exchanges[0]。

record的数据结构即是K线,通过GetRecords()返回,周期在添加策略时选定。默认的长度为60(?),records.length-1为最近的一根K线。Trade也类似。

Depth市场深度,由GetDepth()函数返回。Asks为卖单数组,Asks【0】为卖一单。Bids为买单数组,Bids[0]为买一单。其中Asks和原来的版本不同。这个曾经给我带来了极大的困惑,使我的结果在另一台电脑上运行处的结果不同。

另外,当调用交易所函数时,一定要做好重试,否则由于网络错误会直接导致程序中断。常见的重试方法:

function GetOrders() {

var orders = null;

while (!(orders = exchange.GetOrders())) {

Sleep(1000);

}

return orders;

}

这样相当于重新写了GetOrders()方法,相当于exchange.GetOrders()。即使一次网络失败,还会循环重试直至成功。

多个交易所时如:

function GetTicker(e) {

if (typeof(e) == 'undefined') {

e = exchange;

}

var ticker;

while (!(ticker = e.GetTicker())) {

Sleep(1000);

}

return ticker;

}

参数e即为所需交易所。

就算你做好了重试,但会发生API网络连接错误,尤其是交易高峰期,常常会卡的几分钟API无法使用。没有任何办法。火币,OKcoin均会出现网络连接错误,貌似火币更甚,最近才有所改善。

本来想写多一点,但想想没必要,只要认真研究Zero大神编写的模板,会很快掌握编写的技巧,大神的程序没有一点多余,搞清楚每一行的意义对我的启发很大。关键还是采取什么策略。

Ps:上面两个代码例子来自Zero。

(五)

起步时的顺风顺水。

在漫长暑假的间隙,每天看看js教学视频,注释代码,构思自己的策略,很快我就把自己的初步策略写了出来,再改了无数低级Bug之后,策略终于可以运行了,看着火币的委单按自己的想法买入卖出,感觉无比奇妙。

更奇妙的是,这个短线策略的盈利能力令人惊讶。我的初始资金只有200块(为什么是这个数,以后再表),只能买七八个莱特币,在接下来的20天里,加上火币现货杠杆,净资金按下图增长:

结果相当不错,资金回撤很小,日均收益超过我预定的日5%(现在想想,目标太夸张了)。我每天看着净资产不断上升,非常爽快,按照这样的收益复利增长下去,难道过不了多久,我就要升职加薪,当上......走向人生巅峰了吗?

回过头来理性的看待这个增长期,出策略本身有效外,还有以下原因:

1、火币现货杠杆放大了收益。

2、莱特触底反弹,想亏损都难。

3、行情波动较大,适合我的策略。

4、等等.....

(六)

误入歧途

策略前20天的运行顺风顺水,我也不断看盘,总结结果,在一个Excel表格里记下每天净资金,最低值,当天盘面的基本信息。并且为了让策略更迅速的进场和离场,在此期间又加了两个参数。然而,恶果逐渐出现,每天早上醒来看看收益开始出现负数,并且接下来的十天内,基本没有一天盈利,而行情有没有出现暴跌。当时的我百思不得其解,常理说,经过这么多天的优化,结果应该更好才对啊,到底出了什么问题?

假期将要结束,网络也时断时续,我就更没心情研究了。9月8号回到学校,问题仍然没有解决,接下来的时间,不论涨跌,亏损依旧。直到净资产接近450。每天的记录也不做了。

这种情况直到十月份才开始逆转。

(七)

迷途知返

长时间的不盈利让我十分郁闷,一切安顿下来之后我开始反思,同时也在不断学习。我发现可能是我策略中限定条件加的过多的原因,一个好的策略不需要太多的参数,于是我又重新回到了最初策略的改进,删掉了一个反映短期内趋势的参数,然后又开始稳定的盈利,如此简单。

接下来的日子我更加专注,特别是十一假期。每天24小时开着电脑,12点睡觉,早上起来看看挣了多少,最多的一夜(凌晨到早上)增加了130块。日子过得很开心。但是笔记本天天开着也不是事,噪音越来越大,因而我又在淘宝花了700块买了个美国电子垃圾Motion C5,CPU是古董级,但好在功耗低,实际使用,没有声音,发热也不明显,已经连续开机十天左右,没有任何问题。

很快前期的亏损回来了,并且净资产以及折合莱特币个数都在稳定增加。

下图是总资金增长曲线(有1260多的借贷):

下图是总资金折合莱特币的数量(统计的时间更短些):


其中最可心的还是10月14号莱特币的爆拉,策略竟然完全跟上了,因为我发现莱特币总是Okcoin领涨或领跌,因而根据Okcoin的价格加了一个火币限价条件,以现在的想法看,是没有必要的,但在这个特殊的行情下恰恰发挥了作用。

另外,币数的增加说明了策略跑过了大盘,当我最终决定离开莱特币时,已经可以操作120多了(有借贷),这和我一开始只能买8个莱特币时今非昔比。

(八)

峰回路转

最开始接触虚拟货币时,我关注的自然是比特币,后来我又喜欢上了莱特币,并且再也没有交易过比特币,直到几天前。交易莱特币自然是因为它的价格更低,波动也更大。但是莱特币的行情越来越看不懂,该涨不涨,该跌不跌,说是比特币的跟屁虫,但时不时的又来个爆拉证明自己,跟都跟不上。关键是莱特币被高度控盘,成交量萎缩的可怜,常常几分钟任何没有交易,这样不活跃的市场让人感觉不到希望,也不适合我的策略,资金增加的缓慢。再看看许久没注意的比特币,惊讶的发现交易如此活跃。立刻动了转战比特币的心思,说干就干,把策略的参数一改立即上阵,一次成功。

当时恰好在10月23号大跌之前的一段涨后缓跌的形势。结果十分好,资金的增长曲线平稳增加:


经历过莱特币的平淡,此时回到比特币真可谓峰回路转。后悔没早转啊!看来还是应该开放思路。等这个策略饱和时,我再分点钱给莱特币。

(九)

趋势与策略 收益与风险 回撤与杠杆

从最初编写策略时,我总觉得短期行情是存在趋势的,当行情下跌时,应该谨慎入场或不入场,相反的,应该更积极的入场。为此,我的策略还专门做了调整。后来我了解了市场有效性假说,该假说认为,股票市场是个有效市场,股票价格在统计上不具有规律性,投资者无法根据历史价格预测其未来走势。根据此假说,如果虚拟货币交易市场是有效的话,我的策略恰恰犯了想要预测市场的错误。因而后来我把策略中反映趋势的部分删除了。

那么,比特币市场是否是有效的呢?我编写并共享了一个回测的策略,可以在www.botvs.com策略广场中找到。具体是:如果5根K线中,出现4个或5个下跌,那么下一根是否更趋向于下跌,该策略将统计出下跌的频率。我回测了从10月23号到28号的5分钟K线,共出现244次这种情况,其中125次下跌,所占比例为51.2%。下图是下跌频率变动情况。可以想象,当回测的周期足够长时,概率应为0.5。

事实情况呢?我观察过很多次下跌时策略的情况,反映趋势的条件确实帮助了我减少了亏损。因为本质上来讲,这个条件减少了我的入场,它会降低我交易的风险,但同时也减少了我交易的收益。风险和收益如此相关,你不可能做到获得更高收益的同时降低风险。

10月23号,比特币出现了一次较长时间的下跌行情,整整跌了约10%,没有像样的反弹,这样的行情在现货市场做多只有鬼才能有正收益。前面说到,我的新策略获得了更高的收益同时也带来了更大的风险,在此次下跌中得到完美的验证啊。从收益曲线中可以看到,资金在不断减少,到最低点时亏损了136块。回撤为4%。这是前所未有的损失。但是在后半部分可以看到,收益迅速反弹,增加之快也是罕见,果然是高风险高收益啊。

在此轮下跌中,资金最大回撤不到5%,这意味着,如果不会出现更严重的下跌,我甚至可以开20倍杠杆以此来实现资金的最大利用,而我的杠杆一倍都不到,这实际上是一种浪费。基于此,我把火币中的一部分钱提了出来,剩余的钱开了现货两倍多的杠杆,并把这部分钱转到Okcoin上。到了Ok才发现它的借贷还没有重开,只有不加杠杆交易了,坑爹。

(十)

最后的总结

之所以在今天把这个系列终结了,是因为这是个很特殊的日子:我在火币和OKcoin的净资产加在一起超过了3000块(其中的1000块是最近5天挣得),这是我在比特币和莱特币投入的所有钱,今天终于实现了总体的盈利。

最初知道比特币是央视报道大跌到50美元时(?),然后很长时间就没注意,但不知道什么时候又关注上了,默默观察了很久,最终在火币上冲了1000块,在14年3月4日进行了第一笔交易,看看当时的价格真是不胜唏嘘,刚开始小心翼翼,赚点就走。期间陆续又冲了2000块,后来大家都很清楚,比特一直跌倒2200多,幸亏我在3900多时割了肉。

3月20号转战莱特币,当时恰逢火币上线莱特币不久,一度冲到128元,后来跌倒一百零几,我在那时入了场,想应该不会跌了吧。看看当时的价格再看现在,更让人感慨:怎么就跌了那么多?然后就简单了,一路买一路割肉,其中有一次反弹到八十多,差不多能把亏空补回来,但当时贪心没有抛掉。后来莱特币一路下跌几乎无反弹。

交易莱特币时,开始了借贷。在不断下跌时感觉翻本无望,索性就不动弹了,放假回家很长一段时间没有网,就更没心思去管,任由天命。最终不知道在那天还是爆仓了,用手机看看账户余额,仅剩200块,心情不忧不喜。只是感觉悬而未决的石头落了地。

虽然3000块几乎亏没了,但是心中不知哪来的底气,总觉得3000块还在。后来大娘家的网终于有人来修了,我把学校带回去的路由器安上,终于又回到网络的怀抱。我很早就动了自动化交易的念头,但苦于能力不够,一切都要从头学起。一天偶尔逛btc123导航网站时,发现btcrobot项目,但是看不太明白,旁边有个BotVs程序化交易,点进去看到网站的介绍,如同发现了宝藏,这不是就是我苦苦寻找的吗?门槛低,有范例,可通用。我立刻被这个网站完全吸引住了,一连几天都夜以继日的学习研究,并且不久就写出自己的代码。后面的故事就是虚拟货币自动化交易之路系列的开头了。再此十分感谢www.botvs.com这个网站,以及它的创立者Zeropool大神,给技术小白提供了一个如此好的平台。

从3000到200,再从200到3000,让我明白了一个道理:比特币的世界对于高手来说是游戏场,对于低手则是痛苦不堪的地狱。普通人如果想在这个市场上赚到钱,是在太难了,只有另辟蹊径,才有出路,自动化交易不失为一种好的选择。