深度學習做股票預測靠譜嗎?

用LSTM做過很多sequencial data的預測發現效果驚人的好,不知道是否有人嘗試過在股票預測方面的應用。


給你講個段子!真實的!

我去一家量化交易公司實習,一次meeting中,我和老總還有一個資深大佬談機器學習在股票和期貨裡面的應用。

我:LSTM在時間序列上應用的效果比較好,我們可以嘗試把LSTM應用在股票預測上。

此時,大佬在陰笑,老總默不作聲...

我:你為啥笑

大佬: 不work啊!

我:為什麼不work?!

這時老總也在旁邊強掩笑容,大佬終於忍不住說了,有兩個原因,第一個是你如何保證你的因子有效?

老總就補充到:對啊,你的模型很可能garbage in garbage out.

我說:那你們提供因子來訓練模型啊

大佬陰笑....

然後大佬又繼續說:第二個就是,你非常可能過擬合!

我說:那我們可以加regularization啊。

接著他們倆忽略我的話了,老總接著說:其實我們是想要一個模型能根據每天的數據進行反饋,自動更新。

我一想,這TM的不就是reinforcement learning嘛,我說:可以用reinforcement learning試試。

大佬又開始笑了,我很納悶。

大佬說:我就是知道他們有些人在用reinforcement learning,我才能賺錢!!!

最後實習結束之後,在大佬的帶領下,我才明白了交易的三重境界

歸納

演繹

博弈

所謂的深度學習不過是基於歷史數據進行擬合的歸納法罷了,如果把深度學慣用來做股票預測,長期的是expected虧錢的,因為市場在變,規律在變,歷史可能重演,但是又不盡相同。

深度學習肯定是可以用在股票市場的,比如針對某隻股票的新聞情感分析等。但是不能用來預測市場走向!!!

想在市場上賺錢,就得博弈,你得知道其他人在幹什麼,因為市場是有所有的參與者共同決定的。

舉個簡單的博弈方法:

中國的期貨市場之前很長一段時間,很多人,包括一些機構,都在用趨勢策略,不同人和機構之間不外乎就是趨勢的策略參數不同,讓策略性能稍有不同,入市出市點不同,但是大體是類似的。所以這個時候,你應該知道市場上有一部分資金是在用這種趨勢策略在跑的,那麼在未來的某一個時間點,這些策略會相繼的發出信號,然後人們去執行買入賣出的操作。

所以有趣的地方來了,既然你已經知道有一部分人在幹嘛了,你是不是就可以設計策略來巧妙的利用其他的人的策略呢?你是不是可以設計一個類似的趨勢策略,來告知你別人在這個時候可能會幹嘛,而你來選擇做更有意義的事情,而不是是不斷去改進所謂的趨勢策略呢?

所以,回到深度學習的問題上,如果深度學慣用來歸納過去的數據,然後來預測股票走勢,我覺得是不靠譜的。但是如果能想辦法把深度學慣用在博弈問題上,那麼我覺得有可能靠譜。

-----------------------------------------------------------------------------------------------------------------------

更新:我在另一個回答里舉了一個應用深度學習和博弈思想的例子,有興趣的可以了解下。

MilKY:機器學習(非傳統統計方法如回歸)在量化金融方面有哪些應用?

我再在這裡總結一下我自己對博弈在交易里的理解。我真心就是一個只實習了很短時間的新手,以前也沒接觸過金融或者量化這一塊(只是個碼農而已....),理解上肯定有很多偏差和不足。大佬們,如果你們覺得回答裡面有什麼不妥,本屌非常歡迎賜教啊!

核心思想:

無論你用不用深度學習,除了價值投資,你要賺錢,那麼就得有人虧錢,所以說你的交易邏輯本身得是正確的才行,也就是說你設計好一個策略後,你要知道你賺的錢是從哪來的。很多人賺錢的時候稀里糊塗的,我們不妨稱之為運氣好。但是你如果明白你是運氣好,並且不斷探索原因的話,你很有可能未來還會賺錢。而事實是大多數人明明是運氣好但是卻覺得是自己聰明,從而未來大虧甚至傾家蕩產。

如何應用深度學習呢,假設你已經明白了你得賺錢邏輯,但是這個邏輯里有些事情你一個人做不完,用計算機幫你做,用深度學習幫你做效率更好更快,那麼深度學習不是就派上用場了。

