小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

搞了個機器學(xué)習(xí)交易系統(tǒng),5000 美元投資變成了 20 萬

 清風(fēng)hdx1v6k1jl 2019-12-08

最近,我開發(fā)了一個加密貨幣自動交易系統(tǒng)。因為有科研和軟件工程方面的背景,我忽略了那些不是很科學(xué)的東西,比如市場營銷。經(jīng)過多次迭代,我開發(fā)的 ML 交易系統(tǒng),在 12 個月內(nèi)把 5 千美元的投資變成了 20 萬,最好的戰(zhàn)績是連續(xù) 4 個月不虧損。雖然在一天的某個時段虧損,但整體交易日幾乎都是盈利的。本文,我將分享在開發(fā)該交易系統(tǒng)時遇到的問題以及從中總結(jié)的經(jīng)驗。

搞了個機器學(xué)習(xí)交易系統(tǒng),5000 美元投資變成了 20 萬

這種交易可以用算法來描述嗎?

開篇之前還是要提醒廣大開發(fā)人員:投資有風(fēng)險,交易需謹(jǐn)慎。通常,大部分人認(rèn)為市場是無法預(yù)測的,也有很多學(xué)術(shù)研究為此提供了數(shù)據(jù)支撐,但這種觀點太武斷了,畢竟還有很多專業(yè)交易員可以根據(jù)自己的一套規(guī)則給投資人一些專業(yè)意見。

在建立算法之前,我們需要先知道市場交易的參與者:

  • 散戶投資者:可能在朋友的推薦下購買比特幣,或者把挖到的比特幣賣掉變現(xiàn)。
  • 機構(gòu)投資者:具有大額交易能力的機構(gòu)或個體,對市場的走勢影響很大。
  • 專業(yè)交易員:試圖跑贏市場,根據(jù)消息、技術(shù)分析指標(biāo)或者直覺進行交易。
  • 算法:基于市場數(shù)據(jù)做出決策,自動執(zhí)行交易。

在依賴數(shù)據(jù)分析的人看來,散戶和機構(gòu)投資者的行為隨機性比較強,這類市場活動是不可預(yù)測的,這類隨機活動會把市場價格推高,要是足夠幸運的話,可以跟著分一杯羹。但有時候也會站錯隊。所以,長期來看,最后的盈利可能為零。

我們更感興趣的應(yīng)該是專業(yè)交易員和算法。這兩者本質(zhì)上一樣,都基于一系列規(guī)則做出決策。如果能夠知道具體規(guī)則,就可以設(shè)計一個系統(tǒng)自動執(zhí)行。例如,如果某個算法可以算出在市場出現(xiàn) MACD(一種被廣泛使用的技術(shù)分析指標(biāo))信號時買入,就可以稍微修改一下參數(shù),搶在該指標(biāo)出現(xiàn)之前買入,并在將價格推高之后賣掉。當(dāng)然,這只是一個非常簡單的例子。大部分算法都很復(fù)雜,比如基于機器學(xué)習(xí)的模型,況且還忽略了市場流通性、交易延遲和交易手續(xù)費等問題。關(guān)鍵在于,我們必須知道規(guī)則和算法,才可以設(shè)計系統(tǒng)。

時間尺度是一個很重要的因素。相比實時(秒級別)數(shù)據(jù),日交易數(shù)據(jù)更隨機一些。因為時間尺度越大,市場活動受政治新聞、法律裁決、公眾情緒、社會炒作、商業(yè)決策等因素的影響就越大。交易機構(gòu)的大筆交易也會帶來重大影響,但這種情況不會經(jīng)常發(fā)生。這些都不是可被算法利用的,我們也無法對此進行建模。如果把市場活動定位到分鐘或者秒級別,就可以找到一些模式。這些模式可以被算法利用,我們的目標(biāo)就是利用這些模式來盈利。

系統(tǒng)關(guān)鍵特性

