隨著減碳議題逐漸被重視,台灣也預計在2040年禁售燃油機車,與國際攜手往2050零碳排的目標邁進,可知電動車產業成為未來發展的重點,另外電動車產業彼此之間可以聯想到有高度的相關性(題材),因此我們想透過機器學習的技術對目標公司的股票進行股價預測,希望進一步成為投資人的參考依據或指標。
本報告的核心價值在於利用機器學習中不同的演算法(ex: 分類樹、隨機森林、XGboost、SVM)來比較及預測未來的股票走勢,再以模型訓練的結果來修正原始交易策略,使得Return、Mdd & CalmarRatio獲得明顯改善,以此建構出一套戰勝市場的交易策略。
預測標的: 2308 台達電(
| Notation | Description | Type |
|---|---|---|
| 2360 致茂調整股價 at day |
Price & Return | |
| 3665 貿聯KY調整股價 at day |
Price & Return | |
| 1536 和大調整股價 at day |
Price & Return | |
| 1503士電調整股價 at day |
Price & Return | |
| 4721 美琪瑪調整股價 at day |
Price & Return | |
| 2371 大同調整股價 at day |
Price & Return | |
| 1537 廣隆調整股價 at day |
Price & Return | |
| 1723 中碳調整股價 at day |
Price & Return | |
| 6509 聚和調整股價 at day |
Price & Return | |
| 8183 精星調整股價 at day |
Price & Return | |
| 1533 車王電調整股價 at day |
Price & Return | |
| TWII 台股大盤加權指數 at day |
Price & Return | |
| S&P500 標準普爾指數 at day |
Price & Return | |
| 法人買賣超幅度(外資) at day |
Volume | |
| 法人買賣超幅度(投信) at day |
Volume | |
| 法人買賣超幅度(自營) at day |
Volume | |
| 台達電成交量 at day |
Volume | |
| MA20 at day |
Technical | |
| MA60 at day |
Technical | |
| KD(K) at day |
Technical | |
| KD(D) at day |
Technical | |
| MACD at day |
Technical | |
| RSI at day |
Technical |
| 類別 | 股價 | 報酬率 |
|---|---|---|
| 機器學習訓練+驗證期 | 2011/7/18~2020/9/30 | 2011/7/19~2020/9/30 |
| 交易策略期間(測試期) | 2020/10/5~2022/10/7 | 2020/10/5~2022/10/7 |
附註:
-
MA為移動平均線,代表過去一段時間的平均成交價格
$$MA_{20}=\tfrac{S_{1}+S_{2}+...S_{20}}{20}$$ $$MA_{60}=\tfrac{S_{1}+S_{2}+...S_{60}}{60}$$ -
MACD指標: (1)EMA: 依據不同天,時間較近的資料給予較高的權重,所計算出的移動平均線 (2)離差值DIF是利用短期與長期的EMA相減計算出來的 (3)計算出DIF後,再取DIF的移動平均,就是 MACD 線
$$DIF=EMA_{12}-EMA_{26}$$ $$MACD=EMA(DIF,9)$$ -
RSI指標: 測量現在股價是強還是弱,數字越大表示股價愈強,本報告以14日做計算
- KD指標: (1)K值為「快速平均值」,對股價變化的反應較快速 (2)D值為「慢速平均值」,對股價變化的反應較不靈敏
在資料科學上,首先應執行資料探勘,運用視覺化或基本統計等工具,來對資料有個初步的認識,以利後續對資料進行複雜、嚴謹的分析,亦即所謂的三大步驟,檢查資料、觀察特徵到構想模型,良好並有效率的資料探勘分析幫助我們釐清問題,並執行有意義的研究。
從股價熱力圖可觀察到幾個現象:
- 各大類股皆有相當程度的關聯性: 探究原因乃為同類型、同樣相關行業的股票通常都會有齊漲齊跌的現象,乃為股票同質性。
- 移動平均與台達電或是各大類股也有一定程度的相關: 移動平均是由台達電股價資料計算而成,而台達電股價又與類股走勢相關,因此移動平均也會與類股走勢相關。
- 技術指標與投信、外資的法人買賣超呈現普通程度的相關: 可能是買賣超幅度有某一程度的力量來影響股票走勢,進一步帶動其相關性,不過技術指標間還是有不同程度的相關性。
- 台股大盤指數與標準普爾指數皆有顯著相關性: 推測大盤的變動有可能為我們準確預測的精隨之一,而與本報告欲預測的台達電也有頗高的線性相關。
- 類股的股價資料在轉換為報酬率後,發現仍有輕度的線性相關。
台達電漲跌次數分配並無不平衡現象,模型不會學習到大量漲或跌的資料,而產生過度擬合現象
從共變異數熱力圖可以發現,在相關電動車概念股中,彼此之間皆高度相關,故在線性相關上,相關概念股在某種程度上可以解釋台達電股價,但股價之間相關並不代表在隨機性更高的漲跌之間會具有顯著解釋力,故未來主要著重在非線性關係上準確率之良窳
我們透過所學金融知識、EDA(探索式資料分析)篩選出合適的
| Method | Confusion matrix |
|---|---|
| 分類樹 | $\begin{bmatrix}81 & 146 \67 & 160\end{bmatrix}$ |
| 隨機森林 | $\begin{bmatrix}174 & 53 \164 & 63\end{bmatrix}$ |
| XGboost | $\begin{bmatrix}132 & 95 \119 & 108\end{bmatrix}$ |
| SVM | $\begin{bmatrix}92 & 180 \73 & 109\end{bmatrix}$ |
| 績效 | 分類樹 | 隨機森林 | XGboost | SVM |
|---|---|---|---|---|
| Accuracy | 0.53084 | 0.52203 | 0.52863 | 0.44273 |
| F1 Score | 0.60038 | 0.36735 | 0.50233 | 0.46285 |
| Recall | 0.70485 | 0.27753 | 0.47577 | 0.59890 |
| Precision | 0.52288 | 0.54310 | 0.53202 | 0.37716 |
| Method | Confusion matrix |
|---|---|
| 分類樹 | $\begin{bmatrix}127 & 99 \98 & 129\end{bmatrix}$ |
| 隨機森林 | $\begin{bmatrix}194 & 32 \178 & 49\end{bmatrix}$ |
| XGboost | $\begin{bmatrix}161 & 65 \130 & 97\end{bmatrix}$ |
| SVM | $\begin{bmatrix}96 & 147 \80 & 130\end{bmatrix}$ |
| 績效 | 分類樹 | 隨機森林 | XGboost | SVM |
|---|---|---|---|---|
| Accuracy | 0.56512 | 0.53642 | 0.56954 | 0.49890 |
| F1 Score | 0.56703 | 0.31818 | 0.49871 | 0.53388 |
| Recall | 0.56828 | 0.21586 | 0.42731 | 0.61905 |
| Precision | 0.56579 | 0.60494 | 0.59877 | 0.46931 |
- 分類樹在預測股票漲跌中,F1 Score為0.60038,為所有模型中表現最佳,且在預測為漲的準確度高達0.70485,為資料形式price模型中看漲最佳表現
- 分類樹平均準確率為0.53084,為資料形式price模型中最佳表現
- 隨機森林在看跌預測中準確度為0.76,為所有資料形式price模型中看跌最佳表現,但漲預測準確度低,故總準確度僅為0.52203
- XGboost平均準確度為0.52863,僅次於分類樹模型(資料形式price)
- 分類樹在預測股票漲跌中,F1 Score為0.56703,為所有資料形式return模型中表現最佳,且看漲與看跌機率差異不大(看跌:0.5545,看漲:0.56828),平均優於其他模型
- SVM在看漲預測準確度為0.619為所有資料形式return看漲中有最好表現
- 隨機森林在看跌預測準中準確度為0.85,為所有資料形式return看跌預測中表現最佳,但漲預測準確度低,故總準確度僅為0.53642
- XGboost平均準確度為0.56954,為所有資料形式return模型中最佳表現
- 資料形式為return分類樹在預測股票漲跌中有最佳預測表現
- 資料形式為return隨機森林在看跌預測有最佳表現
- 資料形式為price分類樹在看漲預測有最佳表現
- 不管資料形式price或return,分類樹與XGboost皆有較佳平均準確度
- 由於分類樹本身的預測是藉由「一連串的判斷,把input分配到樹中的某一個leaf node,並依據同個leaf node裡面比例最高類別當成預測」,故並沒有機率性質的預測,故在此機率預測方法為:用以最終在的leaf node之中漲跌比率來當成預測的機率。
- 由於SVM是藉由每個點對Decision Boundary的位置,故以離Decision Boundary越近,我們模型的信心越低,離Decision Boundary越遠,我們模型的信心越高為概念,在SVM結果加入Sigmoid,將原本不具備機率性質的預測轉換為符合機率的公理
| 實際Yes | 實際No | |
|---|---|---|
| 預測Yes | TP(True Positive) | FP(False Positive) |
| 預測No | FN(False Negative) | TN(True Negative) |
準確度(Accuracy) = (TP+TN)/(TP+FP+FN+TN) 精確度(Precision) = TP/(TP+FP) 召回率(Recall) = TP/(TP+FN) F1-score = 2 * Precision * Recall / (Precision + Recall)
買進: RSI_12 > 50 + RSI_6 > RSI_12(黃金交叉) + close > MA
放空: RSI_12 < 50 + RSI_6 < RSI_12(死亡交叉) + close < MA
賣出: RSI_12 < 50 + close < MA
回補: RSI_12 > 50 + close > MA
停損停利: 5%
回測區間: 2020/10/05~2022/10/07
資金管理: 設一開始持有本金$1000元,每一次交易都固定投入$100
手續費: 0.1425% (進出各課一次)
證交稅: 0.3% (平倉時課一次)
RSI_12: 12天計算之RSI
RSI_6: 6天計算之RSI
MA: 110天日內移動平均線
附註: 在部位全部平倉前,不會開啟新的倉位(無加減碼)
紅線:未計算交易成本之損益曲線 藍線:有計算交易成本之損益曲線(手續費+稅)
無考慮交易成本下,獲利有不斷創高的情況,代表主策略的邏輯沒有太大問題,但是在考慮交易成本下,獲利被吃掉許多,可知這個策略是有很多優化空間的。
觀察交易策略的問題得以進一步優化策略
- 多單的勝率 = 63.16%
- 空單的勝率 = 36.36%
可以將重點擺在 CalmarRatio = 年化報酬率 / 最大回落比例 (反映投資人面臨資產價格大幅波動時的心理痛苦程度)
| 績效 | 基本策略 |
|---|---|
| Profit | $40.8 |
| Return | 4.08% |
| Mdd | 2.39% |
| Calmar Ratio | 1.71 |
| Trade Times | 41 |
| Win Rate | 46.78% |
| Profit Factor | 1.43 |
| Win Loss Ratio | 1.5 |
Profit: 累積獲利 Return: 累積報酬 Mdd: 權益最大回落程度(%) Calmar Ratio: Return / Mdd Trade Times: 總交易次數 WinRate: 交易獲利次數 / 總交易次數 Profit Factor: 總獲利 / 總損失 WinLossRatio: 平均獲利 / 平均損失
我們希望利用機器學習模型來預測明日股價漲跌的機率,藉由模型結果來輔助我們判斷做空進場的時機點,過濾掉因市場的雜訊所釋出的假訊號,進而找出更加的空單進場點位,不只提高作空的勝率,也提升了整體績效。
0.7為主觀認定: 我們認為當模型預測明日下跌機率超過0.7時,可以更加確定空方力道,因此在滿足主策略與此條件時才會進行空單佈局。
買進: RSI_12 > 50 + RSI_6 > RSI_12(黃金交叉) + close > MA 放空: RSI_12 < 50 + RSI_6 < RSI_12(死亡交叉) + close < MA + 隔日下跌機率 > 0.7 (其於假設皆與之前一致,可至原策略回顧)
由於XGboost與分類樹有較佳預測的平均準確度,因此主要使用這兩種模型進行優化
| 績效 | 基本策略 | XGboost(price) | 分類樹(price) | XGboost(return) | 分類樹(return) |
|---|---|---|---|---|---|
| Profit | $40.8 | $52.63 | $30.4 | $52.53 | $58.73 |
| Return | 4.08% | 5.26% | 3.04% | 5.25% | 5.87% |
| Mdd | 2.39% | 1.46% | 2.51% | 2.31% | 1.46% |
| Calmar Ratio | 1.71 | 3.61 | 1.21 | 2.27 | 4.03 |
| Trade Times | 41 | 18 | 32 | 38 | 29 |
| Win Rate | 46.78% | 66.67% | 53.12% | 52.63% | 62.07% |
| Profit Factor | 1.43 | 2.51 | 1.4 | 1.66 | 2.03 |
| Win Loss Ratio | 1.5 | 1.26 | 1.23 | 1.5 | 1.24 |
與前述觀察結果一致,結果為分類樹(return)優化結果表現最為亮眼,成功控制住Mdd,勝率從46%提高至62%,Calmar Ratio也提升至4倍以上,確實排除了不佳的做空點位(雜訊)。
無交易成本獲利(red) : $63.46
有交易成本獲利(blue) : $52.63



無交易成本獲利(red) : $49.34
有交易成本獲利(blue) : $30.40



無交易成本獲利(red) : $75.09
有交易成本獲利(blue) : $52.53



無交易成本獲利(red) : $76.03
有交易成本獲利(blue) : $58.73



以回測績效來說,分類樹(price)模型能夠最有效率的優化原本的交易策略,達到Calmar Ratio 超過4倍的佳績,不只擁有最高的風險報酬比且每筆交易的勝率提升至62%。雖然我們並沒有進一步進行樣本外回測(檢驗策略的實際可行度),但我們成功挖掘出機器學習用於優化交易策略的可能性。