我個人認為深度學習不過是個複雜的函數映射逼近演算法,你的邏輯就是你的函數,邏輯都不正確,逼近得再好又如何?


感覺沒人正面回答這個問題,我僅站在技術的角度去拋磚引玉的歸納一下這個問題,先陳述一下Deep learning的要點:

首先,Deep learning能做一切數據挖掘有關的事情,區別在於你能不能結合自身的經驗去建立一個較優的模型,讓learning更加的「高效」,這種「高效」包含但不限於:學習時間、學習誤差率、學習魯棒性、學習所耗費的資源等。

其次,Deep learning處理的數據前期至少要求是相對全面的,不全面的數據、甚至如果有重要的數據有所隱藏,對於任何學習模型來講基本都是災難的。(假設世界上除了男人、女人,還有第三種人,你在不知道的情況下如何去分類?怎麼分類都是錯的)

再次,Deep learning所謂的模型,對於目前而言,受限於基礎理論,建立模型的過程是漸進的、甚至是需要人工的,所以「調參」的手段是有很大的「主觀成分」在裡面的,所謂的「主觀成分」不單單是說在股票行業經驗越多越好,而且要求是正確的、有體系(結構化、去噪音)的經驗,事實上,很多投資經理自身投資的過程中受限於壓力,經常帶入了很多非科學、非理性的情感,甚至犯很多基礎錯誤,導致投資失敗。也就是說:模型即使是對的,調參人員太傻比也不行!

最後,Deep learning是統計學和機器學習兩門科學的交叉科學,它的宗旨是通過統計學習方法運用機器學習的運算(實現)思路,讓機器幫我們去計算各種事件出現的概率,協助我們去分類大數據、預測新的樣本為【某個特定分類】的概率等等。但是,僅僅是「概率」,既然是「概率」必然也就只是可能性而已。

有了上面四個簡單的Deep learning基礎咱們再來看股票預測這個問題,思路會很清晰:

根據第一點股票預測這件事情肯定是可以做的,因為股票預測是數據挖掘的問題,無非也就是根據一堆數據分析去得出一個分類而已:{0:漲,1:跌}。但是,用Deep learning去做靠譜嗎?

我們說這個問題取決於前面Deep learning提到的後三點:你的數據是否全面?你的模型在建立的過程當中,負責調參的人靠不靠譜?然後,介於Deep learning只是概率事件,你是不是用一次成敗去論英雄?

在提到數據全面這個問題上,我們不得不承認,在中國的股票市場是不適合用數據去預測的,因為中國的市場是有操縱嫌疑的(這個僅僅代表個人的觀點哈,不喜勿噴),很多企業的內部數據基本都是不向外開放、甚至刻意利用信息不對稱去操縱股價,這個我就點到為止吧,相信大家都承認,扯多了就是不技術問題了,而是政策問題。

相對而言,在數據準確、全面的基礎之上,我們去做DL會好很多,但是這個時候我們也不能說DL得出的結論一定是靠譜的,因為受限於基礎理論,目前的DL基本都需要人工去調整參數,這個時候考慮的就是調參人員的經驗了。為了彌補這點,在美國華爾街,很多對沖公司都是形成一個個的項目組,一個項目組成員包含:分析員(DL、ML)、資深經理人(對股票的了解深入骨髓)、操盤手(負責根據DL、ML的結論操作數據)等等。但是即使這樣,由於跨界的隔閡,團隊也不一定能夠100%的建立一個牛逼的模型,這個時候就需要一個「交叉科學家」:他上知技術、下知股票行業,同時也是個很好的管理者,這樣的人員去做leader,然後協調技術和證券人員模型才能更好的建立,舉個例子:數學家西蒙斯:華爾街最賺錢的基金經理_天馬_新浪博客

最後提到一點Deep learning是一個概率的事件集,即使是目前看似神武圍棋DL程序alphaGo,在前期也是屢次失敗的,因為它走每一步棋都只是代表「走完這一步之後我的棋盤局面會是【相對最好】的概率」,為什麼是相對,前面提到過,受限於資源,DL不可能計算每一種可能性,利用牛頓下降法、改進梯度下降法也只能是讓我們達到局部最優,而不是全局最優。而即使達到全局最優,DL運算也是給出每一種結果成功的概率,概率只是可能性。筆者自己嘗試著在10台機器上面基於tensorflow框架跑過一個自己改造的圍棋DL程序,由於計算資源不足,導致隱節點數量和深度都只能調整很低,所以效果只能說一般(但比我自己強[害羞])。