買賣發(fā)生在兩個或多個市場參與者之間,有人賺錢,就有人虧錢。大家都想賺錢,那么你的技術(shù)優(yōu)勢是什么呢?在交易領(lǐng)域,我們把這種競爭優(yōu)勢叫作 edge,可能來自這些方面:

  • 交易延遲:我們與交易平臺之間的連接比別人更快。這意味著我們可以更快地獲取到市場數(shù)據(jù),并搶在別人之前提交訂單。金融機構(gòu)通常不吝花費數(shù)百萬美元來最小化與交易平臺之間的延遲。
  • 基礎(chǔ)設(shè)施:基礎(chǔ)設(shè)施具有更高容錯性和更好的性能,或者比其他競爭者能夠更好地處理邊緣情況。
  • 數(shù)據(jù):我們可能比其他人掌握了更好的數(shù)據(jù)。這里的“好”可以指很多方面,比如,數(shù)據(jù)是從更可靠的來源收集來的,還經(jīng)過仔細(xì)的清理和預(yù)處理。
  • 模型:我們基于數(shù)據(jù)構(gòu)建出更好的預(yù)測模型。我們可能使用了最新的深度學(xué)習(xí)技術(shù),掌握了更優(yōu)化的函數(shù)、更好的特征和不一樣的訓(xùn)練算法。
  • 準(zhǔn)入市場:我們可以進入那些不是所有人都可以進入的市場。例如,南韓的一些交易平臺只有本國公民可以參與。為避免與美國國稅局發(fā)生瓜葛,很多國際交易平臺不接受美國公民。

人們常犯的一個錯誤是 重度依賴模型,因為它看起來太“性感”了。很多開發(fā)者試圖通過深度學(xué)習(xí)或增強深度學(xué)習(xí)算法來構(gòu)建交易系統(tǒng),但大部分都失敗了。他們自認(rèn)為他們的優(yōu)勢在于模型,卻忽略了其他因素。他們沒有優(yōu)化服務(wù)器布局,使用開源軟件下單和收集數(shù)據(jù),還使用非常容易獲取到的公開數(shù)據(jù)集來訓(xùn)練模型?;蛟S,這可以給他們帶來一點優(yōu)勢,但不足以彌補在其他方面犯下的錯誤。

我也使用了一些機器學(xué)習(xí)模型,但最大的優(yōu)勢還是來自于花了很大成本在構(gòu)建基礎(chǔ)設(shè)施。幾乎所有的開源交易軟件都不夠好,將它們用于學(xué)習(xí)目的或許可以,但并不適合用在現(xiàn)實當(dāng)中。在一開始我也使用了開源組件,但經(jīng)過多次迭代之后,我都是自己開發(fā)組件,包括實時數(shù)據(jù)收集、清理、回測和模擬,訂單的管理和規(guī)范化,監(jiān)控以及實時交易。

選擇市場

市場就是指在某個交易平臺進行交易的資產(chǎn)。例如,BTC/USDT 在 Binance 上交易,BTC/USD 在 Coinbase 上交易?,F(xiàn)在有數(shù)百個不同的數(shù)字貨幣交易平臺,每一個交易平臺都可以交易數(shù)十種資產(chǎn)。我們該怎么選擇?最理想的市場應(yīng)該具有高流通性,交易手續(xù)費低,快速且安全可靠。

總的來說,流通性是指在不顯著影響市場價格的情況下能夠交易的數(shù)量。流通性好的市場價差低,滑點小,交易成本低,可以進行大額交易。交易量是衡量流通性的一個指標(biāo)。具有高交易量的市場通常(但不一定)具有高流通性??上У氖?,現(xiàn)在還沒有公開評價體系可以告訴我們哪個交易平臺是可靠的,即使 cer.live 有在嘗試。搜索網(wǎng)站沒什么用,因為交易平臺會向網(wǎng)站支付費用,讓自己的排名更靠前。

