第三章是來學習如何打造基本面與籌碼面策略的章節。
練習版程式碼連結:https://colab.research.google.com/drive/10XoB6VmnJrJNl3g2iHS77HvGl5oBJdB6?usp=sharing
a. 什麼是 Hash Rate
圖中灰色線條為價格,黃色線條為世界上所有挖礦機加起來的計算能力。
假如黃色線條越高,則代表礦機彼此競爭激烈,總體算力較強,加密貨幣的整體算力就稱為 hash rate。
把目光移到 2019 的部分,會發現黃色線條與灰色線條下跌,通常會把這現象稱作「礦工的投降」,會發生這現象通常是因為下列原因:
就是礦機的獲利金額不足以支付電費本身,造成礦工撤下礦機,並把 Bitcoin 賣出,造成總體算力的下降,而算力的下降會引發價格的崩跌。
價格崩跌,意味其他礦工越來越賺不到錢,以致造成越來越多的礦機停止運作,造成更多 Bitcoin 的賣出,價格也因此越來越下降,形成連鎖效應。
基本面策略,就是要把握這難得的時機點,趁機以超低價大量買入 Bitcoin。
現在,就讓我們試著撰寫這樣的策略吧。
b. 獲取 Hash Rate 資料
首先到 glassnode 獲取算力資料(請先註冊該網站),點選圓圈處:
點進去後,移動到右上角的帳戶頭像,點選圓圈處:
點進去後,點選圓圈處以複製密鑰:
複製完畢後,就可以打開練習版程式碼,來開始今天的策略撰寫了。
c. Hash Rate 策略撰寫
來到「Bitcoin Hash Rate」儲存格最下方(別被函式包住)貼上這段程式碼:
hash_rate = get_glassnode('你複製下來的網址',
'你複製下來的密鑰', ohlcv.index)
上述程式碼中的網址要如何找到呢?其實很簡單,來到 Glassnode,點選圓圈處:
點選圓圈處:
搜尋 hash rate,點選圓圈處:
往下滑,點選圓圈處:
複製圖中畫線網址即可。
輸入下列程式碼,將 hash rate 畫出來:
hash_rate.plot()
由圖可以看出雜訊實在非常的大,必須要把雜訊移除才行。
移動到「Miner capitulation」下方,撰寫 hash rate 的雙均線即可(每 30 and 60 天移動一次):
hash_rate_ma30 = hash_rate.rolling(30).mean()
hash_rate_ma60 = hash_rate.rolling(60).mean()
hash_rate_ma30.plot()
hash_rate_ma60.plot()
圖中圓圈處就是 hash rate 下跌的時候,我們希望他在剛開始下跌時把 bitcoin 賣出,待短線突破長線時,則是低價買入 bitcoin 的時候。
現在開始實現上述的條件判斷,先移動到下一個儲存格,撰寫如下的程式碼:
cross = (hash_rate_ma30 > hash_rate_ma60) & (hash_rate_ma30.shift() < hash_rate_ma60.shift())
cross.astype(int).plot()
這裡先複習一下,為什麼上述第二行程式碼要轉成整數在繪圖呢?因為 cross 是條件判斷的值,而條件判斷產生的值是布林值(True、False),所以無法繪圖,所以必須先轉成數字(1、0)的形式才行。
在添加一行程式碼來將價格與 hash rate 進行比較:
ohlcv.close.plot(secondary_y = True)
藍色的直線代表買進時機點。
可以看到每當到買進時機點時,很多都是價格下跌的時候,而後續的價格漲回,就可以帶給我們不錯的績效。
接下來移動到下一個儲存格,在 results 這個空字典下方撰寫如下的程式碼:
for d in range(1, 181):
dprice = ohlcv.close[cross.shift(d).fillna(False)].values
results[d] = pd.Series(dprice)
results = pd.DataFrame(results)
results = results.transpose()
results
上述的程式碼可以讓我們以表格的方式去看每一次的買進時機點,以及每個時機點它隔幾天的收盤價。
(倒數第二行程式碼能夠讓表格旋轉九十度)
圖中畫線處也就是每次買進時機點的第一筆價格都不一樣,這導致我們很難去做一個統一的判斷。
於是我們會將第一筆價格都變成一,來看看價格到底是如何變化。
將最後一行程式碼修改並回傳給自己本身:
results = results.div(results.iloc[0])
上述程式碼其實就是將第一筆價格除以它自己本身所得到的結果。
將上述程式碼回傳給 results 之後,來到下一行儲存格,將買賣時機點畫出來:
results.plot()
以表格方式呈現:
results.loc[[1, 30, 60, 90, 180]]
可以看到若是持有 180 天以上,最終都會得到一個不錯的報酬率。(第七次為最近發生的時間點,還不滿 180 天,所以最後一格才會是 NAN 值。
這一節,我們成功利用 Hash Rate 指標撰寫基本面策略。
下一章,我們來試著撰寫多商品投資組合策略。
完整版程式碼連結:https://colab.research.google.com/drive/1BvcI0xf_RX6ahc5YdcEmki2TL83LELig?usp=sharing