市場情緒量化~新聞情緒指標編制
財經新聞常常影響投資者的決策行為,在1980年代,網路還不普及時,財經新聞甚至可以主導股價波動,影響散戶的投資決策,甚至還發生華爾街日報財經新聞記者勞勃·福斯特·威南斯(Robert Foster Winans)涉入內線交易的醜聞。現今消息面來源較廣,較難發生單一專欄記者透過自身謀體影響力,影響股價的事件,但是如何能量化大量新聞?下文將有詳細說明
新聞情緒指標編制
新聞情緒指標是指透過蒐集新聞報導,並透過正向辭彙字典,分析當中正向詞和負向詞各數,計算出情緒分數。蒐集新聞文字,可以透過爬蟲的方式,爬取多家網路新聞,例如工商時報,自由時報,經濟日報等等。但是蒐集新聞時需要注意,是否爬取的網站有延續爬取限制,或是網站中非目標類新聞過多(例如過多八卦娛樂新聞等,因此推薦使用工商時報和經濟日報,當中八卦娛樂新聞較少),導致新聞情緒分數失真
字典選取:
- 台灣大學自然語言處理實驗室(NTUSD)中文正負向詞彙字典
- jieba套件中文正負向詞彙字典
NTUSD正負向詞舉例正向詞不凡的、公平的、友善的、引人注目的、出眾的負向詞不公平的、不確定的、不正直的、劣等的、不好的
方法1:正向詞彙數-負向詞彙數
方法2:[正向詞彙數-負向詞彙數]/總共詞彙數
實際操作案例
以台燿(6274)、中鋼(2002)、達能(3686)三間在2010/01/01–2020/12/31為例,以工商時報為新聞來源,使用NTUSD正負向詞字典,方法2計算新聞情緒分數。由於中文不像英文在詞與詞之間有空格作為斷詞,因此還需透做jieba 套件,將連續的文字,斷詞後形成一個一個詞彙,方便計算市場情緒分數。
操作步驟流程圖:
操作流程為,先從工商時報爬取特定公司相關新聞。因中文不像英文會有空格作為斷詞,因此需要透過Python中的Jieba 套件去進行中文斷詞,將一句話斷成一個一個獨立單詞。例如 「中鋼預計在第二季營收大漲」會斷詞為「'中鋼' '預計' '在' '第二季' '營收大漲'」。將斷詞完成後,再利用(NTUSD)中文正負向詞彙字典進行情緒分析。
買賣策略
我設定兩個簡單的策略,分別為順向策略和逆向策略。順向策略買點設定為情緒分數由負轉正時,賣點為情緒分數由正轉負時。逆向策略買點賣點設定均與順向策略相反。
績效
下圖為台燿(6274)、中鋼(2002)、達能(3686)回測績效,其中以中鋼交易次數最多,達能次之,台耀最低,我認為原因為,中鋼在此期間為盤整走勢,上下趨勢波動頻繁,且蒐集到的新聞量較多,因此交易次數非常高,但是他的報酬率卻遠不如達能,再者我撰寫成事時忽略交易成本,若考量交易成本中鋼的報酬會再降低許多,因此我認為我應該加上濾網,控制交易次數,才能改善績效。
完整程式碼
爬蟲和斷詞
情緒分數計算
買賣策略