所以,站在技術的角度,DL做股票分析是靠譜的,但是前提是你的數據得準確、調參人員兼顧技術+股票經驗、並且承認成功也只是概率事件。而且,現在在華爾街,美股市場中幾乎每家對沖基金公司都在用DL預測,只有有些公司做得好、有些公司做得差而已。筆者也從朋友那裡聽說過,目前貌似國內有個90後掌控了幾百億資金在做「量化交易」,做的是美股市場,真假我就不保證了,但是應該有。


總體看下來大家意見偏negative 我認為是這樣
這是兩個問題
(a)股票價格可不可以用量化模型預測
(b)如果(a)答案是yes,那麼DL是不是也是一個有用的工具。
關於(a),是個信仰問題。你可以看出來就在這個問題里很多人是專業做量化模型預測價格來交易的。他們肯定相信(a)是成立的,就像干中醫的肯定相信中醫理論是有價值的。但他們能不能拿出對立立場的人能接受的嚴格證明,比較難。(賺了錢也可以argue是運氣好,何況悶聲發大財的人更多)
關於(b),如果OLS有用,普通的「技術指標」(可以看做是簡單的信號處理濾波器)有用,沒有道理認為DL不可能有用。但是用DL做這方面研究可能很難,如同任何一個試圖在金融市場上賺錢的approach一樣難。其實DL拿來做圖像識別,語音識別也是很艱巨的任務,現在看起來得來如此容易,是因為巨大量的工作被人做好打包分享出來了。要是沒有開源這回事(包括開源軟體包和公開的文檔,技術演算法教程),從0開始做個識別個MNIST數字也是很困難的事情。量化金融和機器學習兩個領域,恰好是開源共享精神的兩個極端。一個生怕別人知道,一個生怕別人晚一秒知道。


1. 線性模型沒做到極致前別聊決策樹;
2. 決策樹沒做成功前別聊神經網路;
3. 淺層神經網路沒做成功前別聊DL;

隨著模型複雜度不斷的提升,往往意味著過擬合更大的可能性。

為什麼會源源不斷有更複雜的模型出現,恰是為了解決之前模型在應用層面上遇到的一些不完美地方。問題在於增加了新的解釋項後,伴隨產生的還有更多的假設前提和額外參數。

對quant來說,做研究也好,調參也罷,都是細雕慢琢的手工活,完全是基於大量苦逼而重複實驗的前提下,建立起對應用場景的熟悉度後,才會有突然的神之領悟。

何謂大師,就是一看你用的啥模型,調的什麼參就知道你這模型跑出來是啥結果,然後隨口丟給你一堆參數都比你苦逼調試幾個月後的效果要好。哪些參數需要固定,哪些參數調試的步長需要是多少,還有每個模型設計時的初衷是為了解決什麼問題,等等不一而足。quant這行做機器學習能稱得上大師的,目前只聽說過國外某top fund的某大牛。

那些動不動就喜歡搞個複雜模型彎道超車的童鞋們,我奉勸還是收起幻想,腳踏實地的從最基本的線性模型做起吧。更何況,你連100個能拿出手的因子都沒有,難不成煮飯也不需要米么?

quant這行業也一樣——無他,唯手熟爾。


看了圈回答,大部分都挺好。有幾個實操中比較重要的點還沒怎麼被提到,我補充兩句。
先放結論:現階段有點難度。

1. 拐點的問題。有個效應叫海岸線效應,就是說你遠看能看出來波浪的大致曲線,但離近了看卻發現是鋸齒狀的。
股票也一樣,你遠看有大致趨勢。但近點看就不一定能看出來。
究竟哪裡是「拐點」?人是夠嗆,深度學習目前來看也夠嗆。

2. 金融要求你有歷史積累來證明自己的模型是可行的,總不能你用一晚上就說這玩意好使吧?就好像某一年收益率大於巴菲特的人很多,但這麼多年保持這個收益率的又有幾個?
對於大部分想搞這方面的公司來說,即使真有,也還需要時間證明,現在市場上沒聲音也正常。

