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 协议》,转载必须注明作者和本文链接
讨论数量: 2

按照斐波拉契数列取MA233可能效果更好点

4年前 评论

@Marduk 哇~是吗,我回头试试看。

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!