# 動能策略:基於動能策略實現精明股票投資決策的Python應用 ## 1. 專案概述 * 簡介:這是一個使用Python進行動能策略分析的投資應用。 * 主要目的:協助運算,幫助使用者做決策 * 主要功能:是從網路上爬取道瓊30股指數的成分股,並根據過去6個月的報酬表現,每月選出表現最好的組別(贏家)和表現最差的組別(輸家),持有6個月並比較報酬,驗證動能策略的效果。 * 結論:持有報酬表現最好的組別(贏家)和借券賣出表現最差的組別(輸家)可無風險套利賺取中間利潤。 ## 2. 學習目標 - 熟悉使用Pandas等Python套件進行資料爬蟲、清理與分析 - 證明可以用利多消息在完全效率市場獲利 - 了解常用的投資分析方法與指標,如動能策略 - 將財金知識應用在程式能力上 - 培養解決實際投資應用問題的能力 ## 3. 預期成果 * 證明可以利用利多消息在完全效率市場獲利 在完全效率的資本市場假設下,股票價格已充分反映所有可取得的信息,不應存在任何獲利機會。 **完全效率的資本市場假設簡單例子:** 今天新聞說台積電會漲的消息,但這個消息早就讓台積電股票漲起來了,所以這時候因為這個利多消息買的投資人並不可能因此獲利,因為早就漲完了。 * 動能策略的效果似乎與完全效率的資本市場假設有所違背,動能策略能夠在短期內(3-12個月)獲得顯著正報酬。這表明市場對信息反應不足,存在趨勢持續的現象。 * 現象說明,雖然長期而言股票價格趨向於反映所有信息,但短期內價格還是存在反應不足或過度反應的情形。投資者心理和交易摩擦等使得股票價格短期內偏離理性價值的現象時有發生。 * 動能策略正是利用了這些市場短期無效的機會獲利。它並不違反市場整體上仍趨向於效率的假設。 ## 4. 技術選擇 - 程式語言:Python - 主要套件:pandas、pandas_datareader、matplotlib等 - 資料來源:維基百科、Yahoo Finance - IDE:Google Colaboratory - 執行環境:Jupyter Notebook ## 5. 功能特色 - 從網路自動爬取道指30股成分股 - 計算個股的過去6個月報酬 - 比較表現最好和最差股票的未來6個月報酬 - 驗證動能策略的績效 ## 6. 目標市場 該應用適用于希望了解及實作動能策略的投資人或學生。 也可提供投資經理人進行策略效果快速驗證之用。 ## 7. 動能策略解釋 * 股票依據過往期間的表現進行排序由低到高分成10等分 The 第一個十等份 portfolio → losers組合 The 第十個十等份 portfolio → winners組合 :::success **由低到高分成10等分** ![截圖 2023-12-07 晚上8.13.07](https://hackmd.io/_uploads/ByOePVyIa.png) ::: * 每個月 (month t)投資策略為買進贏家的股票,賣出輸家的股票 (零成本投資)借券賣出輸家拿到的現金,去買贏家的股票 :::success **持有時間圖:** ![截圖 2023-12-07 晚上8.12.56](https://hackmd.io/_uploads/ryhyPVkUa.png) ::: ## 8. 程式碼概要 1. 從wiki 上抓取目前道瓊工業指數的成本股 (Dow Jones 30) 2. 利用列表中的30檔股票,在Yahoo Finance上爬取歷史的月報酬資料。 3. 計算每檔股票的過去六個月累計報酬率 (選股) 4. 計算每檔股票的未來六個月累計報酬率 (投資績效分析) ## 9. 動能策略成果展示 ### 道瓊斯指數6個月平均報酬 在樣本期間內(49個月),道瓊斯指數的未來6個月平均報酬率為5.74%。 :::success **運算結果:道瓊斯指數未來六個月平均報酬率** ![截圖 2023-12-07 晚上8.37.58](https://hackmd.io/_uploads/HJr0nVyLa.png) ::: --- ### 平均報酬率比較 * 在樣本期間內,Winner組合的平均報酬率為9.66%,高於Loser組合的6.84%。 * 這顯示了動能策略在過去的表現中,贏家組合的未來6個月平均報酬率確實優於輸家組合。 ### 組合間報酬率差異 * Winner組合的平均報酬率相對於Loser組合高出約2.82個百分點,即-6.84%與9.66%之間的差距。 * 這顯示動能策略在樣本期間內實現了一種套利機會,可以透過長持贏家組合並短持輸家組合,從中獲得超額報酬。 :::success **運算結果:贏家組合、輸家組合的未來六個月平均報酬** ![截圖 2023-12-07 晚上8.37.35](https://hackmd.io/_uploads/Sy5WpVyLa.png) ::: ## 10. 結論 ### 套利機會 * 結論指出,那投資者能買進報酬率9.66%的Winner組合,並借券賣出報酬率6.84%的Loser組合,便可無風險套利賺取中間的2.82%。 * 這強調了動能策略的潛在有效性,特別是在捕捉市場中相對強勢和弱勢股票方面。 ## 11. 挑戰與解決方案 * 挑戰:動能策略涉及到大量的金融理論和數學應用 解決方案: 熟讀所有會應用到的理論,並查閱大量資料且反覆理解。 * 挑戰:有些中文網站無法使用爬蟲 解決方案:查找解決方法,打開google sheet 使用IMPORTHTML fuction,成功將所需資料爬下。 * 挑戰:要將策略實踐需要很多不同的功能,很複雜 解決方案: 將程式碼拆分,先寫好一個部分功能才做下一個,不要一次寫很多個功能。如果未來有考慮將專案擴大,必須將程式碼重構寫成class,一個功能就寫一個class。 * 挑戰:變數太多了,而且同質性功能多 解決方案: 未來會寫一個step的抽象類別(abstract class),將不同的步驟繼承step,會比較簡單明瞭。 ## 12. Demo結果: https://github.com/louis-5407/DataMomentumAnalyzer