丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號安全和更好的產(chǎn)品體驗,強烈建議使用更快更安全的瀏覽器
此為臨時鏈接,僅用于文章預(yù)覽,將在時失效
人工智能 正文
發(fā)私信給楊曉凡
發(fā)送

0

能用強化學(xué)習(xí)買賣比特幣賺錢嗎?能能能,當(dāng)然能!

本文作者: 楊曉凡 2018-02-15 14:46
導(dǎo)語:只要訓(xùn)練出好模型,既能發(fā)論文,又能掙外快

雷鋒網(wǎng) AI 科技評論按:人工智能熱潮還沒過去,電子貨幣和區(qū)塊鏈的熱潮又滾滾而來。以 BTC(比特幣)為代表的電子貨幣近半年來吸引了全世界的注意力,每個人都想在這個熱潮中分一杯羹 —— 只不過,不是每個人都賺到錢了,尤其是經(jīng)驗不足的投資者們。

那么問題來了,現(xiàn)在人工智能技術(shù)也有了長足進步,連 AlphaGo 在打敗柯潔之后都還能繼續(xù)進化,可以對圍棋無師自通,所以我們有沒有機會同樣用 AlphaGo 所用的強化學(xué)習(xí)(Reinforcement Learning)方法學(xué)習(xí)一個百戰(zhàn)百勝的電子貨幣人工智能呢?

斯坦福大學(xué)計算機系畢業(yè)生、曾在谷歌大腦團隊研究機器翻譯、對話建模和總結(jié)的深度學(xué)習(xí)研究員 Denny Britz 近日就在一篇博客中發(fā)表了自己的觀點并介紹了相關(guān)入門知識。他認為訓(xùn)練基于強化學(xué)習(xí)的交易人工智能不僅可行,而且還是一個非常有價值的研究課題。雷鋒網(wǎng) AI 科技評論把這篇博客全文翻譯如下。

能用強化學(xué)習(xí)買賣比特幣賺錢嗎?能能能,當(dāng)然能!

深度學(xué)習(xí)的學(xué)術(shù)研究人員們一直以來都和金融投資市場保持了相當(dāng)?shù)木嚯x。這可能是由于金融界的名聲不好,或者是這個問題從研究的角度來看不夠有趣,也可能是因為獲得數(shù)據(jù)太貴太困難。

我會在這篇文章中論證這個觀點:訓(xùn)練一個強化學(xué)習(xí)智能體在金融(以及加密貨幣)市場中交易也可以是一個非常有意思的研究課題。我覺得學(xué)術(shù)研究界并沒有給這個問題給予足夠的重視,但其實這個問題有潛力推動許多相關(guān)領(lǐng)域的技術(shù)發(fā)展。這個問題和訓(xùn)練 DotA 之類的多玩家游戲智能體很像,其它類似的問題也還有很多。不過由于之前對投資交易沒有任何理解,我自己做這個項目花了好幾個月的時間。

請注意,我要研究的問題并不是「用深度學(xué)習(xí)預(yù)測價格」。所以如果你想看這方面的示例代碼和模型的話恐怕要失望了。我想從更高的層次仔細聊聊為什么用機器學(xué)習(xí)的方法學(xué)習(xí)交易很困難,以及我覺得強化學(xué)習(xí)可以完美替代哪一部分。如果大家對這個問題的興趣足夠濃厚,我可能未來會再發(fā)一篇文章介紹一些實證例子。

我估計這篇文章的大多數(shù)讀者都沒有什么投資交易經(jīng)驗,就像我當(dāng)時也是從頭學(xué)起一樣,所以我會首先介紹一些基本情況。這篇文章中我會以加密貨幣交易作為例子來分析,不過這一套想法同樣適用于大多數(shù)的其它金融市場。我選擇加密貨幣的理由是因為數(shù)據(jù)是免費的、公開的、便于獲得,而且每個人都可以參與交易。在其它金融市場進行交易的門檻要高一些,獲取數(shù)據(jù)也要貴一些。

加密貨幣交易市場的基本微觀結(jié)構(gòu)

加密貨幣市場(以及大多數(shù)金融市場)的交易都是以我們稱作「帶有開放式掛單列表的連續(xù)雙重拍賣」的方式在交易平臺上內(nèi)進行的。這種說法有點生硬,其實就是說這里有買家和賣家,經(jīng)過交易平臺撮合之后他們就可以相互交易了。加密貨幣的交易平臺已經(jīng)有好幾十個,每個交易平臺支持的幣種都有所不同。不過從界面和提供的數(shù)據(jù)角度來看,都是大同小異。

我們來看看 GDAX,這是美國開設(shè)的交易平臺里最熱門的之一。假設(shè)你要交易的是「BTC-美元」交易對(用美元換比特幣),那么進入交易界面以后,你看到的大概是這樣的畫面。

能用強化學(xué)習(xí)買賣比特幣賺錢嗎?能能能,當(dāng)然能!

頁面上提供了很多信息,我們從基礎(chǔ)的開始一項項看。

價格走勢圖(中央)

能用強化學(xué)習(xí)買賣比特幣賺錢嗎?能能能,當(dāng)然能!

圖中給出的當(dāng)前價格是來自于最近完成的交易的。根據(jù)最近發(fā)生的交易是買入還是賣出,這個價格會不斷變化。價格走勢圖通常會以 K 線圖的方式來顯示,其中的每一條紅色或者綠色的豎線就表示了那個時間段的開盤價、最高價、最低價、以及收盤價。在上面這張圖中,每一條豎線的時間段是 1 個小時,不過這個長短也可以自由選擇。價格線下方的柱狀線表示成交量,表示的是對應(yīng)時間段內(nèi)發(fā)生的所有交易的總量為多少。成交量也是一個重要指標,因為它可以體現(xiàn)出市場的流動性。比如假設(shè)你想買十萬美元的比特幣,但是沒有人愿意賣,那市場的流動性就非常差;也就是說你買不到。高成交量表示很多人都愿意參與交易,同時也就代表著你可以在愿意的時候隨時進行買賣??傮w來講,當(dāng)你越想投資很多錢的時候,你就越希望看到很高的成交量。成交量同時也體現(xiàn)了價格趨勢的「質(zhì)量」。高成交量下的價格趨勢變化要比低成交量下的價格趨勢變化更可靠。大多數(shù)時候,高成交量表示市場內(nèi)的相當(dāng)多參與者之間達成了共識(也有例外的情況,比如當(dāng)存在市場操控行為的時候)。

