---
# System prepended metadata

title: Quantitative trading of cryptocurrencies with CPI and Fibonacci retracement

---

# Quantitative trading of cryptocurrencies with CPI and Fibonacci retracement

## 研究簡介

### 一、	摘要
2020年疫情爆發初期，各國經濟受到嚴重影響，股票、加密貨幣價格進行大幅回撤，美聯儲(Fed)為了刺激經濟消費，開始了無限QE政策，僅在兩年間便印製了四兆美金，使得二級市場進入了前所未有的大牛市。然後過度印鈔，導致通膨問題日益加重，今年六月，CPI(消費者物價指數)達到9.1%，創下近年新高，美聯儲不得不政策轉向，實施貨幣緊縮，利用升息縮表來減緩通膨，此後，每一次的CPI公佈都對二級市場走勢有著重大影響，尤其是情緒化的加密貨幣市場。

在現行金融二級市場中，透過量化指標分析，並且自動化進行交易已經是一種顯而易見的趨勢，華爾街多家著名對沖基金(Hedge fund)，如橋水基金、城堡基金等，都已經開始在美股期貨、選擇權、外匯及加密貨幣上採用量化交易策略。本文旨在利用Python進行歷史數據回測，與觀察影響短線市場的關鍵數據-CPI，研究出一套適應於比特幣U本位合約的量化交易模型。 

### 二、	研究之動機與目的
我個人已在金融二級市場交易五年，從台股短線當沖、波段，再到近年興起的加密貨幣合約市場，我發現許多技術分析流派及指標，都擁有慣用性，可以跨市場的進行通用，而其中在加密貨幣上，因為市場的開放和不被監管等特性，使得利用量化指標進行自動操作的對沖基金和大戶非常活躍。本文希冀可以透過觀察影響比特幣短線走勢的CPI消費者物價指數，找出一套合理的預測方式，並透過Python進行回測，計算勝率，並了解其實際應用的可行性。

### 三、	提案脈絡
本文選定利用比特幣進行歷史數據回測，它是目前在區塊鏈交易網路上市值最龐大的幣，高達399,506,809,580美元，每日的交易量也非常驚人、交易人群充足，故對其進行歷史數據回測可以很有效的得知策略能否適應市場。而因其市值第一大的原因，也很常做為整個加密貨幣的先行指標，其他山寨幣(Alt coin)的走勢也很容易被它影響，故如果建構了一套對於比特幣有效的量化交易模型，也能更加方便的操作其他幣種。



### 四、	研究方法
我主要想對比特幣進行兩種方法的量化分析，分為特徵值機器學習和CPI結合斐波那契回撤，特徵值機器學習方法會先在Yahoo財經上下載DJI(道瓊工業指數)和BTCUSDT(比特幣美元交易對)從2017-09-12到2022-09-12的歷史交易數據，並且放入Python中進行數據分析，優先分析其走勢、繪製移動平均線、指數移動平均線和MACD等常見技術分析指標，再計算兩個交易的走勢的相關係數，並將這些分析結果找到固定的特徵值，如5日移動平均由下往上穿越10日移動平均，接下來一段時間都呈現上漲等，建構成特徵進行機器學習分析，利用Python的自由軟體機器學習庫scikit-learn其中的SVM進行訓練、統整並計算勝率。

CPI結合斐波那契回撤方法。CPI公佈分為實際值與預期值，當實際大於預期時，代表通膨並未有效下降，我們預測接下來的一分K會呈現下跌，反之則預測上漲。本研究回測了從2021年1月至2022年12月的每一次CPI，共二十四次的公布內容，預測結果confusion matrix和一分K棒截圖顯示如下，其中發現，CPI公布會對短線的價格行為帶來重大影響，我想透過斐波那契回撤(Febonacchi retracement)，來預期趨勢的回撤點，並找到合適的開倉位置。

### 五、	預期成果與限制
預期成果同上述，將建構出一套合適的CPI行情預測方法，可以穩定的適應於市場上的波動行情，並通過回測計算出勝率，了解到真實適用的可行性。限制部分，因為本學期的專題內容較大且複雜，若進度順利的話，希冀可以在最後放上幣安API，真實的進行即時交易，利用小倉位驗證策略的成功與否，而非只是對更多的歷史數據進行回測。

## 研究成果
### 壹、特徵值機器學習-SVM漲跌預測模型