評估市場唯一可靠的方式是自己收集和分析數(shù)據(jù)。交易是真是假?價差和滑點的分布是怎樣的?一些交易平臺通過算法明目張膽地造假交易數(shù)據(jù),還有一些使用更復(fù)雜的技術(shù)讓自己的數(shù)據(jù)看起來更真實。

具體實現(xiàn)

交易成本算法實現(xiàn)為了能夠盈利,我們的交易獲利必須高過所有交易成本的總和。對于大多數(shù)人來說,交易手續(xù)費占了大頭,滑點通常會被忽略,但實際上它也很重要。假設(shè)我們買入 qty 個 BTC,并在稍后某個時間點賣出,那么凈交易成本就是:

trade_cost(qty) = (2 * qty * exchange_fee) + (qty * spread) + slippage_buy(qty) + slippage_sell(qty)<br></br>(2 * qty * exchange_fee) 是交易手續(xù)費。假設(shè)收費費是 0.01%,那么一次買入和一次賣出就需要支付兩次費用。

(qty * spread) 是買賣價差,我們在買入價買入,在賣出價賣出。即使市場完全不發(fā)生變動,我們?nèi)匀粫诼愿哂谫u出價的價格買入。價差會隨時間發(fā)生變化,所以需要把它納入到交易決策中。如果我們在 Binace 上交易 BTC/USDT,單日的價差分布可能像下面這樣。大多數(shù)時候不到 1 美元,非流通時間可以達到 5 美元以上。

搞了個機器學(xué)習(xí)交易系統(tǒng),5000 美元投資變成了 20 萬

slippage_buy(qty) 和 slippage_sell(qty) 是因市場流通性不足而導(dǎo)致的價格滑點。交易量越大,我們要付出的滑點成本就越高。Binance 上的 BTC/USDT 滑點分布情況如下所示。每一行對應(yīng)一個特定的交易規(guī)模,范圍從 0.1 到 2.0 BTC,X 軸表示成本占支付價格的百分比。在流通性較低時進行交易意味著滑點成本很容易超過交易費用和價差,就像我們從圖中看到的那樣。

搞了個機器學(xué)習(xí)交易系統(tǒng),5000 美元投資變成了 20 萬

這些成本有多重要?這要視具體情況而定。如果我們每天只交易一次,更關(guān)注市場大幅度波動,那么就可以忽略大部分的成本。如果價格浮動可以達到 10%,那么 0.5% 的交易手續(xù)費根本不算什么。交易頻次越高,這些成本就越重要。市場在短時間內(nèi)一般不會出現(xiàn)太大波動,所以交易成本就變得尤為重要。

另一個重要因素是交易量。交易量越大意味著越高的利潤,但交易費用也更高。交易費用和價差與交易量成線性關(guān)系,但滑點不是。使用平倉限價訂單而不是市場訂單是保護自己不受大幅滑點成本影響的一種方法,但需要額外的基礎(chǔ)設(shè)施來管理部分訂單。同樣,交易頻次越高,我們在不被交易成本抵消的情況下獲利的交易量就越少。

時間維度問題

我們該怎么知道是應(yīng)該進行高頻交易還是每天只交易一次?為了做出權(quán)衡,我們先來看看這兩種極端的情況。

時間越短,市場越是不會發(fā)生大幅度波動。每次交易只會獲得非常少的利潤,但我們可以提高交易頻次。但正如之前討論的那樣,高交易成本會把這些利潤都吃掉。即使我們能夠完美地預(yù)測毫秒級的市場波動,這個模型也不會太管用。向交易平臺發(fā)送一個 HTTP 請求并等待交易平臺的匹配引擎處理,這通常需要幾十到幾百毫秒,等到訂單處理完畢,市場又發(fā)生了變化,之前的預(yù)測就失效了。

