實戰AI炒港股騰訊大勝 中電跑輸

實戰AI炒港股
騰訊大勝 中電跑輸

【數碼金魚缸】最近看新聞,有指澳門賭場已運用人工智能,分析賭徒的影像,來判斷他是否「大把錢輸」的客仔,重點給予優惠。又有公司用AI分析央行發表的聲明用語,藉以預測息口走勢,聲稱可以在千分之一秒內完成分析並傳給客戶作投資決定,而且準繩度不差於人肉分析員。AI應用越來越廣泛,甚至有人拿來預測股價,希望跑贏大市,本文測試當中流行的技術,看看如何在股市中運用AI。

深度學習(Deep Learning)是近幾年連連取得突破的AI範疇,無論是圍棋、打機、繙譯、人臉辨識、駕駛,都發展出媲美或勝過人類的演算法。深度學習的基礎,是利用神經網絡算法,去消化大量的數據,梳理出當中的特徵、規律,然後作出預測。

神經網絡可以怎樣預測股價?首先當然要把大量歷史數據「餵」給演算模型,讓它去自行尋找「規律」,越多案例、數據,對改善預測表現越有幫助,不過與識別人臉不同,股票價格是用時間串起來,過去一段時間的股價走勢或會對未來股價有啟示,故此模型必須有「記性」,將過去可能有用的特徵記下來供未來使用。

以長短期記憶預測股價

若論「有記性」的深度學習模型,則以長短期記憶LSTM(long short-term memory)較受歡迎,因其三度閘門的設計,可以決定把甚麼參數傳遞到未來,具體運作涉及到相當繁複的線性代數及微積分的運用,不過大部份神經網絡的核心概念,都是把數據透過一層一層的神經網絡,轉化成為正確的答案,例如臉孔的主人、明天股價升跌等,當中透過設置一個損失函數,讓模型學習如何靠近目標,這損失函數就像你射的箭與紅心的距離,或預測股價與實際股價的差別,透過調校大量參數來縮窄損失,便可以增加模型的準繩度。

以LSTM來預測股價,網上有大量資源,我今次測試的,是名為DeepTrade的程式,讀者有興趣的,可到Github下載運行*。程式需要輸入股票或指數的價格資料作訓練之用,包括開市價、即日最高最低價、收市價及成交股數,我從yahoo finance下載50隻恒指成份股由2000年起的價格資料(扣起長實地產(1113)及九倉置業(1997)等上市時間太短的案例),在選擇收市價時,我用的是反映股息及拆股合股影響的經調整收市價。

在輸入基本數據後,程式會自動計算大量特徵,如最高最低、開市收市的價格變化、RSI強弱指數、MACD、保力加通道、移動平均線等共61個指標,而模型每次會拿取30天的樣本及61項特徵來學習。

程式的AI會每天預測一個持貨百分比P,1代表滿倉,即把你預算投入這股份的資金全部用來掃貨,0代表清倉,並在每日收市前調整比重,如今天的預測是P = 0.7,而昨日的P是0.5,即代表要加注兩成資金。

模型的指導思想,亦即其損失函數為:
-100乘以﹝P *(R - c )﹞的平均數

其中c為資金成本(假設為0.02%),R為次日股價回報率,P為持倉百分比。若AI預測股價上升,便會建議一個較高的P值,反之亦然,變相以趨吉避凶來提升回報。

程式以Python撰寫,LSTM模型則要安裝Tensorflow及Keras程式庫來運行。程式會扣起每隻股份或指數700天的數據,不用於訓練,而是用作測試訓練後的模型表現。若訓練時模型表現遠好於測試數據的表現,或顯示模型過份擬合(overfit),即太過為訓練數據度身訂做,反而影響實際表現,便需再作調校。

原程式建議訓練3,000回合,讓參數可以逐步提升預測能力,但我的電腦太慢,姑且訓練30次看看結果怎樣。

拿扣起的700日數據來看訓練結果,以騰訊(700)為例,程式於2016年7月開始作出預測,開始時通常是滿倉,到年底開始大幅減持至零持股,數十天後確認騰訊反彈,又恢復滿倉,但因為之前沽了貨,故一直跑輸長揸的表現,到去年3月開始,大部份時間處於沽清狀態,至今年頭才大部份時間滿倉,結果其回報達157%,大幅跑贏長揸的74%。

當然,程式也有失手時,例如用中電(002)測試時,回報(連股息)便跑輸8個百分點。程式建議大部份時間滿倉,只在幾個調整位沽貨,但顯然低估了中電的反彈力度,故此一路追不過長揸的表現。

我再次強調,本文只是測試AI預測股價的能力,並非建議實戰,一來以上在計算回報時,未有計入佣金及買賣差價等交易費用,故此若依程式頻繁進出(如騰訊便要增減持近200次),其成本肯定拖低回報。雖然程式在損失函數中加入資金成本,已令AI在優化時減少改變持倉的次數。

另外,程式是假設你可於臨近收市前根據程式的建議調整持倉比重,若轉倉的作價不貼近收市價,出來的回報便有偏差,這都是實戰中會遇到的實務問題。

同時,AI只是分析你輸入的股價特徵作出決定,但往往不能解釋其決定,有點像黑箱作業,雖然高手可以從其參數中發掘AI對不同特徵的重視程度,從而解讀它的取捨準則,但大部份時間仍然是霧裏看花,正如開發AlphaGo的團隊,也未必能夠解釋程式的每一步棋。

AI低估中電上升力度,故回報跑輸長揸表現。

近年成對沖基金寵兒

要進一步改良程式的預測能力,可以考慮增加訓練回合,調整學習速度(learning rate),又或更換不同的技術指標供AI學習,這些可以留待有興趣的讀者慢慢發掘。
AI炒股近年成為對沖基金的寵兒,這些大鱷不惜工本地投資在這項新技術,那是否代表業餘散戶注定在這場科技競賽中敗陣?我看又未必,若有留意一些AI國際競賽的話,不時會出現一些年輕勝出者,他們未必對這些模型背後的複雜數學充份了解,但他們像tune hi-fi一樣tune手上的模型,到最後表現可以擊敗很多數據科學家。

網上課程助AI新手入門

對一般人來說,AI好像太高深,學習門檻非常人可及。不過,我的經驗告訴我,好像學習任何科學一樣,都可以先從實驗着手,待引發興趣後,再淺入深地鑽研背後的理論。坊間其實有很多程式套件,有齊數據庫及程式,供你去領略AI如何可以認字認人及作出預測。

若你想了解背後的原理,我推薦美國史丹福大學教授吳恩達在Coursera的網上課程,吳恩達是港人之後,在香港曾居住了一段短時間,他是公認的AI權威,曾為谷歌、百度創建AI實驗室,他創辦Coursera之初,亦是以自己的AI課程作招徠,其講學深入淺出兼生活化,已吸引逾200萬人報讀,而且若不需要拿證書,課程是完全免費,他不時出席講座介紹AI發展,是AI普及化的大推手。

尼奧

作者簡介:一個有IT背景的交易員,遇上由財經轉戰編寫程式的IT初哥,大家都相信未來投資要靠科技,人機合一必有所得。
作者電郵:mailto:[email protected]
* https://github.com/happynoom/DeepTrade_keras