CCXT

从零开始:邢不行数字货币量化实盘心得

2019-01-23  本文已影响0人  布丁__果冻

先介绍下本人投资情况:喜欢研究并实践个人投资,房产投资若干,几年股票/私募投资经历,接触并投资币圈一年左右。对编程基本是零基础,Python完全没有接触过。

出于好奇,2018年6月网上报名参加了邢大的《数字货币Python量化投资课程》。由于是零基础,刚开始的阶段学起来非常痛苦,工作一直很忙,再加上投入币圈的资金不断缩水的打击,断断续续学习有半年时间,仍然没有学完并完成“大作业”,学习进度几乎停滞。

直到有一天,邢大微信问我:“我来抄下水表哈,最近学习进度怎样?”

我回答:“惭愧惭愧,最近没怎么学”。

邢大说:“那之后还会学习的吧”  ,“我后面还会不定期来督促的哈,不要嫌我烦”。然后还给我拉了个私教小群,遇到问题可以随时提问。

我被深深地触动了,内心感到强烈的自责,这么好的学习平台还有什么借口可讲?真心感激邢大点醒了我,我的量化课程重新启动了。目标也很简单:就是完成“大作业”,实现数字货币量化实盘!

首先我又一次把邢大的网课重新学习了一遍,认真做笔记,反复推敲程序,密集学习了近一个月时间,终于把量化程序跑起来了,虽然可能还有很多问题,也没有什么收益,但每当钉钉给我发送信息的时候,我仍然收获了巨大的成就感。

对于Python零基础的我,真正实现了量化实盘,需要越过很多“障碍”,也总结了不少心得,当然对于高手来说都不是问题。作为初学者,我觉得有必要把整个实盘过程再回溯一遍,其中有些是邢大的课程中没有提及或困扰我较长时间的问题。

第一步:学习邢大的《数字货币Python量化投资课程》,这个课程值得反复去听。对于我这样一个几乎没接触过程序的人来说,邢大真的是很好的领路人。我整体听了两遍,用思维导图做了笔记,知道课程每个章节大致的内容,后面有问题又反复去听。

第二步:听完之后需要做的是趁热打铁,尽快安装软件,接触程序,熟悉程序。其实程序相关的就两个:Anaconda和PyCharm。

安装Anaconda要注意使用python3.6版本,不要使用官网上最新的版本(目前是python3.7)。我第二次安装就是直接下载官网的最新版本,发现有些程序总是莫名其妙的报错。邢大在网课上也提了要安装python3.6版本,不过刚开始的时候并没有注意到这点。而官网上又没有早期的版本链接,推荐这个网址:https://repo.continuum.io/archive/,里面有各种版本,我下载的是:Anaconda3-5.2.0-Windows-x86_64。注意直接下载网速 较慢,使用迅雷下载会飞快。

安装Pycharm可直接在官网下载,有新版本也有早期的版本,我下载的是2018.01.06版本。具体安装细节详见邢大的课程即可。

安装CCXT,它是集成了许多交易所api的第三方库。首先需要运行Anaconda Prompt,升级pip:python -m pip install --upgrade pip。然后在PyCharm中的setting->project interpreter安装CCXT

第三步:写“大作业”程序。这一步我用了半年时间才走到,说来惭愧。邢大坚持让学习者自己写完整的量化程序,现在回头来看,真的是用心良苦。你必须弄懂整个程序的体系和每个模块功能,以及其中的相互关系,有些代码可以直接复用课程里的代码,但还有一些需要自己摸索编写。当然绝大部分在星球中已经有了,需要你仔细寻找。写完“大作业”后需要标准答案仔细核对,仔细体会相同点与不同点。经历完这段历练,我体会到了一种经脉打通的感觉。

实现一个完整的数字货币量化程序架构包含以下几个模块:

1、import,这块主要参考第九课内容,由于邢大是把部分函数写在另外的程序中,而我考虑要把函数放到主程序一起,方便后续运行。所以要把相关的所有涉及的import全部包含进主程序。与课程相比增加了import warnings和warnings.filterwarnings("ignore"),用于忽略告警信息。

2、函数定义,主要包括

1) next_run_time函数,用于管理程序启动运行时间间隔,这个代码课程里有,无需改动

2) get_bfx_candle_data函数,用于获取K线数据函数。这个函数需要注意一点,有容错机制。使用try,except实现。关于容错机制,我的体会太深了。任何与网站需要互动的部分都要使用容错机制,这是确保量化交易程序能够持续稳定运行的根本。我的初始实盘程序由于没有添加容错,致使我最初实盘时运行不久即因为未能获取不到数据而停止运行。容错代码代码课程中只有第四课讲了异常处理的情况,实盘代码需要自己添加领悟。

