並行計算在 Quant 中是如何應用的?


具體的說風險資本這塊吧. 經常面臨的一個問題就是一個大的portfolio, 幾十或上百萬個instrument ,用蒙特卡羅生成數萬甚至數十萬場景,並在每個場景下計算每個instrument的價值變化,最終生成整個portfolio的PnL分布來計算資本率。注意很多金融產品都是複雜的exotic derivatives,因此單純的基於delta, duration 這樣的靈敏度因子是不夠的,需要使用full revaluation model。這樣的數據每天都需要生成,自然需要考慮並行化。
並行架構,金融機構常使用的是IBM Platform Computing 開發的Platform Symphony, 基於格點計算,通過API介面可以很方便地在Linux Cluster上實現分散式計算。開發者只需指定高端的並行策略,比如是計算任務劃分是基於蒙特卡羅路徑還是instrument set,而無需考慮資源調配,結點通信等的具體實現細節。
具體應用:資本計算(監管和經濟資本),對手風險(CVA/FVA), Margin的計算。


P Quant需要用到很多的machine learning和optimzation演算法,基於GPU的並行計算可以加快執行速度。 2006年時用過基於GPU的Neural network和Clustering Analysis, 感覺真是效率大大提高。


首先投行的quant library 基本都是單線程的。進程級別的並行計算一般是IT的活。因為quant team 必須分清楚自己該專註的事情是 pricing, risk, calibration 這些事情。並行的問題在大多銀行中都是交由 library 用戶之一的 IT來解決。當然還有原因是大多數quant (雖然都以為自己編程很牛)根本不怎麼懂編程,更不用說並行計算了。。。

接下來簡單講講並行計算如何應用在quant library上 。很簡單,基本就是把大任務合理地切成小任務,拋到網格中並行計算,然後再把結果收集合併起來。

portfolio可以切成trade; trade 可以切成 legs;整條利率曲線可以切成很多個基準點
;delta 要算兩個點,Gamma 要算三個點,這些點可以並行。等等等。當然你要考慮很多其他細節問題,比如,如果歷史數據顯示某個小任務比較慢,你因該會想到先把它拋到網格上計算。又比如果模型calibrate 需要很長時間,而trade 算起來很快,這個時候你就會考慮把同一模型的很多這樣的trade打包一起算

網格系統有銀行自己開發的有第三方的,第三方比較出名的比如DataSynapse(現在被收購了)。


我來講個在家就能設置的現成的解決方案。Matlab有parallel computing toolbox:

這個工具箱高度兼容用戶已經寫好的代碼。假設用戶在使用for loop結構重複模擬,那麼只需要在安裝好這個toolbox後把for 改為parfor就可以了!完全傻瓜式實現並行計算。

再用幾個簡單語句,還可以調用gpu運算,把例如隨機數字生成等單個計算量大的function用gpu執行。gpu實際上就是一個多個核心的處理器。

還可以在區域網中幾個安裝有matlab的機器運算,可以使用專門的介面連接亞馬遜雲計算服務。

費用不高,在澳洲好像賣1400澳幣。


以趨勢投機的程序化交易策略後驗(programming trading backtesting)為例,一個簡單的應用是參數尋優,如果每個取值都調用一次K線數據,這樣串聯計算的參數尋優效率會非常低。如果採取並行計算,一次K線驅動,可以後驗一堆參數,這是並行計算在Quant實戰中最經典的應用。複雜一些場景比如跨周期後驗,需要同時對1分鐘,2分鐘,3分鐘,……30分鐘K線周期檢驗策略有效性,這時候可以用1分鐘驅動,並行計算,其它周期用1分鐘數據合成,從而該效率完成任務。


學期權課程的時候,用OpenCL寫過Monte Carlo,這個應該是最簡單的了.


推薦閱讀:

TAG:寬客(Quant) | 機器學習 | 並行計算 | 網格計算 |