3. 承接上一點,有個邏輯上的問題,你這個模型要好使那你幹嘛給別人用啊?比如你要好使就不出來融資到處說了,自己悶聲發大財啊。你出來說就代表這個玩意可能有問題。

4. 還有個模式是不直接炒,而是買分析數據給別人。但這又帶來了新的問題: 如果你的預測和分析數據是好用的,那肯定有人狙擊,這樣就變得不好用了。別以為需要很多人,實際經驗告訴我們一個消息有 XXXX 人知道了基本上就有人狙擊了。除非你滿足於百分之零點幾的增長。XXXX 具體多少可以自己猜

5. 假設這一切問題你都克服了,然後來到了我國偉大的 A 股市場,看到一隻股票預測必火。結果因為股東還沒解禁,刻意打壓股價,得,啥演算法都白扯。

不過雖然說了這麼多問題,我們還是感覺這事挺有意思的。

在外面等著見客戶的時候手機打的,比較累等回去用電腦繼續整理。


實現深度學習的最重要因素是海量數據。

這決定了深度學習不適合預測長線,對於短線預測可能有效,不過前提也是資金量不太影響市場的情況下。

a股只有幾千個個股,每年的牛股就更少了,二十多年來總共的牛股數量遠遠低於深度學習所需要的數據量(為什麼說牛股,因為你要超越市場呀,當前大多數的量化結果還不如隨便買個股票放在那不動)。

短線的數據量是足夠多的,但是還存在一個問題。

短線預測類似天氣預報,而對短期走勢產生影響的因素相比天氣因素,估計會更多。這會不會產生過度擬合?不好說。

更為重要的,是預測天氣不會對天氣產生影響。但是預測市場後,參與市場,就會對市場產生影響,特別是資金量較大的情況下。


要說一些非常掃興的事情~

通過我對股票和深度學習的理解。

用深度學習來預測普遍存在的問題有兩點。


第一是數據缺失嚴重。

數據當然是越精確越好, tick 級別的最好, 最近幾年tick 級的數據好找,應該也比較準確。 但10 年之前 tick 級的數據就比較難找了, 就算找到也不能保證這是準確的。 導致能拿去訓練的,只有08年 - 17 年這麼多的數據。


第二個問題就是過擬合。

拿過去9年的數據做training , 最近1年做validation 。 調參數, 調出了一個比較好的參數。 但要怎麼保證這個參數在未來的幾個月內依然表現良好 ?

為什麼有很多策略回測表現完美,但實盤就不行了? 就是因為過擬合。


要是還有一個問題, 那就是 經濟學到底能不能用數學來解釋 ?

許多人把深度學習作為萬能法寶, 但Andrew Ng 曾經說過, 如果有些問題 如果人解決不了。 機器也不行。

這篇論文 The sciences are different and the differences matter. 下載鏈接 http://isi-dl.com/downloadfile/31596

討論了一個問題 , 社會學能不能用數學定量解釋 ?

經濟學某種程度來說也是社會學的範疇, 很多事件是人為主觀推動的, 只不過這個事情最後在數學上有反應。


幾年以後如果DL 真的能預測出股票走勢,我一點都不驚訝。 但任重道遠。



為什麼任何人經過兩三個月都會跑deep learning代碼,但是正經做dl的大公司還是只喜歡要科班phd呢?因為機器學習並不是無腦扔進黑箱子,而是建立在統計學,可學習理論基礎上,對過擬合的科學研究。


Lstm 對序列數據處理能力我是不懷疑的,我也做過很多實驗,但是做股票分析就差遠了,這完全不是序列數據分析這麼簡單的問題,我敢保證這個世上至少一百萬的人想過用lstm 或者其他時序分析的方法來預測股票,但是如果做的出來的話早就悶聲發大財去了誰還去讀什麼博士。

通常一個東西沒有人做出來有兩個原因,一是大家做過了做不出來,二是這個東西沒有意義。我想賺錢應該算不上沒有意義吧