我先在 Yahoo 財經上下載DJI(道瓊工業指數)和BTCUSDT(比特幣/美元交易對)從 2017-09-12 到 2022-09-12 的歷史交易數據，並放入Python 中進行數據分析，優先分析其走勢(圖1及圖2)、繪製移動平均線(Moving average)、 指數移動平均線(Exponential moving average)和MACD等常見技術分析指標(圖3)，再計算兩個交易對的走勢相關係數(圖4)，並設法透過這些分析結果找到固定特徵值，如5日移動平均線由下往上穿越10日移動平均線，接下來一段時間都呈現上漲等，或比特幣自己的開盤、收盤、最高和最低價等數據，建構成特徵值進行機器學習分析，利用Python的自由軟體機器學習庫 scikit-learn中的SVM支持向量機進行訓練、繪製預測結果並計算勝率。
![](https://i.imgur.com/EYqSCYK.png)
圖1. 比特幣價格走勢圖

![](https://i.imgur.com/2DkAXFm.png)
圖2. 道瓊工業指數價格走勢圖

![](https://i.imgur.com/FGPybbE.png)
圖3. 比特幣MA、EMA、MACD圖

![](https://i.imgur.com/rONuU4c.png)
圖4. 比特幣對道瓊相關係數圖

在分析美股和比特幣交易對的相關係數時，我發現資料日期長度不同，美股例假日不開盤，而比特幣是24/7全年無休的，因此我透過python將美股例假日前一日數據做為填充，發現相關係數高達0.89(圖4)。隨後我們打算利用SVM來將美股的日線開盤、收盤、最高和最低價作為特徵值，訓練資料並預測比特幣之漲跌，卻發現SVM沒有辦法實現此功能，因此透過技術分析當特徵值的想法可能也無法落實，因此我只能改為利用比特幣本身的資料，也就是自身的日線開盤、收盤、最高和最低價來做為特徵值訓練。

在預測過程中，我切割20%的資料作為預測集、80%資料作為訓練集，並且設定預測結果1表示下一日會漲、0表示跌或平盤。我們使用scikit-learn中的preprocessing.scale函式對特徵值進行標準化，並透過svm.SVC來創建SVM分類器。


我首先採用linear kernel並預設參數的方式進行訓練，並將預測結果與走勢透過下圖表示，利用svmTool.score函式計算出正確率為78%(圖5)

![](https://i.imgur.com/xzDjjFZ.png)

圖5. linear kernel預設參數結果

雖然正確率78%為還算可以的結果，不過我還想嘗試是否有更佳的參數組合，可以產生更好的結果，於是分別採用了poly kernel和RBF kernel進行訓練，並手動調整參數以利最佳化，poly kernel部分，我主要調整C、gamma和degree參數，區間分別是10^-1~10^2、0.5~2和3~5最終得出最佳化的參數結果degree = 3, gamma = ‘auto’, C = 50，勝率為76%，此最佳化結果比linear kernel還差，因此不再採用。(如下圖所示，後面幾次全部預測錯誤)

![](https://i.imgur.com/59uPUeq.png)
圖6. poly kernel結果

隨後我改為嘗試RBF kernel，同樣調整gamma和C參數，區間為0.5~2和10^-1~10^2，手動得出的最佳化結果為gamma = 0.7, C = 50，勝率為92%，是有明顯的進步，但擔心C值太高可能會出現問題，因為C越高，說明越不能容忍出現誤差，容易過度擬和。C越小，又容易欠擬合。C過大過小，泛化能力會變差，因此決定再嘗試回linear kernel看看是否發生此結果。

由於linear kernel只有C一個參數，因此我們同樣取區間10^-1~10^2，最終得出C = 50時勝率為95%，很確定此結果不具泛化性，因為連續幾次實際預測皆產生偏差。最終我使用linear kernel，對C逐一進行微調，用幣安得到的比特幣日線真實合約數據對資料進行預測，從C = 1~20，發現預測結果最準的參數為C=15，故計算出勝率為85%的模型(圖7)。

![](https://i.imgur.com/bkIZNNa.png)
圖7. 最終linear kernel模型

### 貳、執行預測結果
透過在Python中依序輸入比特幣日線前一天的收盤、開盤、最高和最低價，來預測下一天收盤比起前天收盤將會呈現上漲或下跌。
以下是幾組實際演示結果: 
Data 1 2023/01/01

![](https://i.imgur.com/7hlNVEu.png)

輸入'16610', '16537', '16618', '16488'，得到預測結果為1，表示隔日將會上漲，而其真實數據是對應到幣安比特幣合約日線2023/01/01，其隔日也真的呈現上漲，如下圖所示。
![](https://i.imgur.com/bXK6loQ.png)

Data 2 2022/12/14
![](https://i.imgur.com/wUlAs92.png)

輸入'17803', '17777', '18400', '17659'，得到預測結果為0，表示隔日將會下跌，而其真實數據是對應到幣安比特幣合約日線2022/12/14，其隔日也真的呈現下跌，如下圖所示。
![](https://i.imgur.com/2oV9o6v.png)


Data 3 2022/11/29
![](https://i.imgur.com/2GCRoAi.png)

輸入'16433', '16204', '16543', '16088'，得到預測結果為1，表示隔日將會上漲，而其真實數據是對應到幣安比特幣合約日線2022/11/29，其隔日也真的呈現上漲，如下圖所示。

![](https://i.imgur.com/TFzQFuv.png)









### 參、CPI結合斐波那契-CPI與比特幣價格之間的連動性: 

CPI作為衡量通貨膨脹程度的領先指數，從聯準會(Fed)宣布升息以來就受到全市場的高強度關注，因為其是最直接反應升息成效的標準，若CPI持續居高不下，代表通膨還未下降，可以預測FED將進行更高強度的升息，而若CPI下降，則表示升息結果有效，可以預測下一次的升息可能不會那麼劇烈。
![](https://i.imgur.com/Mp8py1E.png)

 
這邊CPI的主要參照值又分為前值和預測，若高於則預測比特幣行情下跌，低於則預測比特幣價格上漲，先不討論利多出盡或利空出盡等情況，而又為在CPI公布的東八區時間20:30(夏令時間)波動最為劇烈，下面討論CPI公布當下的1分K價格關聯性，驗證預測是否正確。

1/12 21:30 CPI公佈當下一分K
![](https://i.imgur.com/iECGENw.png)

CPI公佈值為7.0%，和預測7.0%一致，等於的狀況下我們不進行漲跌判斷，但可以看到此次BTCUSDT交易對價格在當下一分K從43359上漲到43624，上漲近300點，更是有向上插針至44082，漲勢非常凶猛。


2/10 21:30 CPI公佈當下一分K
 ![](https://i.imgur.com/yxb4Zuh.png)

CPI公佈值為7.5%，高於預測7.3%，可以看到BTCUSDT交易對價格在當下一分K從44931下跌到44302，下跌近600點，後續又持續下跌至43213，符合預期。

3/10 21:30 CPI公佈當下一分K
 ![](https://i.imgur.com/HtBUf2o.png)

CPI公佈值為7.9%，和預測7.9%一致，等於的狀況下我們不進行漲跌判斷，但可以看到此次BTCUSDT交易對價格在當下一分K從39288上漲到39755，上漲近500點，不過後續又馬上下殺甚至跌破起漲點。

4/12 20:30 CPI公佈當下一分K
 ![](https://i.imgur.com/L6LSSNb.png)

CPI公佈值為8.5%，高於預測8.4%，預測下跌但實際上漲，BTCUSDT交易對價格在當下一分K從40283上漲到40543，上攻近300點，雖然後續有持續下跌，但此次依然算做預測失準，不符預期。




5/11 20:30 CPI公佈當下一分K
 ![](https://i.imgur.com/VZ9GegB.png)

CPI公佈值為8.3%，高於預測8.1%，可以看到BTCUSDT交易對價格在當下一分K從31545下跌至31160，後續又持續下跌至最低29087才從谷底反彈，下跌近400點，符合預期。

6/10 20:30 CPI公布當下一分k
 ![](https://i.imgur.com/vxoQ3Ro.png)

CPI公佈值為8.6%，高於預測8.3%，也高於前值8.3%，可以看到BTCUSDT交易對價格從30086跌至最低29548，隨後反彈至29642收K，下跌約444點，符合預期。

7/13 20:30 CPI公布當下一分k	
 ![](https://i.imgur.com/yjJ1R0z.png)

CPI公佈值為9.1%，高於預測8.8%，也高於前值8.6%，更是創下歷史新高，可以看到BTCUSDT交易對價格從20040跌至最低19453，隨後反彈至19607收K，下跌約587點，後續又持續走跌，符合預期。



8/10 20:30 CPI公布當下一分k
 ![](https://i.imgur.com/ndGhSjm.png)

CPI公佈值為8.5%，低於預測8.7%，也低於前值9.1%，是升息以來第一次低於預期，可以看到BTCUSDT交易對價格從23051上漲至最高23593，隨後拉回至23456收K，上漲約405點，後續又持續上漲，符合預期。

9/13 20:30 CPI公佈當下一分K
 ![](https://i.imgur.com/e4xps5G.png)

CPI公佈值為8.3%，高於預測8.1%，但低於前值8.5%，可以看到BTCUSDT交易對價格從22712下跌至最低21709，隨後反彈至21961收K，下跌約751點，後續又持續下跌，符合預期。

10/13 20:30 CPI公佈當下一分K
![](https://i.imgur.com/A3WE9s7.png)

CPI公佈值為8.2%，高於預測8.1%，但低於前值8.3%，可以看到BTCUSDT交易對價格從18799下跌至最低17917，隨後反彈至18187收K，下跌約612點，不過下跌至最低點後迎來了一波反彈，符合預期。



11/10 21:30 CPI公佈當下一分K
 ![](https://i.imgur.com/5CWVS9x.png)

CPI公佈值為7.7%，低於預測8.0%，也低於前值8.2%，可以看到BTCUSDT交易對價格從最低16557上漲至最高17466，隨後回調至17351收K，上漲約794點，這也是近期第一次見到7字頭的CPI，多頭勢力強勁，隨後還有繼續上攻約兩天，符合預期。經過2022/01~2022/11共11次的CPI觀察結果發現，主要價格反應的都是預期值，若高於預期值則下跌，低於則上漲，與前值高低較無關係，總共有八次漲跌狀況符合預期，兩次因數值和預期值相同，故不預測，而只有一次失準。由下圖的confusion matrix我們可以更加清晰地看到此結果。

 ![](https://i.imgur.com/pcLnec6.png)

●P(positive)代表漲
●N(negative)代表跌
漲跌定義為當下1分K收K，和前根K棒進行比較。

數據回測了2021/01/13-2022/12/13共二十四次CPI公佈結果，其中五次因開出數據與預期一致所以不操作，其餘十九次透過此confusion matrix可以得知，預測上漲而實際上漲(PP)的有三次，預測下跌而實際下跌(NN)的有十次，其中五次為預測下跌實際上漲(NP)，預測上漲而實際下跌為0次(PN)，勝率為73%。不過從2021/06/10的CPI結果來看，量能已經明顯不足，代表CPI在該日以前對價格的影響並不如今日一樣大。 


### 肆、CPI結合斐波那契-斐波那契回撤(Fibonacci Retracement)

商品在面臨上升或下降趨勢的竭盡時，容易回撤到幾個關鍵比例的價位，分別為0.786、0.618、0.5、0.382、0.236，這些位置也容易形成支撐阻力位。和一般的技術指標不同，一般指標具滯後性，都是價格先反應後才繪出，但斐波那契回撤不同，它具有前瞻性，可以得知商品的潛在支撐阻力位。

實際應用: 上升趨勢
![](https://i.imgur.com/0r3X09D.png)

上升趨勢應用時，在底部繪製1(100%)，並觀察潛在頂部繪製0(0%)，TradingView會自動標示出0.236-0.782的斐波那契線。可以看到上面兩個USD/TWD交易對價格，在觸頂後回撤0.382，即打到星號處，皆得到明顯支撐。

實際應用: 下降趨勢 
![](https://i.imgur.com/bzZgiUQ.png)

JPY/USD 日線 2021/11/22-2022/12/13
下降趨勢應用時，繪製方法和上升趨勢相反，在頂部繪製1(100%)，並觀察潛在底部繪製0(0%)。上圖可以看到下跌過程多次應用斐波那契，即標示星號處，打到0.236、0.382後價格繼續下探。



### 伍、透過斐波那契回撤結合CPI制定短線交易策略:

透過上述對斐波那契回撤的應用，我們得知這是一種當價格開啟新的區間走勢時，可以用來預測潛在支撐或壓力線的技術分析方法，分別在最高最低價的價差之0%、23.6%、38.2%、50%、61.8%、78.6%、1% 容易產生回撤點位，是一種具有前瞻性的指標。我想透過Python，讀取CPI公布日的Timestamp資料，因為藉由上述CPI公布日1分K線圖，我們可以知道在公布當下的1分K波動非常劇烈，對於小的時間級別來說，的確是開啟了一個新的區間走勢。在下面的分析中，我們藉由BLOCKCHAIN RESEARCH CENTER提供的付費資料庫，下載了7/13、8/10、9/13和10/13的Timestamp日內資料，對CPI公布當下的一分K棒繪製斐波那契回撤，和前面的判斷方法一致，當CPI高於預期，我們會預測其下跌，當CPI低於預期，我們則預測其上漲，並且利用斐波那契回撤，看看使否會在回撤碰觸到0%、23.6%、38.2%、50%、61.8%、78.6%、1%時，繼續進行趨勢。

7/13 CPI公布當天Timestamp對應斐波那契應用:
 ![](https://i.imgur.com/RpLYfK0.png)

7/13 CPI公布值為9.1%，預期值為8.8%，因高於預期所以預測下跌，在公布當下的一分K繪製斐波那契回撤，以一分K最高價格到達位置20060設為1、最低價格到達位置19470設為0，可以看到後續走勢在跌破0後繼續下跌，力竭回撤23.6%、38.2%才又繼續下跌，不過下跌幅度並為超過當日最低點，後續還有一次在回撤1後繼續下跌，這三次皆符合斐波那契之運用。






8/10 CPI公布當天Timestamp對應斐波那契應用:  
 ![](https://i.imgur.com/SM3RICX.png)

8/10 CPI公布值為8.5%，預期值為8.7%，因低於預期所以預測上漲，在公布當下的一分K繪製斐波那契回撤，以一分K最低價格到達位置23051設為1、最高價格到達位置23600設為0，可以看到後續走勢在突破0後繼續上漲，力竭回撤23.6%，23482才又轉為上漲，符合斐波那契結果。

9/13 CPI公布當天Timestamp對應斐波那契應用:  
 ![](https://i.imgur.com/3ADZrrX.png)

9/13 CPI公布值為8.3%，預期值為8.1%，因高於預期所以預測下跌，在公布當下的一分K繪製斐波那契回撤，以一分K最高價格到達位置22712設為1，最低價格到達位置21709設為0，可以看到後續走勢在跌破0後短暫下跌，回撤23.6%，21922後接續下跌，也同樣符合斐波那契結果。



10/13 CPI公布當天Timestamp對應斐波那契應用:
 ![](https://i.imgur.com/pLHdNg0.png)

10/13 CPI公布值為8.2%，預期值為8.1%，因高於預期所以預測下跌，在公布當下的一分K繪製斐波那契回撤，以一分K最高價格到達位置19040設為1，最低價格到達位置18190設為0，可以看到後續走勢回撤38.2%、78.6%和1時，雖然有受到壓力阻擋，不過依然繼續突破，不符合斐波那契結果。

### 陸、結論
透過7/13、8/10、9/13及10/13的四次CPI回撤點預測結果來看，在CPI數值較具影響力的2022後半年，極短線(Timestamp或分K)級別上確實有利可圖，不過對於波動性和具體回撤到哪條線的掌握程度則比較難以控制，若在每條線都進行掛單，可能會有很高機率觸發停損，整體結果比起SVM機器學習系統在真實交易實用程度較小，不過若後續再進行更多優化，如加大回測數據範圍和改變時間級別，則還有研究的空間，總結來說，這一套透過斐波那契回撤預測CPI公佈時Timestamp回撤點的交易策略，會有利於我在未來CPI數據公布時，對可能出現的回撤點有更好的了解，不過真實交易上，則還需要謹慎使用。

SVM機器學習系統部分，在我真實交易上的應用層面則更加廣泛，因現今的加密貨幣合約市場，已不像2013-2019年的快速上升期和2020-2021因無限QE引起的大牛市般單純，大型機構與法人的進場，以及越來越多的量化交易程式介入，都使得要判斷開倉方向更加困難。SVM即可透過簡單在Python中輸入BTC/USDT交易對前一日的開盤、收盤、最高及最低價，就可以對隔日的漲跌進行簡單預測，確實有幫助我在實際交易上對於方向的判斷。而未來發展的可能性，若還可以適用於更小時間級別，如小時或分K，則不局限於日線上的操作，或許也有結合CPI與斐波那契回撤做極短線交易的可能性。

### 參考資料
1.Kelly-Based Options Trading Strategies on Settlement Date via 	Supervised Learning Algorithms- Mu-En Wu1• Jia-Hao Syu2 • Chien-Ming Chen3
2.Understanding jumps in high frequency digital asset markets-Danial Saef, Odett Nagy, Sergej Sizov, Wolfgang Karl Härdle
3.Price discovery in bitcoin spot or futures?- Dirk G. Baur,Thomas Dimpfl
4.幣安BTC/USD: https://www.binance.com/zh-TC/futures/BTCUSDT