交易歷史(右側(cè))


能用強化學(xué)習(xí)買賣比特幣賺錢嗎?能能能,當(dāng)然能!

右側(cè)的列表顯示了所有近期完成的交易。每個交易都有成交量、價格、時間戳以及方向(買入還是賣出)。交易是掛單者和吃單者之間匹配完成的。下面還會詳細解釋。

掛單列表(左側(cè))


能用強化學(xué)習(xí)買賣比特幣賺錢嗎?能能能,當(dāng)然能!

頁面左側(cè)的這個就是掛單列表了,里面的信息就是誰想要在什么價格買入或者賣出多少。掛單列表分為了兩個部分,買單(bids)以及賣單(asks)。根據(jù)交易規(guī)則,賣一價(best ask)是所有當(dāng)前交易者里愿意賣出的最低價,它需要高于所有當(dāng)前交易者里愿意買入的最高價,即買一價(best bid)。如果新增加的買單價格高于賣一價,那么這筆交易就會立即成交;如果新增加的賣單價格低于買一價,同樣會立即成交。

每一筆掛單都有自己的價格和數(shù)量,比如圖中賣一是數(shù)量為 0.012、價格為 7886.98 的賣單,意味著你可以從這位交易者手上以 $7886.98 的價格買到 0.012 個 BTC。而如果你想要買的數(shù)量超過 0.012 個 BTC,你就還需要從列表中更高一位、報價更高的賣家手里再買入一部分。成交之后的賣單就會從掛單列表里消失,直到新增的賣單或者新增的買單補充了被剛才的交易清空的價位。換句話說,當(dāng)你買入或者賣出的時候,你實際上就改變了掛單列表里的買賣單分布。如果你買入或者賣出的量足夠大,你可能就會大幅改變掛單列表的狀況,并且影響到當(dāng)前價格。

另外值得注意的是,你實際付出的錢要多于「數(shù)量 x 價格」,GDAX 對每筆交易收取 0.3% 的手續(xù)費,在整個金融市場中都算是比較高的,其它多數(shù)加密貨幣交易平臺通常是在 0.1% 到 0% 之間。

更多細節(jié)信息以及操作指導(dǎo)可以搜索或者在交易平臺體驗一下,這里就不介紹更多了。

數(shù)據(jù)

我這篇文章選擇研究加密貨幣的主要原因就是因為數(shù)據(jù)是公開、免費、便于獲取的。多數(shù)交易平臺都支持流傳輸 API,可以實時獲取交易平臺的數(shù)據(jù)更新。在這里繼續(xù)用 GDAX 作為例子獲取數(shù)據(jù),不過其實其它交易平臺的數(shù)據(jù)也差不多。我們從頭開始做一下構(gòu)建機器學(xué)習(xí)模型需要的各個基本步驟。

交易 - Trade

假定一筆交易剛剛發(fā)生了。每筆交易的信息里都包含時間戳、交易平臺給定的唯一交易 ID、價格、成交量以及方向。如果想要根據(jù)交易信息做出 K 線圖的話,設(shè)定一個時間窗口,然后統(tǒng)計每個時間窗口內(nèi)的開盤價、最高價、最低價、以及收盤價,再把它們畫出來就好了。

{
   "time": "2014-11-07T22:19:28.578544Z",
   "trade_id": 74,
   "price": "10.00000000",
   "size": "0.01000000",
   "side": "buy"
}

掛單列表更新 - BookUpdate

假定掛單列表里的掛單更新了。每個掛單的信息都包含方向、價格以及這個價格的數(shù)量。注意這樣獲取到的數(shù)據(jù)只是掛單列表發(fā)生了變化的那一部分,要獲取整個掛單列表的話還需要自己進行合并。

{
   "type": "l2update",
   "product_id": "BTC-USD",
   "changes": [
       ["buy", "10000.00", "3"],
       ["sell", "10000.03", "1"],
       ["sell", "10000.04", "2"],
       ["sell", "10000.07", "0"]
   ]
}

掛單列表快照 - BookSnapshot

這和掛單列表更新類似,不過這是整個掛單列表。由于完成的掛單列表會很大,獲取一次完成列表之后都使用掛單列表更新會更快、更有效率。不過偶爾用一下整個掛單列表也還是很有用的。

{
   "type": "snapshot",
   "product_id": "BTC-EUR",
   "bids": [["10000.00", "2"]],
   "asks": [["10000.02", "3"]]
}

關(guān)于市場數(shù)據(jù),差不多知道這么多就夠了。以上這幾個事件獲取到的數(shù)據(jù)流也就是 GDAX 的網(wǎng)頁用戶界面上的所有信息。

幾個交易指標

在開發(fā)交易算法的時候,要以什么作為優(yōu)化目標呢?一個很明顯的答案自然是「盈利」,但其實故事并沒有這么簡單。你不僅需要把你的交易策略和基準線對比,而且你還需要評估它相比其它投資方式的風(fēng)險和穩(wěn)定性。下面我會簡單列舉幾個交易者們最常用的基本指標。

凈利潤/凈損失 Net PnL

一段時間內(nèi)算法賺到多少錢(正值)或者賠了多少錢(負值)的直接計算,另外還要記得扣除手續(xù)費。

Alpha & Beta

Alpha 形容的是,相比另一種風(fēng)險相對更小的投資方式,比如國債,這項投資的收益率能高出高多少。比如,相比國債的 Alpha 是 1%,就意味著在同一段時間內(nèi)的收益率高出國債 1%。Beta 也與此相關(guān),它形容的是你的投資策略相比整個市場的不穩(wěn)定性有多大。比如 Beta 為 0.5 就代表,當(dāng)整個市場的價格增加 $2 時,你的投資收益為 $1。