股票預測絕不簡單是一個序列數據丟到深度學習裡面就可以發大財的問題,比如買入點,交易量,歷史價格,k線一大堆東西你都不知道用哪些數據。所以股票預測是要在你了解股票金融市場數學模型的背景下,同時具有統計和深度學習等等相關理論的條件下才有可能找到一個入手點,我想這世上沒幾個人能夠做到發財的地步。

當然也不要這麼悲觀,說幾個真事:
1.香港有個科研工作者用模糊理論做股票預測已經成為富翁了
2.我導師的朋友用馬爾科夫理論做個自動炒股軟體每年也穩穩的賺點零花錢
3.我一個學長用深度學習成功預測出了兩次股災,論文已經發了,當然細節我沒關注過

題主可以深入研究這個問題,我覺得這個問題至少可以作為一個博士課題,如果解決了記得告訴我,我和導師都yy 一年了


我的觀點是股票預測可以做,也可能靠譜,但對於國內股市,可能不靠譜,而且做得好的人,往往悶聲發大財,不對外聲張。


有人說用dl做日線數據不夠,那麼做高頻數據就夠了?問題不在於數據總量夠不夠,而是相對穩定的規律產生的數據夠不夠。

貓和狗的樣子幾百年不變所以dl做圖像識別可以很成功。

高頻數據中的統計特徵變化的很快,慢的話以星期算,快的話按小時甚至分鐘算。雖然有些規律會反覆出現,然而這種「重複」本身則是低頻數據。

當然對於金融數據而言,無論高頻低頻,複雜規律(傳統統計難以描述,需要藉助dl來存貯和表達)的存在性和一定時期內的穩定性(可提取性)是肯定的。問題是使用ml工具來提取相對傳統統計工具而言是否值得。


這是我的專欄里之前寫的一篇文章,拋磚引玉吧。用lasso/gbm/random forest/deep learning來研究螺紋鋼分筆數據的。

比如一開始先簡單準備一下數據,這是螺紋鋼某段歷史的數據,150天吧,40天訓練,10天驗證,100天測試,夠意思了吧。

train.range &<- 1:40 valid.range &<- 41:50 test.range &<- 51:150 train.mat &<- prepare.tick.data(signal.list, y.str, product, all.dates[train.range]) valid.mat &<- prepare.tick.data(signal.list, y.str, product, all.dates[valid.range]) test.mat &<- prepare.tick.data(signal.list, y.str, product, all.dates[test.range])

然後看看數據量

&> dim(train.mat)
[1] 1609232 12
&> dim(valid.mat)
[1] 407031 12
&> dim(test.mat)
[1] 4017980 12

還是挺大的,比如訓練集160萬,驗證集40萬,測試集400萬,因子11個,還有一個因變數。

然後再看看它的表現,先用lasso,對lambda進行regularization,

&> n.coef &<-100 &> grid=10^seq(-4,-7,length=n.coef)
&> x &<- as.matrix(train.mat[1:(ncol(train.mat)-1)]) &> x.valid &<- as.matrix(valid.mat[1:(ncol(valid.mat)-1)]) &> x.test &<- as.matrix(test.mat[1:(ncol(test.mat)-1)]) &> fit.lasso &<- glmnet(x,train.mat$y,intercept=FALSE, lambda = grid,alpha=1) &> coef.mat &<- coef(fit.lasso)[-1,] &> if (dim(coef.mat)[2]&<100) n.coef &<- dim(coef.mat)[2] &> oos.mat &<- rep(0,n.coef) &> for (i in 1:n.coef) {
+ cur.coef &<- coef.mat[,i] + pred &<- x.valid%*%cur.coef + oos.mat[i] &<- R2(pred,valid.mat$y) + } &> best &<- which.max(oos.mat) &> best
[1] 62

大概100組參數優化一下,然後找一個最佳的,貌似是第62個,上圖:

應該還是欠擬合的,反正實驗一下不管了,我最主要的是看看測試機的表現。這裡縱坐標是驗證集的擬合優度R平方。

&> pred.test &<- x.test %*%
coef.mat[,best]

&> R2(pred.test, test.mat$y)

[1] 0.0108247

大家記得這個結果,樣本外R^2是1.08%,以後作為一個參考的基準。

然後我們看看一些複雜的模型,首先當仁不讓的顯然是gradient boosting machine (gbm),華麗登場。。。

