最近币圈大跌,作为一棵吊在高处的韭菜,还是觉得好好的做开发比跟风靠谱多了,遂静下心来,好好的写点文章,做点数据分析,抓取进阶下。
接触区块链其实在三年前,一个朋友就提醒我们多关注区块链,那个时候的我们还是少不更事的认为那个虚的东西又撒好玩的,到现在回首看,眼界比技能和运气要重要得多。做人没有好的眼光,上不去的,还是捡起来好好的分析下区块链技术,后续会多些一些。
言归正传,最近在分析各个交易所的数据,对接了几个交易所(bitflyer, coincheck, binance,btcbox)后续在对接一些其他的。首先作为技术出身,还是好好的做数据分析吧,先爬一些数据下来,就到处找相关的接口文档,然后通过python来把数据抓下来。这块就需要大家提供的访问api,有很多人写了交易所第三方的访问api,发布在github上,我们就使用这些api来访问以获取数据。
看了好几篇文章,第一篇先给澳大利亚的一个大叔级高手打广告,翻译下他的文章,这个哥们写了好几个交易所的获取客户端。
原文链接: https://sammchardy.github.io/binance/2018/01/08/historical-data-download-binance.html
正文
任何交易策略的基础都是有一个好的回测方案,如果你没有数据,就没法回测,数据还是很重要的。
在这篇文章中,我将详细描述通过Binance API在指定时间范围内下载和保存币安的历史K线数据。
这个例子不需要有币安的账户,直接访问公开的API即可。
首先需要处理时间格式
因为币安服务器只接受毫秒级别的时间戳的时间段,所以需要将工作日时间转换为毫秒时间戳。
本次使用强大的python来进行处理,安装dateparser包。命令如下:
1 | pip install dateparser |
我们可以得写个函数将日期字符串直接转换成毫秒格式。例子如下:
1 | print(date_to_milliseconds("January 01, 2018")) |
获取币安的K线数据
现在我们希望通过 get_klines API来获取实际的交易量数据。
先看下接口参数:
1 | symbol - e.g ETHBTC 币种数据 |
因为一次最多取500条,如果时间范围比较大,我们得循环获取。
返回结果格式:
1 | [ |
我们把返回的结果都存储起来,有多少存多少。
币安时间间隔intervals
参数中的intervals是一个字符串,一次请求只能是在某个范围内,一次限制是500,所以需要获取较长时间段数据的话,需要对时间间隔进行毫秒转换。将API中设定的时间,转换成毫秒, 例子如下:
1 | from binance.client import Client |
获取K线数据
准备好了之后,我们开始写方法来获取历史数据。 我们通过时间范围和intervals间隔参数很容易的获取。例子如下:
1 | from binance.client import Client |
完整的代码可以从python-binance项目的例子中获取,链接: examples folder
保存到文件
获取到的数据后存到文件以方便后面使用。代码如下:
1 | import json |
打赏功能
这些好的方法,已经添加到python-binance方便大家使用。
date_to_milliseconds
和 interval_to_milliseconds
已经添加到binance.helpers中。get_historical_klines
已经添加到finance.client中,直接调用即可。代码如下:
1 | import json |
接下来
使用这些获取的数据,我们可以在后续的回测中使用。
使用Kucoin交易所的用户同样使用python-kucoin 也有这些功能。
后续还会写一些使用 pandas 和 TA-Lib 来进行简单的回测的文章。
结语
sammchardy 是一个很帅的澳洲哥们,大家可以在twitter上关注他, 作为开源的api客户端,写的也非常的便捷,对于这样有分享的精神的哥们,大家是不是给点打赏呢,他也给了Donate地址了。大家可以查看原文。
我在最后也贴下全文例子的链接:
save_historical_data.py 大家可以下下来实际的跑一下试试。
1 | import time |
执行例子:
1 | python3 save_historical_data.py |
生成文件:
1 | Binance_ETHBTC_30m_1512086400000-1514764800000.json |
返回结果例子:
1 | [ |
大家可以试试,在后续回测中可以用到。
如果大家遇到报错,请升级下cryptography的包,命令如下:
1 | pip3 install -U cryptography |
后续我也会多些一些原创的区块链技术方面的文章。