夏普比率 Sharpe Ratio

夏普比率代表著每一份增加的風(fēng)險所能帶來的收益的多少,比如每增加 1% 的風(fēng)險,增加的收益是 2% 還是 3%,顯然越大越好。它的計算過程不僅考慮到了策略的不穩(wěn)定性,而且也考慮到了轉(zhuǎn)向其它風(fēng)險更低的投資方式的可能性。

最大跌幅 Maximum Drawdown

最大跌幅形容的是一個局部極大值和緊接著的局部極小值之間的差距,是另一個針對風(fēng)險的指標。比如,最大跌幅為 50% 的策略意味著某個時候你有可能會損失 50% 的資金。那么接下來你的資金要翻一倍才能補回原來的數(shù)目。顯然,最大跌幅同樣是越小越好。

風(fēng)險價值 Value at Risk

風(fēng)險價值也是一個偏向于風(fēng)險的指標,假定市場運行正常的話,它在嘗試量化在給定的時間窗口內(nèi)損失一定資金的概率如何。比如,「1天 - 5% - 10% 的 VaR」代表一天之內(nèi)有 5% 的可能性在投資中損失超過 10%。

監(jiān)督學(xué)習(xí)

在從強化學(xué)習(xí)的角度研究這個問題之前,我們先看看用監(jiān)督學(xué)習(xí)的方式創(chuàng)建一個能盈利的交易算法會是什么樣的。我們也就會看到這樣做有什么問題,以及為什么我們會需要強化學(xué)習(xí)的方法。

最明顯的一種解決方案就是預(yù)測價格。如果我們能預(yù)測市場價格會漲還是會跌,那么只要低買高賣就好了。然而,這種思路有幾個問題。

首先,我們到底要預(yù)測什么價格?正如前文對掛單列表的分析所說,買賣的時候其實并不是針對單個價格的。最終付出的價格要看掛單列表里的掛單量,以及所付的手續(xù)費。簡單直接的做法自然是預(yù)測價格中點,即買一和賣一價格的平均數(shù)。這也是多數(shù)研究者的做法。然而,這個價格只是一個理論價格,并不是一個可以真的進行交易的價格,而且很可能和真實交易時的實際價格相去甚遠。

下一個問題是時間間隔。我們要預(yù)測的價格是下一筆交易的、下一秒的、下一分鐘的、下一小時的還是下一天的?僅憑直覺來看,要預(yù)測價格的時間點距離當(dāng)前越遠,預(yù)測結(jié)果的不確定性就越高,預(yù)測問題的難度也就越高。

下面舉個例子。假設(shè)當(dāng)前比特幣價格是 $10,000,然后我們準確地預(yù)測了一分鐘之后價格會上漲到 $10,050。那么這代表著我們可以從這次低買高賣中賺到 $50 嗎?我們分析看看。

  • 當(dāng)我們買入的時候,賣一價是  $10,000。大多數(shù)情況下我們可能沒法以 $10,000 的價格買到全部的 1.0 BTC,因為掛單列表里一般不會有足夠的量。很可能我們不得不在 $10,000 買到 0.5BTC,在 $10,010 買到另外 0.5BTC,平均價格為 $10,005。在 GDAX 上我們還要支付 0.3% 的手續(xù)費,這差不多是 $30。

  • 一分鐘過去了,價格漲到了 $10,050 了?,F(xiàn)在我們要賣出,然而市場變化速度很快,很可能當(dāng)我們下單的時候價格又變了。假設(shè)現(xiàn)在是 $10,045 吧,然后和買入的時候類似,我們很可能沒辦法在這個價格賣出全部的 1.0BTC,不得不在 $10,045 賣出 0.5BTC,然后在 $10,040 賣出另外 0.5BTC,平均價格 $10,042.5。然后還有 0.3% 的手續(xù)費,差不多也是 $30。

那么,這一筆交易賺了多少錢呢?-10005 - 30 - 30 + 10,042.5 = -$22.5。結(jié)果是并沒有賺到錢,雖然我們成功預(yù)測了價格上漲,但我們反而賠了 $22.5。上面的這個例子就顯示出了實際操作中會遇到的三個問題:賣一價/買一價的流動性不夠,網(wǎng)絡(luò)延遲,以及手續(xù)費,這三件事都不是監(jiān)督學(xué)習(xí)模型可以處理得了的。

從這里我們能學(xué)到什么呢?要憑借一個簡單的價格預(yù)測策略就掙錢,我們就需要在更長的時間內(nèi)預(yù)測相對大幅度的價格變化,或者非常精細地處理手續(xù)費和掛單。時間一旦變長,預(yù)測就變成了一個很難的問題;處理手續(xù)費和掛單也還需要單獨構(gòu)建一個復(fù)雜的系統(tǒng)來處理。

監(jiān)督學(xué)習(xí)的方法還有一個大問題,就是沒法從它里面推導(dǎo)出一個策略。在上面的例子里,我們買入是因為預(yù)測到價格會上漲,而且也確實上漲了,一切都基本按照計劃進行??墒侨绻麅r格是下降的怎么辦,那就賣出嗎?還是繼續(xù)持有等待?假如價格又小幅上漲了一點點然后繼續(xù)下降了怎么辦?以及如果我們對預(yù)測的結(jié)果不那么確定,認為 65% 的可能性漲、35% 的可能性跌,那么還要買入嗎?如何設(shè)定是否下單的閾值?

所以,如果要以監(jiān)督學(xué)習(xí)的方式解決,僅僅一個預(yù)測模型是完全不夠的(除非你的模型非常準確、非常魯棒)。我們還需要一個基于規(guī)則的策略模型,把價格預(yù)測的結(jié)果作為數(shù)據(jù),決定具體要怎么做。那么這個策略又要從何而來呢?如何優(yōu)化策略的參數(shù)和做決定的閾值?這幾個問題都不那么好解決,很多人會用簡單的啟發(fā)式方法,又或者直接憑人的直覺設(shè)定。

典型的策略設(shè)計工作流程