&> set.seed(100)
&> n.tree &<- 300 &> depth &<- 10 &> n.tree &<- 600 &> depth &<- 10 &> system.time(gbm.model &<- gbm(y~., data=train.mat, shrinkage = 0.01, + interaction.depth = depth, distribution="gaussian",n.trees=n.tree, verbose=FALSE)) 用戶 系統 流逝 5899.52 1.08 5928.26

運行了整整5928.25秒!寫一篇日誌容易么我。。。看看我做科研多認真。。。嘻嘻

&> best &<- which.max(gbm.r2) &> best
[1] 282

省略一部分代碼,我們主要優化的是樹的數目,看多少棵樹合適,我一共600棵,其中它說最好是282,哈哈,不錯,上圖:

&> gbm.test.pred &<- predict.gbm(gbm.model,newdata=test.mat[,1:(ncol(valid.mat)-1)],n.trees = best) &> R2(gbm.test.pred, test.mat$y)
[1] 0.01765722

然後看看樣本外,同樣的數據這次是0.01765722,比lasso好多了,5900多秒不是吃乾飯的。。。

然後看看隨機森林,說實話這個我不大熟,貌似好慢。。。那就試試h2o這個包吧,還是挺高達上的,很多斯坦福統計系教授是它的顧問,包括Elements of Statistical Learning的幾個作者。。。

&> library(h2o)
&> h2o.init(
+ nthreads=-1,
+ max_mem_size = "8G")
Connection successful!

R is connected to the H2O cluster:
H2O cluster uptime: 4
hours 4 minutes
H2O cluster version: 3.10.5.3
H2O cluster version age: 1
month and 30 days
H2O cluster name: H2O_started_from_R_pc_igo044
H2O cluster total nodes: 1
H2O cluster total memory: 6.42
GB
H2O cluster total cores: 20
H2O cluster allowed cores: 20
H2O cluster healthy: TRUE
H2O Connection ip: localhost
H2O Connection port: 54321
H2O Connection proxy: NA
H2O Internal Security: FALSE
R
Version: R version 3.3.3
(2017-03-06)

&> h2o.removeAll() # Clean slate - just in
case the cluster was already running
[1] 0

我的電腦配置一般啦,人窮志短,莫笑。。。。還要對數據進行處理

&> train.frame &<- as.h2o(train.mat, destination_frame = "train.frame") |===========================================================================================================================================| 100% &> valid.frame &<- as.h2o(valid.mat, destination_frame = "valid.frame") |===========================================================================================================================================| 100% &> test.frame &<- as.h2o(test.mat, destination_frame = "test.frame") |===========================================================================================================================================| 100% &> dim(train.frame)
[1] 1609232 12

然後就可以建模了。。。其實對隨機森林真心不大熟,就對深度進行優化吧,省略一些過程:

&> best &<- which.max(rf.r2)*2 &> best
[1] 10
可見最優的模型是深度為10的情況,我們看看樣本外的結果:
&> h2o.rf.model &<- h2o.randomForest(x=1:11, + y=12, + training_frame = train.frame, + seed=100, + ntrees=500, + max_depth = best) |===========================================================================================================================================| 100% &> h2o.test.pred &<- as.vector(h2o.predict(h2o.rf.model, newdata=test.frame)) |===========================================================================================================================================| 100% &> R2(h2o.test.pred, test.mat$y)
[1] 0.0133576

最後10層最優,跟gbm貌似一樣,gbm我隨便取的10層哈。。。結果是0.0133576,比lasso好,比gbm差,這是樣本外的。。。。

好了,最後關鍵時刻到了,deep learning粉末登場!!!

其實這個deep learning參數有點多,我先放代碼再解釋:

n.level &<- 13 dl.r2 &<- rep(0,n.level) for (i in 2:n.level) { h2o.dl.model &<- h2o.deeplearning(x=1:11, y=12, training_frame = train.frame, seed=100, input_dropout_ratio = 0.2, activation="RectifierWithDropout", hidden = rep(i,3), hidden_dropout_ratios = rep(0.3,3), distribution = "gaussian") h2o.valid.pred &<- as.vector(h2o.predict(h2o.dl.model, newdata=valid.frame)) dl.r2[i] &<- R2(h2o.valid.pred, valid.mat$y) cat(i,dl.r2[i]," ") }

