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_price_analyzer/