第三章:打造基本面策略 Hash Rate


Posted by nightqwq on 2021-12-11

第三章是來學習如何打造基本面與籌碼面策略的章節。

練習版程式碼連結: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


#加密貨幣 #Python







Related Posts

Day05 git 柳暗花明

Day05 git 柳暗花明

React 增進效能,避免重複渲染 Rerender

React 增進效能,避免重複渲染 Rerender

[04] JavaScript 入門 - 強制轉型、Truthy & Falsy、條件式

[04] JavaScript 入門 - 強制轉型、Truthy & Falsy、條件式


Comments