另一個極端情況是基于某些東西進行交易,或者進行每日交易。隔天交易讓我們完全可以忽略交易成本,延遲也變得不那么重要了。但是,較長時間的市場波動會受到現(xiàn)實世界因素的影響,比如社會新聞、事件或其他隨機事件(比如機構(gòu)投資活動)。如果我們只是依賴模式匹配(機器學(xué)習(xí)),就別指望能做好預(yù)測。我們能夠掌握的這類數(shù)據(jù)很少,根本不足以用來訓(xùn)練模型。我們也無法可靠地測試和評估我們的算法。數(shù)據(jù)少,噪音多,基于這點數(shù)據(jù)所做的測試無異于猴子扔飛鏢。

所以,我們需要在覆蓋交易成本、掌握足夠的數(shù)據(jù)集和從數(shù)據(jù)中識別模式這些因素之間做出權(quán)衡。時間尺度越小,模式和樣本就會越多,但也要注意交易成本和延遲,它們都受市場流通性和交易 API 的影響。

除了使用自然時鐘間隔(比如秒),我們還可以使用基于其他度量指標(biāo)的間隔,例如交易量。例如,我們可以把間隔定義為 1.0 BTC,而不是 1 秒,這種交易可以一秒或者一分鐘發(fā)生一次,具體取決于市場的繁忙情況。這是因為我們希望在市場活動劇烈的時候更頻繁地交易,而在不那么劇烈的時候少交易一些?;诮灰琢康木酆蠑?shù)據(jù)包含了更為規(guī)范化的特征分布和標(biāo)簽,對于機器學(xué)習(xí)算法的訓(xùn)練更為有利。不過這種交易方式也有一些缺點。例如,基于交易量進行交易有可能會太晚,因為在交易高峰之后,市場又往前移動了。理想情況下,我們要先于其他市場參與者下單,也就是搶在交易量上升之前。

總的來說,時間尺度和如何定義時間間隔是需要加以優(yōu)化的超參數(shù)。流通性高、交易費用低、API 延遲低,這樣的市場可以讓我們在更頻繁的交易中獲得更多利潤。

優(yōu)化函數(shù)

我們需要選擇最優(yōu)的指標(biāo)數(shù)據(jù)來訓(xùn)練機器模型,而基于原始價格數(shù)據(jù)訓(xùn)練回歸模型是一個顯而易見的選擇。但價格數(shù)據(jù)并不是固定的,而大多數(shù)現(xiàn)代機器學(xué)習(xí)技術(shù)需要或者使用固定數(shù)據(jù)才會獲得更好的效果。所以,在金融領(lǐng)域,我們通常對收益而不是價格進行建模。時間 t 的收益 r(t) 表示如下:

r(t) = (p(t) / p(t-1)) - 1<br></br>收益比零大說明價格上漲,小于零說明價格下跌。時間 t 可以用上一小節(jié)討論的那些方式來定義。你可以計算每分鐘的收益,一天的收益,或者基于交易量的收益。

另一個是對數(shù)收益,它衡量的是同樣的指標(biāo),但更接近正太分布,而且為訓(xùn)練機器學(xué)習(xí)算法提供了更為便利的統(tǒng)計屬性:

logr(t) = log(p(t)) - log(p(t-1))<br></br>我們可以考慮基于固定時間尺度的對數(shù)收益數(shù)據(jù)訓(xùn)練回歸模型,這幾乎成了一個標(biāo)準(zhǔn)。不過,我們還有其他選擇。例如,在《金融機器學(xué)習(xí)進展》這本書中,作者討論了如何選擇合理的閾值,并將數(shù)據(jù)轉(zhuǎn)換為分類問題。

在實際當(dāng)中,我們有很多種方式來定義 p(t)。對于 BTC,它通常是指中間價。不過,我們不能基于中間價進行交易。在買入時,價格高于中間價,在賣出時,價格低于中間價。之前已經(jīng)說過,我們還需要付出滑點成本,它是交易量的函數(shù)。所以,價格實際上是時間、交易(買入還是賣出)和交易量的函數(shù),即 p(t,s,q)。上面的公式應(yīng)該是這樣的:

