pandas+pyecharts 实践笔记:比特币价格分析

tl;dr:眼下极有可能是本年度第二个最佳定投区间

引言#

我的签名是:

会点前端的后端开发,偏偏对区块链最感兴趣。

虽然上一份从事区块链相关的工作无疾而终,但我还一直在关注区块链行业的发展。

区块链行业的龙头老大是非比特币莫属。除了技术以外,估计大家更关心的是它的价格。
恰巧最近读了九神《屯比特币》的系列文章,其中的一篇寻找合适的够买时机分享了关于定投择时的策略,核心观点是:

那么,具体在什么区间内购买比特币最划算呢?同时满足两个条件:

比特币价格低于 200 日定投平均成本,意味着在这个时候买币,可以跑赢定投的人。
比特币价格低于指数增长模型的估值,意味着在这个时候,币价被低估了。

原文中的图

我读下来觉得遗憾的地方在于,这篇文章是成文于 2018-10-07,转眼一年过去了,而由于文中的相关图表是图片,没有持续更新,那么眼下这个时间点时否满足九神提出的两个条件呢?

正好我缺一个机会践习 python 的数据分析,于是,就开始边搜边学边试的摸索之路。

实现步骤#

第一步,自然是要获取数据。先是搜索了一番没找到合适的地方直接下载,只能转换思路去爬取。目标有两个,要么是交易所;要么是行情类网站。

我选择了非小号这个平台,因为有历史数据页面。

通过浏览器的开发工具,很容易就可以通过 get 请求获得数据并解析。因为代码过于简单就不贴出来,有兴趣的朋友,可以点击 btc_price_analyzer 查看。

第二步,是计量 200 日的定投平均成本(即几何平均数)及价格比例,这正是 pandas 所擅长的。但当时的我完全没有经验,磕磕绊绊才写出了下面的代码。

def close_ratio(close, base):
    return close * 1.0 / base

ma_list = [100, 200] //不知道为什么九神选择了200日均线,这里我把100日均线也打出来做对比。

for ma in ma_list:
    ma_str = str(ma)
    price_data['GMA_' + ma_str] = price_data['closeprice'].rolling(
        window=ma, min_periods=1).apply(gmean, raw=True)

for ma in ma_list:
    ma_str = str(ma)
    price_data["GMA_Ratio_" + ma_str] = price_data.apply(
        lambda x: close_ratio(x['closeprice'], x['GMA_' + ma_str]), axis=1)

唯一值得说明的是,pandas 的 rolling 函数只有 mean 方法,而没有 gmean 的。我是引用了 scipy 包实现的。

from scipy.stats.mstats import gmean

第三步,利用指数增长模型实现价格预测。我不确定九神使用的指数模型具体是什么参数,我搜索到文章主要来自于以下两篇文章:

我最后是选择了第一篇文章的方法,原因是文章写的更严谨一些。计算公式如下:

价格 = 10^(a + blog10 (d))

其中 a = -17.01593313,斜率 b = 5.84509376 ,d 为 2009 年以来的天数。

第四步,画图。虽然有传统的 Matplotlib,但这里我选择了用 pyecharts。

无它,一是 pyecharts 更好看一些 (外貌协会,嘻嘻~~),二是可以生成 html,方便移植。

如果对 echarts 不熟悉,那刚用 pyecharts 时,被各种配置项搞的晕头转向。

我的建议是对照着看 echarts 和 pyecharts 的文档,但更多的时候,大家急于看到效果,面向搜索编程,哪有时间细读,不如直接找 pyecharts 在 github 中的例子边改边试。

等自己踩过一遍坑,画出了自己想画的图,再回过头看文档,真是有恍然大悟的感觉。

扯点题外话,人生好像也是如此,磕磕绊绊走过,再回过神来想,很多道理其实很早就知道,非得要经历过才能领悟。

这部分代码当时写的很辛苦,写文章时再看,好像也没什么好贴出来的。-_-!!!

思来想去也就是画多 Y 轴图时,一定要先 extend_axis 后再 overlap。

line1.extend_axis(yaxis=opts.AxisOpts())

line1.overlap(line2)

最后的成果如下:
价格指标

想体验动图吗?请戳这里

通过观察可以看到,眼下这个时间点正好符合九神的两个条件

虽然相比于年初的时候要差一点,但这极有可能是本年度第二个最佳定投区间。

写在最后#

心心念念想学 python 数据分析好久了,一直没有动力。

这次终于找到了一个有意思的问题,趋动着我在十一假期生生迈出第一步。

下一步,一方面想把代码移植到 jupyter; 另一面,会对九神的策略做一回测分析。

比如说,100 日的均线和 200 日均线,到底哪个更有指导价值;等额定投和加权定投,到底哪个收益更大?

目前,我只完成了价格比率的分布图。
比例分布

更多的分析,计划在后续的文章再写。

注 1: 本文只是为了实践数据分析,不构成任何投资建议。

注 2: 本文涉及的所有代码可在 btc_price_analyzer 查看。

注 3: 动图体验网址是 https://ksloveyuan.github.io/page/btc_pric...

本作品采用《CC 协议》,转载必须注明作者和本文链接