幸運的是,以上的許多問題都有解決方案。然而壞消息也有,就是這些方案并不怎么高效。我們來看看交易策略開發(fā)的典型工作流程,大概長下面這樣:

能用強化學(xué)習(xí)買賣比特幣賺錢嗎?能能能,當(dāng)然能!

  1. 數(shù)據(jù)分析:對數(shù)據(jù)進行探索性的分析,嘗試找到交易機會。你可能要看許多不同的圖表、計算統(tǒng)計數(shù)據(jù)等等。這一步的輸出是一個交易策略的「理念」,而且等待驗證。

  2. 監(jiān)督學(xué)習(xí)模型訓(xùn)練:如果有必要的話,你可能要訓(xùn)練一個到多個監(jiān)督學(xué)習(xí)模型用來預(yù)測能支撐你的交易策略發(fā)揮作用的數(shù)據(jù)點位。比如價格預(yù)測、交易量預(yù)測等等。

  3. 策略開發(fā):你需要嘗試寫一個基于規(guī)則的策略,根據(jù)市場的當(dāng)前狀況和監(jiān)督學(xué)習(xí)模型的預(yù)測決定采取什么動作。請注意,這個策略也會包含一些參數(shù),比如決定閾值,這也需要通過優(yōu)化學(xué)習(xí),只不過可以稍后再做。

  4. 策略內(nèi)部測試:在模擬器中根據(jù)歷史數(shù)據(jù)測試交易策略的初始版本。模擬器中可以包含掛單列表流動性、網(wǎng)絡(luò)延遲、手續(xù)費等等因素。如果策略在模擬器中的表現(xiàn)還不錯,那么你就可以進行下一步的參數(shù)優(yōu)化。

  5. 參數(shù)優(yōu)化:你可以用網(wǎng)格搜索這樣的搜索方法,嘗試策略中的參數(shù)的不同的值,比如閾值、相關(guān)系數(shù)等等,同樣在模擬器和歷史數(shù)據(jù)上進行測試。注意,如果對歷史數(shù)據(jù)擬合了會造成很大的風(fēng)險,準備驗證數(shù)據(jù)集和測試數(shù)據(jù)集的時候一定要小心。

  6. 模擬運行以及紙面交易:在真的讓交易策略上線運行之前,在本地根據(jù)實時獲取的新市場數(shù)據(jù)進行新一輪模擬。這叫做紙面交易,可以幫助防止過擬合。直到交易策略在紙面交易中的表現(xiàn)很好之前,都不要急于讓它上線進行真正的交易。

  7. 上線交易:確認沒有問題后,用 API 把交易平臺和策略連接起來,開始真實的買入賣出。

這是一個非常復(fù)雜的過程。根據(jù)不同的機構(gòu)或者研究人員,這個流程可能會稍有不同,但是交易策略開發(fā)基本上就是按照這個順序做下來的。那么,為什么我認為這個過程效率很低呢?原因有下面幾個:

  • 迭代周期很長。第一步到第三步很大程度依靠的是做事的人自己的直覺,直到做到第四步、第五步你才會知道自己想的策略效果如何,然后很有可能會導(dǎo)致你推倒重來。實際上,這里每一步都有失敗的風(fēng)險,逼得你不得不從頭開始。

  • 模擬測試的步驟太靠后了。直到第四步模擬的時候你才開始顯式地考慮延遲、交易費用、流動性之類的環(huán)境因素。可是難道這些因素不應(yīng)該在一開始設(shè)計策略的時候就考慮在內(nèi),或者直接作為模型參數(shù)的一部分么?

  • 交易策略和監(jiān)督學(xué)習(xí)模型是分別獨立設(shè)計的,然而實際上它們之間是需要緊密協(xié)作的。既然監(jiān)督學(xué)習(xí)模型的輸出需要作為策略的輸入,那么聯(lián)合優(yōu)化它們兩者不是更好么?

  • 交易策略很可能會太簡單。人類所能想到、能明確描述的東西太有限了。

  • 參數(shù)優(yōu)化過程效率太低。比如說,我們假設(shè)你優(yōu)化的目標是收益和風(fēng)險的綜合值,然后你希望優(yōu)化找到一組能帶來最高的夏普比率的參數(shù)。相比于高效的基于梯度的方法,你這里只能用低效的網(wǎng)格搜索,然后希望運氣好可以試到好的參數(shù)(同時還不要過擬合)。

那么,下面我們就看看強化學(xué)習(xí)能如何應(yīng)對上面的大多數(shù)問題。

用于交易的強化學(xué)習(xí)模型

我們首先回憶一下,傳統(tǒng)的強化學(xué)習(xí)問題可以用馬爾可夫決策過程(MDP)描述。首先我們有一個在環(huán)境中做出行動的智能體,在第 t 步時智能體把環(huán)境的目前狀態(tài) St 作為自己的輸入,然后做出行為 At;接著在 t+1 步中接收到反饋 Rt+1 以及更新的環(huán)境狀態(tài) St+1。智能體根據(jù)某個策略 π:At = π(St) 選擇自己的行為。那么我們的目標就是找到一個能夠在某個有限或者無限長的時間內(nèi)最大化累積反饋 ∑Rt 的策略。

能用強化學(xué)習(xí)買賣比特幣賺錢嗎?能能能,當(dāng)然能!

下面我們看看這些符號在交易環(huán)境下都分別對應(yīng)什么。

智能體

從最簡單的開始。這個智能體就是我們的交易智能體。你可以把智能體看作是一個仿人類的交易者,它會打開交易所,看著交易平臺的用戶界面,然后根據(jù)交易平臺的目前狀態(tài)和自己賬戶里的資金做出交易決定。

環(huán)境

這里開始有一點麻煩。顯然我們會認為交易平臺就是我們的環(huán)境。不過有一點值得注意的是,同一個交易平臺上還有很多別的智能體,有人類,也有一些基于算法的自動交易程序。假設(shè)某個時刻我們以分鐘為級別做出行動,那么就是做出一個行動,等待一分鐘,獲得一個新的環(huán)境狀態(tài),再做出一個行動,周而復(fù)始。當(dāng)我們觀察到了一個新的狀態(tài)之后,就會把它看作是市場環(huán)境的響應(yīng),其中當(dāng)然也包含了其它參與者的響應(yīng)。那么從我們的智能體的角度出發(fā)的話,別的這些參與者也同樣是環(huán)境的一部分,而且還不受我們的控制。