logr(t, quantity) = log(p(t, BUY, quantity)) - log(p(t-1, SELL, quantity))<br></br>我們還有其他類型的價格可以使用,比如微價格(microprice)。選擇合適的價格類型究竟有多重要?這取決于時間尺度和市場流通性。在流通性好、低滑點成本的市場里,基于中間價的收益模型更為有效,但在流通性差的市場中則完全無用。

訓(xùn)練、回測和實時交易一般的交易算法訓(xùn)練流程是這樣的:

  • 數(shù)據(jù)收集
  • 數(shù)據(jù)預(yù)處理和清理
  • 創(chuàng)建特征
  • 訓(xùn)練模型
  • 回測
  • 實時交易

我們在模型訓(xùn)練期間所做的優(yōu)化,比如對數(shù)收益的預(yù)測準(zhǔn)確性,只是盈虧指標(biāo)的代理指標(biāo)。盈虧指標(biāo)才是我們真正關(guān)心的,所以我們需要進行回測?;販y是指使用訓(xùn)練好的模型基于歷史數(shù)據(jù)進行全方位的模擬。商業(yè)版回測軟件可能會非常昂貴,它們可以模擬交易延遲、非標(biāo)準(zhǔn)訂單類型、交易傭金和滑點。它們還可以自動優(yōu)化超參數(shù),輸出圖表和統(tǒng)計數(shù)據(jù)用于評估模型。

但不管回測軟件有多好,它們與真實的交易環(huán)境仍然是不一樣的。

搞了個機器學(xué)習(xí)交易系統(tǒng),5000 美元投資變成了 20 萬

雖然回測軟件可以模擬延遲,但真實世界是很難預(yù)測的。真實世界中的延遲在低活動期間可能很穩(wěn)定,但在高活動期間會很大。它們還具有季節(jié)性,API 也是如此。在模擬環(huán)境中,一切都很完美,但在現(xiàn)實世界中,API 會出問題,比如請求會被限制,在繁忙時段訂單會被隨機拒絕。在真實世界中,我們可以影響其他市場參與者,但這些行為無法模擬?;販y還會受數(shù)據(jù)的限制。我們從交易 API 獲得的歷史數(shù)據(jù)通常帶有噪音,而且不完整——我們無法保證它們是否能夠真實反映當(dāng)前的交易狀態(tài)。

因此,回測主要作為一種過濾器,或者作為一種樂觀的估計。即使模型在回測時表現(xiàn)不好,在現(xiàn)實世界中仍然有可能表現(xiàn)好。模型在回測時表現(xiàn)很好,并不能保證在現(xiàn)實世界中一定會表現(xiàn)好。除非你非常小心,否則回測容易出現(xiàn)過擬合,并可能產(chǎn)生錯誤的結(jié)果。

這也是為什么很多有關(guān)交易系統(tǒng)的學(xué)術(shù)論文在實際當(dāng)中不是很管用。研究的最后一步通常是基于歷史數(shù)據(jù)進行回測,如果模型運行得很好,研究人員就宣告大功告成,但他們忽略了一個事實,即他們的模型在真實的環(huán)境中可能永遠(yuǎn)無法盈利。研究人員無法使用實時交易基礎(chǔ)設(shè)施來測試模型,如果他們可以做到,而且算法在現(xiàn)實世界中運行良好,那他們肯定不會把論文發(fā)表出來。

訓(xùn)練交易機器學(xué)習(xí)算法是很困難的。在很多其他機器學(xué)習(xí)場景中,訓(xùn)練測試性能與實際性能直接相關(guān)。例如,如果我們使用恰當(dāng)?shù)挠?xùn)練 / 驗證 / 測試 split 來測試推薦系統(tǒng),并且數(shù)據(jù)分布不會隨時間發(fā)生顯著變化,那么我們就可以非??隙ǖ卣J(rèn)為,在測試數(shù)據(jù)集上表現(xiàn)良好的模型在生產(chǎn)環(huán)境中也是如此。在交易領(lǐng)域,我們的訓(xùn)練和回測與現(xiàn)實環(huán)境非常不一樣,以至于我們無法做出任何保證。我們只能希望基于某種代理指標(biāo)訓(xùn)練出來的模型在回測時表現(xiàn)良好,也希望它們在現(xiàn)實世界中也有同樣的表現(xiàn)。

