--- title: ML&F tags: Machine Learning and Fintech --- # ML and FinTech: Project by 徐培修 --- ###### KeyWords: 證券交易、股價、籌碼、券商分點 ## Motivations  ![籌碼k線截圖](https://i.imgur.com/w2IoSt4.png) $\quad \quad$證交所每日盤後會提供每個券商分點對個股的買賣張籌碼資訊,在一些歷史資料來看,某些分點可能對某些個股會有特別好的掌握度,故想學習用更科學的方式分析此情況。 * #### 掌握籌碼,掌握先機   在投資市場中,有基本面、技術面、籌碼面等面相的交易策略。進入市場進行交易,無論是主力、法人亦或是散戶,目標不外乎就是獲利。而若在主力或法人等進場布局前期,能有效發現跡象,並跟隨著進場投資,便能有機會跟著主力獲利,因此如何從籌碼中找到蛛絲馬跡,便是重要的學問。 * #### 關鍵券商分點 在證交所盤後可以看到券商在個股的買賣訊息,希望透過觀測各分點的籌碼進出與股價關係,找出對歷史股價有相對關鍵的券商分點,進而監控其動作,並作為投資進出場依據。 ## EDA #### Data Link: https://drive.google.com/drive/folders/1MD4K9f7AN0Yz9AJsVcruOt30LcJKSc9S?usp=sharing (資料來源: CMoney資料庫) 由於此組Data Set中有許多資料,而其中此次研究中最想著重在分點日買賣超對股價的影響,故先將Data做以下整理。 首先將1477.csv導入python,並用pandas.read_csv指令萃取出日期、券商代號、買張、賣張以及買賣超資訊。 ![Raw Volume Data](https://i.imgur.com/ucTEAbC.png) #### Data Preprocessing 由於data本身格式,index有很多重複的日期以及券商代號 重新解構,讓data架構可以更清晰 ![](https://i.imgur.com/F9COfSb.png=300x300) 如此一來,Y軸的index則可呈現每個交易日,X軸為所有分點,值則為該分點在該日的買賣超數量,若當日無買賣則呈現NaN :::success * Data Discription: 縱軸: 從2011/01/03至2021/10/18之交易日,共2650天 橫軸: 所有券商分點; 值: 該分點於當日買賣超張數 ::: ![](https://i.imgur.com/aP9ATRy.png) 我們將上表以時間為X軸,買賣超為Y軸畫出如上圖。 由於分點的數量太多,以至於整體圖面過於密集,然而也可以看出其中也不乏許多分點在日買賣超會超過+-500張的情形。 ### 過濾部分較無價值data #### Seven Techniques for Data Dimensionality Reduction https://www.kdnuggets.com/2015/05/7-methods-data-dimensionality-reduction.html * #### Missing Values Ratio. Data columns with too many missing values are unlikely to carry much useful information. Thus data columns with number of missing values greater than a given threshold can be removed. The higher the threshold, the more aggressive the reduction. 各分點對於此檔股票的交易頻率可以定義為 $$(1-m)*100%$$ 其中$m$為Missing Value Ratio。 * 過濾交易頻率過低的分點 當分點交易頻率過低,則也意味該分點對股價的影響力應也較低,故過濾該分點data應對分析影響不大,甚至可能因為過濾掉一些雜訊而讓訓練分析結果更好。 ![Missing Value Ratio](https://i.imgur.com/7SkvDZg.png) $\quad$ 從上圖中可以看出,在1184個券商分點中,有許多分點參與交易並留倉的天數比不到1%,故透過給定一個threshold參數來過濾掉交易比例較少的分點,且亦可作為後續動態調整的參數。 $\quad$ 最後,將股價資料與籌碼資料進行concat後可得以下結果: ![Volume and Price Data](https://i.imgur.com/dH04h7D.png) :::success * Data Discription: 縱軸: 從2011/01/03至2021/10/18之交易日,共2650天 橫軸: 前85項為在這些交易日中,實際交易天數超過50%的券商分點; $\quad$  後3項為這些交易日該檔股票的開盤價、收盤價以及漲跌幅 ::: ## Problem formulation 本篇將用三種交易策略進行比較: |項次|策略|備註| |---|---|---| |1|黃金交叉策略|Benchmark| |2|羅吉斯回歸分析|利用前80%交易日(2011-01-03至2019-8-14)的籌碼及股價漲跌作為訓練資料,用訓練結果預測後20%的交易日(2019-8-15至2021-10-18)當日漲跌 | |3|LSTM模型分析|利用前80%交易日(2011-01-03至2019-8-14)的籌碼及股價***漲跌幅***作為訓練資料,用訓練結果預測後20%的交易日(2019-8-15至2021-10-18)當日***漲跌幅*** | |項次|策略名稱|策略實質運用| |---|---|---| |1|黃金交叉策略|以每日收盤價格計算MA5及MA20,當MA5向上穿越MA20時,則於次日開盤買入一單位;反之賣出。| |2|羅吉斯回歸分析|若預測當日收盤相較前一日為漲,且手中無持股時,則於當日開盤進行買入;若預測當日為跌,手中有持股時,則於開盤時賣出,其餘情況則不進行交易| |3|LSTM模型分析|若預測當日收盤相較前一日的漲幅超過1%,且手中無持股,則於開盤進行買入;若預測當日收盤相較前一日的跌幅超過1%,且手中有持股,則於開盤進行賣出;其餘情況則不進行交易 | :::info Remark: 1. 為求簡單的比較,本篇將忽略每次交易所需成本(eg: 交易手續費、交易稅) 2. 交易策略中不討論放空;且報酬率定義如下: $$ Return_i = (\frac{SellPrice_i-BuyPrice_i}{BuyPrice_i})\times 100\%,\ i表示第i次交易 $$ $$ Total\ Return = \prod_{i=1}^N (1+Return_i) -1 , \ 其中N為總交易次數$$ ::: ### 1. Benchmark: MA5/MA20黃金交叉策略 * 交易策略: 當5MA向上穿越20MA線時進行買入;反之則賣出 ![5MA&20MA曲線圖](https://i.imgur.com/amuzeYI.png) 上圖為以每日收盤價格畫出的5MA及20MA的曲線圖。 ![黃金交叉交易策略](https://i.imgur.com/VeQeR6R.png) ![MA Return](https://i.imgur.com/BmW3Vpy.png) :::success 使用5MA搭配20MA的黃金交叉策略,在2019-08-15至2021-10-18間得到的總報酬率為33.07%, 共交易16次。 ::: ### 2. Logistic Regression預測漲跌 $\quad$ 首先將股價漲跌二元化: $$Y_{i}=\left\{\begin{align} 1,\ if \quad close_i-close_{i-1} >0\\ \quad 0,\ if \quad close_i-close_{i-1} \leq 0 \end{align}\right.$$ $Y_i$表示個股當日漲/跌,當日收盤相較前日收盤為漲時,$Y_i=1, 反之Y_i=0$ #### 日籌碼預測漲跌結果 ![](https://i.imgur.com/TVfgGbU.png) :::success 由羅吉斯回歸分析結果的confusion matrix可以看到: 利用前80%的籌碼資料來預測後20%的股價漲跌Accuracy為79% ::: * 交易策略: * 若手中無持股: 當日預測為漲則開盤買入 * 若手中有持股: 當日預測為跌則開盤賣出 * 其他狀況則不作交易動作 $$Action[i]=\left\{\begin{align} Buy\ at\ Open[i],\ if \quad Position[i-1]=0 \ and \ Pred[i]=1\\ \quad Sell\ at\ Open[i],\ if \quad Position[i-1]=1 \ and \ Pred[i]=0 \\ \quad Hold\ the\ Postion[i-1], \ else \end{align}\right.$$ ![Logistic Transactions](https://i.imgur.com/VG8L754.png) ![Logistic Return](https://i.imgur.com/gdS0PUG.png) :::success 羅吉斯回歸預測漲跌的策略交易在2019-08-15至2021-10-18間得到的總報酬率為:24.32%, 共交易137次 ::: ### 3. LSTM預測模型: * 交易策略: * 若手中無持股: 當日預測為漲幅超過1%則於開盤買入 * 若手中有持股: 當日預測為跌幅超過1%則於開盤賣出 * 其他狀況則不作交易動作 $$Action[i]=\left\{\begin{align} Buy\ at\ Open[i],\ if \quad Position[i-1]=0 \ and \ Pred[i]>0.01 \\ \quad Sell\ at\ Open[i],\ if \quad Position[i-1]=1 \ and \ Pred[i]<-0.01 \\ \quad Hold\ the\ Postion[i-1], \ else \end{align}\right.$$ ![LSTM 交易節錄](https://i.imgur.com/xZupLHm.png) ![LSTM Return](https://i.imgur.com/Ju4Dmth.png) :::success LSTM預測模型的交易策略在2019-08-15至2021-10-18間得到的總報酬率為:57.57%, 共交易72次 ::: ## Analysis |項次|策略|總報酬率|交易次數|MDD| |---|---|---|---|---| |1|黃金交叉策略|33.07%|16|14%| |2|羅吉斯回歸分析|24.32%|137|23%| |3|LSTM模型預測分析|57.57%|72|26%| ![Return Comparison](https://i.imgur.com/2Kdw6at.png) ## Conclusion * 券商分點籌碼交易資料有機會反映出個股股價的漲跌,若能有效運用,搭配不同投資策略可能可以提升投資獲利率 * Future work: 1. 對其他個股進行分析,或許只有針對某些個股有較明顯的主力分點才能有較顯著的效果 2. 運用不同Machine Learning模型分析 3. 加入針對突發性暴跌事件作出相對應的措施的方法 --- ---