然而,如果把其它的市場參與者(智能體)看作是整個大的、復(fù)雜的環(huán)境的一部分的話,我們就失去了顯式地對它們建模的機會。比如,想象我們學(xué)習(xí)到了如何對其它市場上運行的算法和交易策略做反向工程,然后嘗試利用它們,這將是一件多么美妙的事情啊。假如這樣做的話,我們就來到了一個多智能體強化學(xué)習(xí)問題的環(huán)境下,這正是一個熱門的研究領(lǐng)域;我稍后還會多說一點。不過目前,簡單起見,就先假設(shè)不考慮這部分,就認為我們就是在單個的、包含了所有其它智能體的行為的復(fù)雜環(huán)境里面。

狀態(tài)

對于在交易平臺做交易來說,我們觀測到的并不是環(huán)境的完整狀態(tài)。比如,我們并沒有辦法識別環(huán)境中的其它的智能體、它們的數(shù)量如何、每個人各自有多少賬戶余額、各自有多少掛單之類的。這也意味著,我們要處理的是一個部分可觀察的馬爾可夫決策過程(POMDP)。智能體觀察到的并不是環(huán)境的真實狀態(tài)St,而是這個狀態(tài)的一部分衍生值。我們就把它稱作觀測值 Xt,它由全狀態(tài)的某個函數(shù) Xt ~ O(St) 計算得到。

在我們這個問題中,每一個時間步驟 t 中的觀測值僅僅是截至到 t 的所有交易平臺發(fā)生的事件的歷史(參見前文「數(shù)據(jù)」小節(jié))。這個事件歷史可以用來構(gòu)建當(dāng)前的交易狀態(tài)。不過,為了讓智能體能夠做出決策,還有一些其它的數(shù)據(jù)也應(yīng)當(dāng)包括在觀測值之內(nèi),比如當(dāng)前的賬戶余額、當(dāng)前的掛單列表,等等。

時間尺度

我們也需要決定智能體的行動應(yīng)該在怎么樣的時間尺度上做出。每天、每小時、每分鐘、每秒、每毫秒,甚至可變時間尺度?這些不同的選擇就各自需要不同的方法。如果買入一種資產(chǎn),持有它數(shù)天、數(shù)周甚至數(shù)月,基本上就可以認為這是長期投資,基于的分析是類似「比特幣未來會成功嗎」這樣的問題的。通常情況下,這類投資決定都是根據(jù)外部事件、新聞,以及對這種資產(chǎn)的價值和潛力的基本認識做出的。那么這類分析基本上也就需要對整個世界的運轉(zhuǎn)規(guī)律有相當(dāng)?shù)恼J識,很難自動化地使用機器學(xué)習(xí)方法。在另一個極端上,我們也知道有高頻交易(HFT)這樣的技術(shù),所有交易決定幾乎全部依賴于市場本身的微觀結(jié)構(gòu)信號。這些決定需要在納秒尺度上做出,運行在 FPGA 硬件上的算法簡單但是極為快速,掛單交易信息通過專門設(shè)立的線路連接并發(fā)送到交易平臺。

從另一個角度上,可以把時間尺度看作是「人性」的體現(xiàn),長期投資和高頻交易就分別在坐標的兩端。前者需要總體視角、需要對世界的運行規(guī)律有了解、需要人類的直覺和高層次分析,后者的全部奧妙則在于簡單但是極為高速的模式識別。

神經(jīng)網(wǎng)絡(luò)流行的原因之一就是因為,提供了許多數(shù)據(jù)之后可以學(xué)到比線性回歸或者樸素貝葉斯復(fù)雜得多的數(shù)據(jù)表征。然而神經(jīng)網(wǎng)絡(luò)的速度要相對慢一些,沒法在納秒級的速度上做出預(yù)測,從而也就沒法和高頻交易算法的速度競爭。所以我認為神經(jīng)網(wǎng)絡(luò)發(fā)揮作用的甜點應(yīng)當(dāng)就在這兩個極端當(dāng)中的某處。我們希望選擇這樣一個時間尺度:在這個時間尺度上它分析判斷數(shù)據(jù)可以比人類更快,但同時也足夠聰明,可以勝過那些「快但是簡單」的算法。我的猜測,僅僅是個人猜測,就是神經(jīng)網(wǎng)絡(luò)做出行動的理想時間尺度應(yīng)當(dāng)是在幾毫秒到幾分鐘之間。人類交易者也可以在這些時間尺度上做出行動,但是不見得會比算法塊。而且綜合分析這同一段時間內(nèi)的信息的速度也顯然是人類不如算法。那這就是算法的優(yōu)勢。

另一個基于相對短的時間尺度做行動的原因是因為可能會讓數(shù)據(jù)中的模式顯得更明顯。比如,多數(shù)人類交易者觀察的都是完全一樣的(提供了有限信息的)圖形化用戶界面,有些人也會看預(yù)定義的行情分析信號(比如 MACD),那么他們的行動就會受限于這些信號中體現(xiàn)的信息,最終表現(xiàn)為某些規(guī)律性的行為模式。類似地,交易平臺中的自動化交易算法也是基于某些模式運行的。我們就希望強化學(xué)習(xí)算法可以發(fā)現(xiàn)這些模式、利用這些模式。

值得注意的是,我們也可以根據(jù)不同的信號觸發(fā),在多個不同的時間尺度上做出行動。比如我們可以選擇一旦市場上出現(xiàn)了大額交易就做出動作。這樣的事件觸發(fā)的智能體也可以根據(jù)觸發(fā)事件的頻率總體對應(yīng)某些時間尺度。

行為空間