比如它有hidden和dropout,就是隱層結構和省略的比例,regularization防止過度擬合用的,我也充分參考了Andrew Ng,俺也是上了他三門deep learning的好嗎。。。

調參還行吧,反正一共3層,然後我對每層的節點數進行優化,2、3、4...13,都試一下,大概這樣吧,dropout概率就0.3吧,參數太多了,這可如何是好啊。。。

&> best &<- which.max(dl.r2) &> best
[1] 11
模型說11層最好,還是夠deep啊,然後看看結果:
&> h2o.test.pred &<- as.vector(h2o.predict(h2o.dl.model, newdata=test.frame)) |==========================================================================================================================================| 100% &> R2(h2o.test.pred, test.mat$y)
[1] 0.01183622

算的這麼辛苦最後才0.01183622

lasso 是0.010, deep learning是0.0118,random forest是0.013,gbm是0.01765....

貌似看不出deep learning有什麼出彩的地方哈。。。

當然有同胞弄出了xgboost,要說支持不支持,我肯定是支持的,可惜效果不大好,就不顯擺了。。。


我的答案是肯定的。
個人而言,說否定的,可能是陷入了兩個誤區:
1.認為股價預測只依賴於歷史價格,將預測簡單地看成是一個時間序列問題;
2.對人工智慧的期望太高,期待有一個人工智慧程序能夠完全代替人來做決策,自動買賣,而且穩賺不賠。而一旦這個目標不易實現時,就會完全否定人工智慧在股市中的價值。

眾所周知,要在股市中賺錢,需要有掌握信息的優勢,利用信息的不對稱,從信息匱乏的一方身上賺錢,比如:
股市老手,掌握更多的基本面分析(看得懂財報)和技術分析(對K線分析得好)手段,這類人可能比股市菜鳥賺錢;
掌握內幕信息的人,不用說,這類人也更有可能賺到錢。

那麼將人工智慧技術應用於股市,其實不是說讓人工智慧代替人去做決策,而是指讓人工智慧去扮演一個「信息處理助手」的角色,去輔助人做決策。
股市分析包括基本面分析與技術分析兩大塊,而人工智慧技術在這兩方面都能發揮作用:
1. 基本面分析
簡言之,就是讀取各類財經資訊。
面對網上海量又紛繁複雜的信息,只依靠人腦已經無法解決問題了。而深度學習在自然語言處理領域的應用,可以做到在海量的信息中做出自動摘要,提取出精華信息以幫助人類進行決策。
另外,股票價格在很大程度上是由買賣雙方的力量對比決定的,是由每個股民對某支股票的情緒而決定的。而情緒識別已經是人工智慧所擅長的技術了(見《人工智慧可以解決的12類問題》Twelve types of Artificial Intelligence (AI) problems)。國外已經有很多這方面的研究,簡單的,比如trump2cash(maxbbraun/trump2cash: A stock trading bot powered by Trump tweets,分析trump的tweet來預測股票的價格),複雜的,比如DataMinr這家start up專註從社交媒體中提取有價值的金融信號。
2. 技術分析
傳統技術分析中的K線分析,什麼「大陽星」、「小陰星」、「旭日東升」,「穿頭破腳」,其實就是人腦的模式識別。受人腦信息處理能力的限制,這些識別出來的模式有以下缺點:
(1)只是單條K線的、只是基於一個模糊的形狀,似是而非的、沒有確切的數字標準的;
(2)基於有限的歷史信息的。
而好的深度學習策略,可以突破人腦的限制,比如突破單一K線的限制,從更多的財經信號(其他股票、黃金、外匯等)中尋找規律;或是從一個更長時間段的歷史信息中識別出規律。

總之,人工智慧將提升我們處理信息的深度、廣度。使用基於人工智慧技術的「智能投顧」的人,將比不運用或是還在利用「人腦」進行基本面分析與技術分析的人占信息優勢,從而也就更可能在股市中盈利。

本回答來自Emotibot機器學習工程師趙傳霖。


我倒是會深度學習,也考慮過用LSTM和GAN來做個預測策略。但是我現在上實盤的套利腳本用的是強化學習。

你說呢?

順便給你看一下強化學習的跨市套利腳本收益,這個是一個實盤的倉:

這個客戶是9月3號開始跑的,這個哥們9月5號因為監管,部分價格大跌,害怕,停了一天,不然現在策略產生的和持倉不動相比收益應該是2000多,持倉收益應該有15500左右。

另外……實際上深度學習做股票也是靠譜的。目前我測試過的可以用做情緒博弈預測漲跌壓力的方法來做漲跌概率預測。只不過夏普和勝率沒想像中那麼高罷了。


可以寫的


用來優化參數更靠譜,預測的話還是基本面和資金結構。


1、股市是一個開放的系統
2、只能掌握局部信息
3、規則是不固定的

1、圍棋是一個封閉的系統
2、可以掌握全局的信息
3、規則是固定的


首先說說炒股和傳統機器學習任務的理解吧。
傳統機器學習的任務好比是一個考試。MNIST有一堆數字的observations,泰坦尼克有一堆乘客的observations。模型訓練完把這些observations的label給出來,對多少個拿多少分。炒股和考試不一樣,它是一個博弈的過程,它的結果和多少分沒關係,只有輸贏。你考了30分,其他人都是29分,你也能賺錢。你考了90分,別人都是95分,你還是虧錢。
答主不是業界人士,只是一個工科的學生,但是從身邊的情況也能看出來,現在的大環境是,全世界最頂級的人才和最優秀的資本都在往金融圈裡靠,「剩下的」才會到一些傳統工科中。金融圈競爭這麼激烈,如果有一個屢試不爽的方法能夠穩賺不賠,大家都會迅速跟進,那麼這個方法就會大打折扣。就像海龜策略一樣,剛剛發明的時候對那時的環境也是屢試不爽,但是大家知道有一個這麼樣的策略之後,迅速研究出龜湯策略,之後海龜策略的效果就大打折扣了。
回到機器學習的話題,大家機器學習的理解還是比較模糊的,一萬個人里會有一萬個解釋。答主個人的理解從PRML的書名而來,也就是說機器學習的目標實際上就是模式識別。問題是,漲的股票和跌的股票的pattern是不是能夠很穩定的得到?它們會不會隨時間變化?我相信炒過股票的人都有深刻的理解,在這裡不展開了。
總的來說,我覺得不能說ML,DL在股票預測中完全·沒有用,但如果想開發一個像Alphago這樣可以充當所有人老師的萬能型炒股AI現在來看還是不可能。


股票預測是什麼。股票是上市公司的一種載體,表現的是上市公司的運營狀況。

這會有人說,中國股市你講這些。

股票預測是什麼,不懂,但是股價是有邏輯的。是可以分析的,預測本身就扯。

遊資都知道是什麼,遊資主力買股票的邏輯是公司本身價值投資者看重,在各種增持,定增,收購後。遊資來乘風炒作。那你說股價可以分析嗎?

天山股份

之前我寫的文章也分析過這隻股票。最近也被遊資炒到大火。

但我買賣的依據不是K線,不是人告我代碼,而是分析。

2016.6.25,第一次定增預案定增價6.07。當時價格6.13. 溢價率-0.9%

2016.8.8,股東大會否決定增,此時股價6.55.

2016.9.29,第二次定增預案定增價6.86。當時價格6.69,溢價率2.5%

看過這一遍歷史,是不是該有些想法。什麼動力促使大股東,在經過3個月的時間裡,增持成本價格提高,市場情緒不佳(3120點跌回2900)這樣的壓力下,還要堅持溢價定增。

當然之後受遊資炒作就是另一番風景了。

混改大潮,不知道你們選擇了什麼。

吐槽基本面無用,資金面無用。還是分析無用。技術面無用,當然不是。

騎行客五碗面,缺一不可。

附上之前寫的文章以證清白。

大海航行靠舵手,混改最重要的是方向

一次成功的調倉

「多面共振」的選股之道


推薦閱讀:

上市公司的股票進行拆分的依據是什麼?
怎麼看待最近搜房股票的大漲?市值為什麼會是搜狐的兩倍多?
國內比較好的財經網站是?您在炒股時常用的網站是?
優質資產注入上市公司的具體形式是怎樣的?

TAG:人工智慧 | 投資 | 股票 | 股票市場 | 深度學習(Deep Learning) |