3) 策略函数,用于计算并输出策略信号。这块无修改,注意参数选择。课程中的代码和“大作业”标准答案有所不同,这让我体会到实现一个相同的功能程序,可以有很多不同写法,并不会只有一个标准答案。

4) 下单函数,用于进行建仓平仓操作。下单函数课程里有代码,有一处需要修改。课程里面的下单程序是针对bfx中的exchange账户的,需要修改为margin账户下单(如果要做空,必须使用margin账户),margin下单代码详见第七课【案例4】使用ccxt在bitfinex进行交易。

5) 钉钉发送函数,用于发送程序运行关键节点信息(如账户、下单等)。这个函数取代了邮件发送函数,代码放在番外课程:如何通过钉钉自动发送通知里面,直接复制来即可

3、参数定义,包括交易所、策略、账户交易等

1) 账户定义:需要创建bitfinex和bitfinex2两个交易所,bitfinex用于下单交易,bitfinex2用于获取K线数据。

2)参数定义:时间、策略,增加杠杆参数。

3)账户交易:margin账户的若干symbol设定。需要注意bitfinex下单使用的symbol是类ETH/USD格式。

4、主函数,定义主程序。这个设定使我顿开茅塞,主程序赋值到主函数,主函数外还有程序,就是循环容错的程序。这个设定基本保证了整个量化程序的稳定持续运行。

1) Sleep直到运行时间,代码与课程的一致。我把这个部分和获取账户信息的部分对调了下位置,感觉上程序运行会更连续流畅一些。

2) 获取资产,包括两部分,margin账户保证金资产和仓位资产。账户保证金资产课程中有描述,但仓位资产要用到命令bitfinex2.private_post_auth_r_positions()。可增加钉钉推送信息。这部分属于网络交互,同样需要增加容错机制。try except。

3)获取最新K线数据,又是一个网络交互,且非常容易出现网络问题。有可能会出现长时间获取不到K线数据导致重复获取而陷入死循环的问题,星球里面助教-法玛给了解决方案,循环语句获取K线,设置计数器,超过一定获取次数通过raise ValueError跳出循环,从而保证主程序继续运行而不中断。此外,如果成功获取K线,则返回K线的DataFrame格式数据,并且返回该币种的收盘价格。

4)计算交易信号,与课程代码相同

5)根据交易信号,实施交易。总共有六种情况:买入建仓,卖出平仓,卖出建仓,买入平仓,卖出平仓并开空仓,买入平仓并开多仓。前面四种课程中均有涉及,需要微调。price需要用到返回的收盘价格,symbol需要调用ccxt_symbol交易符号。最后两种情况其实就是把前面四种情况的两两程序叠加,需要注意的是两个程序之间需要重新获取margin账户保证金资产数量。

6)运行主体,即While循环运行主函数,并采用try except进行容错。

整个交易实盘程序框架就是这些,当然里面还有很多细节需要不断打磨研究。作为一个初学者,不需要把所有代码都搞明白。我的“大作业”中有很多是复制课程中的代码,很多代码都是似懂非懂,包括全局变量和局部变量也是后面才明白。但这不重要,我记得邢大在课程中说过,首先是把程序跑起来最重要,要记住学习的终极目标是使用或者说是实践。

试盘期间我把signal=0,仅用程序实盘测试连续运行情况。交易期间我在margin账户投入少量资金,杠杆设置为1,验证实盘交易的正确性。至少实盘正确运行一段时间后再考虑增加投入或增加杠杆。

第四步:搭建量化交易的基础设施,主要就是电脑和网络。我用的是笔记本电脑运行程序,设置直接合盖运行,同时需要设置电脑屏保但从不休眠并且无线网卡不自动关闭。登陆bitfinex需要科学上网,我之前用的蓝灯代理一直有问题,程序自动运行后始终拒绝访问,这块在我引入容错机制后需要重新测试验证。

经过一段时间实盘,发现每隔一段时间程序会停止,原因是无线网络断了。能否通过程序自动诊断是否网络通畅并建立固定的联接?我在网上搜了下,还真搜到了解决方案的代码,虽然里面内容很多还看不懂,不过拿来主义还是会的。通过函数定义了自动连接WIFI,并且把它放在了主程序try部分的第一个执行。确保每次网络是通畅的。

以上就是我数字货币量化实盘的所有步骤,完成后就可以实现量化实盘了。

然而当我走进量化世界之后,才发现,这其实只是刚刚迈出的第一步......

后面还有:

量化方面,参数优化,币种选择,标的选择(美股、期货),趋势策略选择,各种策略选择......

程序方面,Python各种功能学习,程序上云......

好吧,想想头就大了,路漫漫其修远兮啊。不过好在第一步已经跨过,我已成功升级。再次感谢邢大带我走进了数字量化世界。

上一篇下一篇

猜你喜欢

热点阅读