online gambling singapore online gambling singapore online slot malaysia online slot malaysia mega888 malaysia slot gacor live casino malaysia online betting malaysia mega888 mega888 mega888 mega888 mega888 mega888 mega888 mega888 mega888 機器學習在量化投資中的應用:從技術分析談起

摘要: 前言:最近特別忙,寫畢業論文,找工作,忙得不亦樂乎。碩士兩年來做的一些工作,導師沒有讓我往畢業論文裡面寫,我感覺到,這兩年的一些經驗以及所思所想,可能沒有辦法寫成正式的文章了,特別可惜。所以我決定開一個知乎專欄,把自己的一些思考拿出來與大家分享。我從來沒有將機器學習應用在量化投資的實戰經驗(其實我神馬實戰經驗也沒有。。),但是讀過相當數量的相關論文。很多論文,如許多網友所噴,“這玩意兒根本不work”。說實話,我也知道這些論文不work。但是“不work”並不代表“沒用”。一篇文章裡,能有一個閃光的思想,對真實投資有一些借鑒價值,我覺得這篇文章就是“有用”的。而所謂的“不work”,是指把這篇文章的方法應用於真實投資,沒法賺錢。這是廢話,能賺錢,我發出來給你看?我始終認為,看出一篇文章“不work”,並不需要什麼水平,而能從這篇“不work”的文章中,找到有用的信息的人,才是真大神。所以我希望大家能以一個欣賞的眼光去看待這個專欄裡的文章(好吧,其實我只是想少挨點兒噴。。)。我將把我在這個問題機器學習(非傳統統計方法如回歸)到底在量化金融裡哪些方面有應用? – Weicong Liu 的回答下的回答,一條條拓展出來,細緻地寫。水平有限,錯誤難免。廢話到此為止,希望我能把這個專欄堅持下去:)......

 


▲(來源:36大數據)

在這篇文章裡,我想講的,是那些將技術分析和機器學習算法相結合的論文。首先,我會簡要介紹一個最常用的技術分析方法:雙移動平均線法。然後,我將簡要介紹一下相關的論文。本文的重頭戲是,我想跟大家一起,發現這些方法的問題,逐步把這些方法變成一個“看起來還蠻像樣”的投資策略。我首先聲明,這個方法是否work我也不知道,因為我沒有細緻地嘗試。我想展示的,是一個思考問題的思路。

移動平均線法

一、 下圖展示了一個雙移動平均線的例子。

 

 

雙移動平均線的用法是: (1)用兩個長度不同的窗口,計算價格數據的移動平均值; (2)當短的移動平均值穿過長移動平均值時,一個買入信號就誕生了。隨著時間的推移,當短的移動平均值小於長的移動平均值時,就產生了一個賣出信號。 這個方法是如此的簡單方便,很多散戶都會或多或少地使用該方法。學術界對這個方法亦有很大的興趣。文獻[1]首先從假設檢驗的角度,去驗證這個方法在實際數據上的盈利能力。而後有很多論文利用這篇文章中提供的方法,在不同的數據集上驗證。他們的結果都表明,長期來看,如果不考慮交易費的話,這個方法貌似還有一點點的盈利能力,但是如果一點考慮交易費,這個能力就基本為0了。

移動平均與機器學習算法

那麼,這樣一個簡單的移動平均的方法,是怎麼被應用在機器學習算法中,進行投資的呢?千萬不要小看研究人員的腦洞(不過這似乎也不需要太大的腦洞)。 讓我們隨手從機器學習的武器庫裡面挑個武器吧。恩,就神經網絡好了,這玩意兒最近很火。要很深嗎?咱們先用個淺的玩玩吧。我們需要給自己設定一個目標,這個目標是,我希望通過歷史數據值,預測第二天的股價漲跌。有了這個目標,我們乾脆把神經網絡當成一個分類器用。在每一天t,我都基於歷史數據,建立一個輸入向量x_t。看,機會來了,我們可以把移動平均線產生的信號,當成這個特徵向量的某個維度。如果移動平均線讓我們在某天持有該股票,那麼我們可以把這個維度設為1;而在其他的天數,我們則把它設為0。 除了移動平均線,股票的技術分析手段中還有好多可以產生類似信號的東西,比如MACD,RSI之類。所以,我們可以利用這些信號,把它們安放在不同的維度,構成我們輸入向量x_t。標籤y_t就容易了,如果t+1天收益率為正,則設為1,否則為0。至此,一個二分類問題的訓練集構建,就搞定了。 這個方法看起來很簡單,也確實沒啥難想的。相關的文獻不少,可以看參考文獻[2, 3, 4]。在那個年代,這些文章都取得了相當的引用量。

二、 問題與改進

顯然,這樣的方法是存在問題的。而且看起來圖樣圖森破,甚至有點兒naive。在這一節,我們將一步一步,把這個方法變的“看起來還蠻像樣”。

趨勢的表示

使用技術分析手段的人,被認為是趨勢跟隨型的投資者(​​可能有誤。。)。這些論文裡面也聲稱,他們希望通過神經網絡來預測趨勢。但是,趨勢就是明天股票收益的正負嗎?讓我們來看個例子。下圖是我截取的蘋果公司從2009年10月29日,到2011年10月24日的股價。這是一個非常明顯的上升趨勢。但是,在這個趨勢中,日收益率為正的比率是多大?答案是只有55%。所以你看,把第二天股票收益率的正負當成趨勢的表徵,並不靠譜。

 

 

那麼,能不能換一個靠譜一點兒的方式來表達趨勢?也就是表達y_t?當然可以。一個簡單的方法是,我們可以把計算t+1,t+2,…,t+N,這些天收益的平均值,觀察其正負,構建新的y_t(正則1,否則置0)。當然,N是一個可以由你設置的量。

更進一步

經過上一步的改進,這個方法好像似乎有點兒像樣了。我們來理一下思路。我們是怎麼來解決這個問題的呢?步驟如下:(1)大喊一聲“我要做趨勢投資者”,(2)找到那些聲稱表徵趨勢的技術指標,構成輸入向量x_t,(3)為這些向量配備一個表徵趨勢正負的y_t,(4)扔進一個神經網絡訓練,(5)利用訓練好的神經網絡預測。

還是有點兒naive,我們甚至都沒用到神馬金融上的概念。在3.1節的結尾,我們說要用t+1,t+2,…,t+N,這些天的收益的平均值,觀其正負,來構建y_t。這似乎比較靠譜了。但是細細一想,假如這些天收益的平均值為0.02,但是標準差達到了0.04,我們這麼做似乎有點兒慌。而如果這些天的收益平均值是0.01,但是標準差只有0.005,似乎這麼做還是靠譜的。這就提醒我們,作為一個趨勢投資者,在動盪裡,我們如浮萍一般無依(當然,動盪則是另外一些交易者發家致富的機會)。我們構建y_t的時候,不能只去想收益的平均值,還要考慮它的波動。

有了這個概念,我們就可以重新思考下y_t的設定。我們將t+1,t+2,…,t+N這些天收益的平均值記為r_t,而標準差記為sigma_t。我們考慮這樣一個量r_t – lambda * sigma_t的正負。這裡,lambda是一個事先設定的常量,它有一個比較好的金融角度的意義:它體現了投資者對風險的厭惡程度。Lambda越大,厭惡性越強。 當然,你可能覺得這個波動率估計的太不准了。不是有個拿諾獎的工作,(G)ARCH,用來估算波動率的嘛。你也許也可以用它替代sigma_t。......

轉貼自: 36大數據

 


留下你的回應

以訪客張貼回應

0
  • 找不到回應