在強化學(xué)習(xí)中,我們會針對離散(有限)和連續(xù)(無限)行為空間做出區(qū)分。根據(jù)我們希望智能體達到的復(fù)雜程度,可以有多種不同的選擇。最簡單的方法就是設(shè)定三種行為:買入,持有,賣出。這樣也不是不行,但是這會限制模型在每一步中決定資金金額的能力。如果把復(fù)雜程度升級,下一步需要做的就是讓智能體學(xué)會要投資多少錢,比如根據(jù)模型預(yù)估的不確定性決定不同的投資金額。這樣就會讓我們來到連續(xù)行為空間,因為我們需要同時決定行為(離散的)和數(shù)量(連續(xù)的)。更復(fù)雜的狀況是,讓我們的智能體學(xué)會下限價單。在這種情況下智能體要同時決定掛單價格和掛單數(shù)量,兩者都是連續(xù)數(shù)值。它也還需要有撤銷沒有成交的限價單的能力。

反饋函數(shù)

這又是一項很復(fù)雜的東西??蛇x的反饋函數(shù)有很多種。很容易想到的是已實現(xiàn)盈虧。每當(dāng)智能體結(jié)束一個倉位的操作(比如賣出了之前買入的資產(chǎn),或者買入了之前借出的資產(chǎn))之后就會獲得一次反饋。這輪交易的凈收益可以是正值,也可以是負值,就把它作為我們要的反饋信號。隨著智能體學(xué)習(xí)最大化累積反饋值,它就逐漸學(xué)習(xí)了如何在交易中盈利。技術(shù)上說這個反饋函數(shù)是正確的,而且在這個限定范圍之內(nèi)可以學(xué)出最優(yōu)策略。然而,和什么都不做相比(這將是大多數(shù)時候的智能體行為),買入和賣出的行動數(shù)量都很少,反饋會很稀疏。所以,理想的智能體應(yīng)當(dāng)不需要頻繁地接收到反饋信號也能學(xué)習(xí)。

相比頻繁接收反饋信號的一種替代方案是未實現(xiàn)盈虧,就是指,雖然智能體當(dāng)前還沒有結(jié)束所有倉位的操作,但是如果立即就結(jié)束的話會獲得多少利潤。比如,當(dāng)智能體買入之后價格就開始下跌的話,即便還沒賣出(實現(xiàn)負利潤),智能體也會獲得負的反饋值。由于每個時間步驟上未實現(xiàn)盈虧都會發(fā)生變化,它就可以作為頻繁的反饋信號。然而,這種直接的反饋和延遲衰減函數(shù)結(jié)合使用的時候也可能會讓智能體偏向于短期的操作。

這兩種反饋函數(shù)都是針對利潤的樸素直接的優(yōu)化。而實際交易中,交易者可能還希望最小化風(fēng)險。假設(shè)策略 A 有稍低的回報和顯著更低的波動性,而策略 B 的回報提升不多,波動性卻很高的話,一般人們都會傾向于選擇策略 A。針對夏普比率做優(yōu)化是一種簡單的在訓(xùn)練中考量到風(fēng)險的做法,但也還有許多其它的指標。我們也可以選擇最大跌幅這樣的指標??梢韵胂?,根據(jù)利潤和風(fēng)險之間的平衡,有許許多多復(fù)雜的反饋函數(shù)可以選擇。

強化學(xué)習(xí)模型的設(shè)計工作流程

現(xiàn)在我們對如何在交易中使用強化學(xué)習(xí)有大概的了解了,下面我們來看看為什么我們更愿意用強化學(xué)習(xí)而不是監(jiān)督學(xué)習(xí)。開發(fā)強化學(xué)習(xí)的交易策略大概是下面這樣的步驟,要比前面監(jiān)督學(xué)習(xí)的簡單得多,也要更加體系化。

能用強化學(xué)習(xí)買賣比特幣賺錢嗎?能能能,當(dāng)然能!

對我們關(guān)心的指標做端到端優(yōu)化

在上面講過的傳統(tǒng)策略開發(fā)過程中,我們要先經(jīng)過流水線中的好幾步才能得到我們想要的指標數(shù)值。比如,如果我們想要找到一個最大跌幅不超過 25% 的策略,我們就要先訓(xùn)練監(jiān)督學(xué)習(xí)模型、想出一個基于規(guī)則的策略并且用到模型的數(shù)據(jù)、做內(nèi)部測試并優(yōu)化超參數(shù),然后才能經(jīng)過測試得出模型在這個指標上的表現(xiàn)。

強化學(xué)習(xí)就允許我們做端到端的優(yōu)化,而且可以最大化反饋(也可以是延遲反饋)。只要在反饋函數(shù)中增加一項,我們就可以直接對最大跌幅做優(yōu)化,而不需要分成好幾個互相獨立而且不確定互相影響的步驟。比如你可以在反饋函數(shù)中設(shè)定,當(dāng)?shù)^ 25% 的時候會有一個很大的負反饋,這就會逼得智能體補課不考慮更換別的策略。當(dāng)然了,我們也可以把最大跌幅和其它各種我們關(guān)心的指標結(jié)合在一起。所以強化學(xué)習(xí)的方法不僅更簡單,也可以得到厲害得多的模型。

學(xué)到的策略

相比于需要一行行手工設(shè)計的基于規(guī)則的策略,強化學(xué)習(xí)可以直接學(xué)到一個策略。我們不再需要指定規(guī)則、不再需要設(shè)定閾值(比如「預(yù)測價格上漲的確定性大于 75% 時買入」)。強化學(xué)習(xí)策略中會隱式地形成交易規(guī)則,而且會向著我們需要的指標進行優(yōu)化。我們也就在策略開發(fā)過程上邁出了一大步!并且,由于這個策略是由神經(jīng)網(wǎng)絡(luò)之類的非常復(fù)雜的模型參數(shù)化的,它能夠?qū)W到的策略要比任何人類可以想到、可以描述的策略都要復(fù)雜和強力得多。以及正如我們剛才說到的,只要我們在意并設(shè)定反饋函數(shù),學(xué)到的策略可以隱式地把風(fēng)險之類的指標考慮進去。

直接在模擬環(huán)境中訓(xùn)練

