pandas+pyechars 實踐筆記:比特幣價格分析

jeremy1127發表於2019-10-08

我的簽名是:

會點前端的後端開發,偏偏對區塊鏈最感興趣。

雖然上一份從事區塊鏈相關的工作無疾而終,但我還一直在關注區塊鏈行業的發展。

區塊鏈行業的龍頭老大是非比特幣莫屬。除了技術以外,估計大家更關心的是它的價格。
恰巧最近讀了九神《屯比特幣》的系列文章,其中的一篇尋找合適的夠買時機分享了關於定投擇時的策略,核心觀點是:

那麼,具體在什麼區間內購買比特幣最划算呢?同時滿足兩個條件:

比特幣價格低於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...

相關文章