其他問題除此之外,我們還有其他很多問題需要解決。

  • 非 IID 數(shù)據(jù):市場數(shù)據(jù)的分布既不獨立也不固定,要訓(xùn)練出準(zhǔn)確的模型極具挑戰(zhàn)性。這些數(shù)據(jù)帶有噪音?;蛟S市場活動是有模式可循的,但它們通常被一些隨機活動隱藏了起來。
  • 訂單重建:在交易和回測基礎(chǔ)設(shè)施里,訂單重建是一個常見的瓶頸。我們該如何有效地走好這一步?交易 API 不穩(wěn)定,經(jīng)常出現(xiàn)波動,我們該怎么處理?
  • 最小化延遲:有哪些手段可以用來最小化端到端的延遲?
  • 構(gòu)建特征:哪些特征對于我們的算法來說是最有用的?我們該如何實時地構(gòu)建這些特征?
  • 訂單管理:因為交易 API 不太穩(wěn)定,我們需要自己管理訂單。一個典型的訂單管理系統(tǒng)應(yīng)該是怎樣的?

容錯:如果發(fā)生故障該怎么辦?我們該怎么恢復(fù)?

相關(guān)資源

交易行業(yè)是我參與過的最為神秘的一個行業(yè)。你在網(wǎng)上找到的相關(guān)資料摻雜著各種劣質(zhì)內(nèi)容,有很多只是想借機賣東西給你。我接觸過的大多數(shù)成功的交易員都曾在專業(yè)的交易公司工作過,他們在那里學(xué)會了訣竅,但不會在網(wǎng)上分享任何東西。在金融領(lǐng)域,分享知識并沒有形成一種文化。所以,對于剛進入這個領(lǐng)域的新手來說,這個領(lǐng)域看起來相當(dāng)復(fù)雜,以至于讓他們不知所措。實踐可能成了最好的學(xué)習(xí)方式。在金融市場,交易基礎(chǔ)設(shè)施和高頻交易數(shù)據(jù)價值連城,但加密貨幣市場的數(shù)據(jù)對所有人開放,可以作為學(xué)習(xí)之用。不管怎樣,我還是總結(jié)了一些有用的資源。

  • 《金融機器學(xué)習(xí)進展》——一本嚴(yán)肅的書,介紹了機器學(xué)習(xí)技術(shù)在金融市場的應(yīng)用。它更多的關(guān)注學(xué)術(shù)方面,有些不是很實用。雖然我并不完全同意這本書所講的內(nèi)容,但它仍然很好地介紹了在構(gòu)建交易系統(tǒng)時遇到的各種挑戰(zhàn)和陷阱。
  • 《高頻金融交易入門》——涵蓋了自動化交易中使用的常見術(shù)語和方法,偏學(xué)術(shù),有些東西很難消化,但值得一讀。
  • 《被隨機愚弄:隱藏在生活和金融市場中的機會》——不是一本關(guān)于交易技術(shù)的書,作者是期權(quán)交易員,教你如何思考金融市場和生活中隨機出現(xiàn)的機會。
  • arXiv q-fin——閱讀近期發(fā)表的研究論文是提出新想法或?qū)W習(xí)如何思考問題的一種好方法。它們有趣且有教育意義,但請不要太在意結(jié)果。正如前面提到的,學(xué)者們幾乎不會公開發(fā)表真正有效的東西。

總結(jié)

我希望本文提出的一些想法能夠為想要構(gòu)建自動化交易系統(tǒng)的讀者提供一些見解。復(fù)雜的問題通常沒有通用的解決方案,重要的是要充分理解問題的各個方面,然后根據(jù)具體情況做出合理的決策。

原文鏈接:

https://www./2019/11/lessons-learned-building-an-ml-trading-system-that-turned-5k-into-200k/

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多