當(dāng)使用監(jiān)督學(xué)習(xí)方法時,我們需要分別做內(nèi)部測試和參數(shù)優(yōu)化這兩步,因為在策略中直接考慮進去掛單列表流動性、手續(xù)費結(jié)構(gòu)、延時等等因素的話太難做了。想到了一個策略,然后花了很多時間做測試之后才發(fā)現(xiàn)它不好使的事情并不少見,延遲太高、市場行情變化太快等等原因都有可能。

而強化學(xué)習(xí)智能體是直接在模擬環(huán)境中訓(xùn)練的,而且這個模擬環(huán)境可以盡可能復(fù)雜(把延遲、流動性和手續(xù)費都考慮在其中),那么我們就不需要考慮剛才那些問題了。實際上,適應(yīng)環(huán)境本身的限制也就應(yīng)當(dāng)是優(yōu)化過程的一部分。比如我們在強化學(xué)習(xí)環(huán)境中模擬交易平臺的延遲,導(dǎo)致智能體犯錯的話,智能體就會接收到負值的反饋,使得它之后學(xué)會更好地應(yīng)對延遲。

我們可以進一步拓展這種做法,模擬同一個環(huán)境中的其它智能體,從而建模我們的智能體做出行動會對環(huán)境造成何種影響。在模擬環(huán)境的歷史數(shù)據(jù)中智能體的下單可能會帶來價格的變化,而我們其實不確定真實的市場對此會有什么樣的響應(yīng)。一般來說,模擬器都會忽略這些,假定智能體的下單沒有給市場帶來任何影響。不過,通過學(xué)習(xí)一個環(huán)境的模型,然后執(zhí)行蒙特卡羅樹搜索之類的推演方法,我們就可以把市場(以及其它智能體)可能的反應(yīng)考慮在內(nèi)。這樣巧妙地處理了環(huán)境中的實時數(shù)據(jù)之后,我們就可以持續(xù)地改善模型。同時這里也有一個探索和利用之間的有趣的平衡:我們應(yīng)當(dāng)優(yōu)化模型,讓它在實時變化的環(huán)境中獲得更多的利潤,還是做次優(yōu)的優(yōu)化、更多地收集信息,以便我們可以優(yōu)化環(huán)境和其它智能體的模型呢?

這會是一個非常強有力的想法。通過建設(shè)越來越復(fù)雜的模擬環(huán)境來擬合真實市場,我們也就可以訓(xùn)練出非常復(fù)雜的模型,復(fù)雜到以至于可以把環(huán)境本身的限制考慮在內(nèi)。

學(xué)習(xí)適應(yīng)不同的市場環(huán)境

直覺上來說,同樣的策略可能在有些市場環(huán)境中表現(xiàn)比較好、有些環(huán)境中表現(xiàn)不好。一定程度上這是策略較為簡單的本質(zhì)屬性造成的,有可能策略的參數(shù)化程度確實還沒有強到可以讓模型學(xué)習(xí)適應(yīng)不同的市場環(huán)境。

不過,通過神經(jīng)網(wǎng)絡(luò)進行參數(shù)化的強化學(xué)習(xí)智能體學(xué)到的都是很強有力的交易策略,它們其實也有機會學(xué)會適應(yīng)各種不同的市場環(huán)境,只要首先經(jīng)過足夠長時間的訓(xùn)練、有足夠的存儲容量,也許多學(xué)習(xí)一份歷史交易數(shù)據(jù)就可以學(xué)會適應(yīng)一個新的交易平臺。這也讓這些模型對市場狀況的變化更魯棒。實際上,通過在反饋函數(shù)里加入適當(dāng)?shù)膽土P項,我們可以直接地把模型優(yōu)化得對市場變化更魯棒。

對其它智能體建模的能力

強化學(xué)習(xí)有一項獨特的技能,就是我們可以顯式地把其它智能體的影響考慮進來。目前為止我們討論的都是「市場會如何反應(yīng)」,而其實市場也就是一群智能體和自動交易算法而已,就像我們想要做的一樣。不過,如果我們可以顯示地在環(huán)境中對其它智能體建模,我們的智能體就可以學(xué)會利用它們的策略牟利。簡單來說,我們把「預(yù)測市場」的問題重新定義為了「利用其它智能體」。這也就和我們在 DotA 之類的多玩家游戲中做的事情要類似得多了。

重新聊聊交易智能體這個問題

我這篇文章的目標不僅僅是想要對用于交易的強化學(xué)習(xí)智能體做一個入門介紹,也是希望引起更多研究人員的興趣、參與研究這個問題。交易其實可以是一個有趣的研究問題,原因有下面這些。

實時測試以及快速的迭代循環(huán)

以往訓(xùn)練強化學(xué)習(xí)智能體的時候,把它們部署到真實世界并獲得反饋是一件很難或者很昂貴的事情。假設(shè)你訓(xùn)練了一個玩星際 2 的智能體,你要如何讓它和一群高水平的人類玩家對抗呢?象棋、撲克以及其它強化學(xué)習(xí)研究者關(guān)注的熱門游戲都有這個問題??赡苣阋朕k法進入某個世界級賽事,讓智能體完成許多場比賽之后再分析結(jié)果。

交易智能體的特點和其它那些多玩家游戲的特點非常類似,但是在線測試它們就簡單太多了!你可以隨時通過交易平臺的 API 部署自己的智能體,隨時獲得真實世界市場的反饋。如果你的智能體泛化能力不好、輸了錢,你就知道你可能對訓(xùn)練數(shù)據(jù)過擬合了。換句話說,迭代更新的周期可以變得非常短。

足夠大的多玩家環(huán)境

交易環(huán)境本質(zhì)上就是一個有數(shù)以千計的智能體參與的多玩家游戲。這也是一個熱門研究領(lǐng)域。撲克、Dota2 等等游戲上我們都已經(jīng)在做出成果,同樣的技術(shù)也可以用在這里。實際上,交易問題還是一個更困難的問題,因為任何時刻都會有可觀數(shù)量的玩家加入或者離開游戲。學(xué)習(xí)如何為其它智能體建模也只是研究這類問題的其中一個方向。前面也提到過,智能體在實時環(huán)境中采取行動,目的完全可以是最大化自己收集到的關(guān)于其它智能體執(zhí)行的交易策略的信息。

學(xué)習(xí)利用其它智能體以及操控市場

和上一個問題緊密相連的,就是我們能否利用環(huán)境中的其它智能體。比如,如果我們確切知道交易平臺上的其它自動交易算法的內(nèi)容,我們就可以誘使它們執(zhí)行本來不該執(zhí)行的行為,然后從它們的錯誤中獲利。這同樣適用于人類交易者,他們中的相當(dāng)一部分人都是基于某幾組廣為人知的市場信號進行交易的,比如指數(shù)移動平均、掛單列表壓力、MACD。

(作者注:請不要讓你的智能體做任何違法的事情!請務(wù)必遵守你當(dāng)?shù)氐姆煞ㄒ?guī)。并且,算法的以往表現(xiàn)只對未來表現(xiàn)有有限的參考作用。)

稀疏回報以及探索

交易者一般只能從市場上獲得稀疏的反饋,大多數(shù)時候交易者都是在等待。不過買入和賣出動作畢竟只是采取的所有動作中的一小部分。簡單直接地使用一個「心里只有反饋」的強化學(xué)習(xí)算法是肯定會失敗的。這就為新算法、新技術(shù)的使用提供了機會,尤其是可以高效地處理稀疏反饋的基于模型的算法。

行為空間的探索也有類似的狀況。當(dāng)下的許多標準算法,比如 DQN 和 A3C 都使用的是非常樸素的方法做探索,基本上就是在策略中增加噪聲。然而在交易環(huán)境中,環(huán)境中的多數(shù)狀況都是不好的狀況,只有少數(shù)是好的。用簡單直接的隨機方法做探索基本沒什么機會讓好的狀況和好的模型行為配對起來。這里很需要一種新的方法。

多智能體自我對抗

正如和圍棋、象棋智能體可以做自我對弈,多智能體環(huán)境中可以做自我對抗。比如設(shè)想我們同時訓(xùn)練了一大群互相競爭的智能體,然后觀察它們之間形成的市場變化模式是否和真實世界的市場行情有類似之處。我們也可以把不同類型的智能體放在一起比拼,有的是各種標準強化學(xué)習(xí)算法的、有的是基于演化算法的、有的是確定性的。我們也可以把真實世界的市場數(shù)據(jù)作為監(jiān)督反饋信號,「迫使」模擬環(huán)境中的智能體共同形成和真實世界類似的行為。

時間上的連續(xù)性

由于市場的變化速度實際上在微秒到毫秒級,交易領(lǐng)域的問題實際上就成為了很好的連續(xù)時間領(lǐng)域的問題。在上面的例子中我們假定了固定的時間間隔并把它指定給了智能體。不過,其實我們還可以讓智能體學(xué)習(xí)控制間隔時間。這樣,智能體不僅可以自己決定采取哪些行動,還可以決定何時采取行動。這又是一個熱門研究問題,機器人之類的其它領(lǐng)域也可以由此受益。

非平穩(wěn)、終身學(xué)習(xí),以及災(zāi)難性的遺忘

始終在更新變化是交易環(huán)境的固有屬性。市場狀況會變化,總有一些交易者在加入和離場,他們的策略也在時時更新。我們能否訓(xùn)練出這樣的智能體,它們既可以學(xué)會自動調(diào)節(jié),可以適應(yīng)不斷變化的市場環(huán)境,同時還不「忘記」它們曾經(jīng)學(xué)到過的東西呢?比如,智能體能否成功從熊市的交易策略轉(zhuǎn)向牛市的交易策略,然后再回到熊市的策略,同時這一整個過程還都不需要重新訓(xùn)練呢?智能體能否自動適應(yīng)新加入環(huán)境的智能體,并且自動學(xué)會利用它們呢?

遷移學(xué)習(xí)以及輔助任務(wù)

對于復(fù)雜問題,從零開始訓(xùn)練強化學(xué)習(xí)算法可能要花費很長時間,因為它們不僅要學(xué)習(xí)如何做出好的決定,還要學(xué)習(xí)「游戲的基本規(guī)則」。加速強化學(xué)習(xí)智能體訓(xùn)練的方法有很多,包括遷移學(xué)習(xí)以及使用輔助任務(wù)。比如,我們可以用專家給出的策略做強化學(xué)習(xí)智能體的預(yù)訓(xùn)練,或者增加價格預(yù)測之類的輔助任務(wù)作為智能體的訓(xùn)練目標,這都可以提升訓(xùn)練速度。

結(jié)論

這篇文章的目的是對基于強化學(xué)習(xí)方法的交易智能體做一個入門介紹,討論為什么這種方法優(yōu)于現(xiàn)有的交易策略開發(fā)方法,以及提出什么我相信更多研究人員都應(yīng)該研究這個問題。我希望我這篇文章達到了部分效果。

感謝閱讀!

via WildML,雷鋒網(wǎng) AI 科技評論編譯

相關(guān)文章:

Uber論文5連發(fā)宣告神經(jīng)演化新時代,深度強化學(xué)習(xí)訓(xùn)練勝過SGD和策略梯度

環(huán)境也能強化學(xué)習(xí),智能體要找不著北了,UCL汪軍團隊提出環(huán)境設(shè)計的新方法

UCL計算機系教授汪軍:如何進行大規(guī)模多智體強化學(xué)習(xí)?| CCF-GAIR 2017

100:0!Deepmind Nature論文揭示最強AlphaGo Zero,無需人類知識

雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。

能用強化學(xué)習(xí)買賣比特幣賺錢嗎?能能能,當(dāng)然能!

分享:
相關(guān)文章

讀論文為生

日常笑點滴,學(xué)術(shù)死腦筋
當(dāng)月熱門文章
最新文章
請?zhí)顚懮暾埲速Y料
姓名
電話
郵箱
微信號
作品鏈接
個人簡介
為了您的賬戶安全,請驗證郵箱
您的郵箱還未驗證,完成可獲20積分喲!
請驗證您的郵箱
立即驗證
完善賬號信息
您的賬號已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
立即設(shè)置 以后再說