期權的高頻交易回測平台怎麼編寫?

最近老闆讓用python編寫一個期權的高頻交易的回測平台,我之前就只用過Quantopian寫過一些簡單的交易模型,我也沒直接編過回測平台,我知道zipline可以寫回測平台,但針對高頻情況下的做市商期權策略,如果編寫回測平台?有沒有什麼已有的框架,或者包,如果自己開發需要注意什麼,求大神指點一下,謝謝


不知道你在做哪個市場,國內國外都講講吧。

假設你是在做國外市場,有tick data的情況下,你可以做一些更複雜的假設和回測。

首先,你要對你的延遲(tick 2 trade)有個估計,也就是訂單到達時間,這個可以是個常數,也可以是個變數。於是你就可以估計你的限價訂單在到達交易所的時候,在限價單隊列里的位置了。記住這裡你是要排隊的。

其次,少不了你的訂單管理了,你想報,想撤,想讓訂單停留一段時間撤,想更新你的訂單等等等。你每次做改變,指令達到交易所都是要花時間的。這時候你就基於隊列的變化和市場成交狀況來模擬是否成交,是否仍然在隊列里。比如你可以假設從你的指令到達交易所開始,所有的成交都應該排在你前面,所有的撤銷都應該在你的後面(push you up in the queue)。

最重要的是,在後台的邏輯里,你要想清楚了,你加入了限價單的隊列,在你查詢其是否成交的時候,"未成交"的信息發給你的時候,其實可能已經成交了。所以你要在後台做一個數據結構來儲存訂單的狀況,一個Loop下來,根據的推送Limit order book 和逐筆成交的信息,在每一個循環裡面更新你的訂單的狀況。然後推送給你「結果」。 這裡的時間戳管理是個問題,但是應該還不是很難。

以上,你就基本造出來一個簡單的,虛假的,交易所,which is a 大輪子。

上面的東西還是很粗糙的,其中之一是延遲是個變數,比如在Eurex 交易所內部延遲是個關於訂單處理數量的線性函數,如下圖所示(很幸運這是個線性函數):

最可怕的是,你的假設是你的策略對於市場行為是沒有影響的,而實際上不是的,當你參與市場的時候,別人會根據你的行為進行調整他們的策略,所以就看命吧

我們公司裡面是IT開發了一個平台, 實盤和回測代碼寫成一樣就可以進行回測。這是一個非常非常大的輪子。。。我勸你還是閑著沒事少跳坑為好,好好活著挺好的。

關於中國市場,500毫秒內部的事情是個黑箱。所以你基本靠猜來模擬成交,至於你的猜是瞎猜還是神操作,得看你的造化了。


高頻的回測算是核心技術了。總要用到些關於延遲和報單隊列的假設,這些多半是需要實盤數據來擬合的。所以並不僅僅是個技術問題。


我沒用過,不知怎麼樣,不過你可以試試這個,沒準能找到靈感呢

PortfolioEffect

GitHub - PortfolioEffect/PE-HFT-Matlab: MATLAB toolbox for high frequency portfolio analysis, intraday backtesting and optimization


瀉藥,直接說觀點:我覺得你一個人不可能做出來。

難點:

1. 全市場期權歷史tick行情數據,還要基於本地時間戳做了所有的合約對其的,本地實際收到TICK的時間戳,而不是交易所行情里自帶的時間戳,這數據你除非自己收集本買不到

2. 回測框架肯定是沒有,對於期權做市這種存在大量持倉組合的高頻交易,據我所知能做到非常精準回測(接近實盤)的只有歐美比較頂尖的MM(KCG、Citadel等),國內我身邊還沒聽說過能跑這種回測的

3. 期權做市的核心並不依賴於回測,而是依賴於定價模型、風險管理和交易員的經驗(波動率),你老闆上來就讓你先跑回測我,估計壓根就不懂期權做市,估計只能瞎指揮和幫倒忙

綜上得出開頭的結論。


掛單排隊估計,有一些trick,但我不告訴你


有數據么,沒數據就放棄把,數據是重點,其他我理解就是做個小編譯器就行了。


先說一句,你的老闆是比知乎好很多的資源池。所以,可以先謝國家,但一定要先問老闆!

實現思路方面:

主要看你的需求吧。

首先,看完題目,我的感覺是你老闆要的只是一個簡單的策略回測系統。畢竟你說你沒直接編過回測平台,而且你老闆讓你用python寫(這裡並沒有黑python的意思,只是,如果你們要的真的是那種嚴肅的模擬配對引擎和那種盡量貼近真實交易所的(利潤)回測平台,有比較大的概率python並不是首選。)
如果你們確確實實倒是要一個能夠可靠測試策略賺多少錢的利潤回測系統,那麼請參見Steve Zhou的回答,他提到的一些想法和陷阱都要實現;一切都要逼真。

大多用python寫的回測系統,主要是為了實現「回測系統」的定義。根據定義,「Backtesting is the process of applying a trading strategy or analytical method to historical data to see how accurately the strategy or method would have predicted actual results.」 --- Quoting from http://InvestingAnswers.com

這種定義你到處可以找到,我想說的是,這種回測系統的主要目標是快速且(不可避免地)粗略地驗證一個策略的結果(不是賺不賺錢!)。這也是為什麼大家都在說,你這策略回測好不代表能賺錢。既然是驗證概念,主要手段自然就是模擬。等你慢悠悠搭好一個逼真環境,有效的策略可能也無效了。

說到模擬,我的意思是,除了策略的代碼和數據,其他全部都用模擬的。真實的證交所配對引擎的隊列/延遲/你自己的訂單對市場的影響,這種東西統統忽略。具體來說,比如延遲,就抽象化為一個數字。整個系統也是很簡單地一邊把數據播放,一邊策略在跑,跑出來的結果主要看:
1,策略的實現是不是基本正確?有沒有產生訂單?是不是在恰當的時機產生的?
2,策略的結果跟市場走向是不是趨於一致?不一致的話有多少偏離?多少情況下是有偏離的?分別是什麼情況?(那怎樣量化偏離?有人會引入Pnl,所以才會說,看,我這策略回測很掙錢)。

但是這種回測下,Pnl只是一個度量,跟賺不賺錢基本無關。倒是更像嚴肅一些的test case,幫助你開發策略代碼。原則上一個線程就可以搞定。

技術方面:
感覺你沒有做基本的調研。隨便google一下你就可以看到別人推薦很多,bybacktest,pyalgotrade等等。這種framework基本都不會跟你逼真定製證交所的配對引擎/隊列/延遲等等。大都是模擬的。所以從你在選用framework這個角度說,我沒猜錯你老闆的需求是一個簡單的策略回測系統吧?

數據方面:
用python的交易員 已經講的很好了。不再廢話。


沒見過國外的數據,剛做了一個深圳股票的tick data sim,感覺還是蠻簡單。成交和撤單都是有編號(有序)的無需假設,報撤單速度可以假設自己天下第一(事實上也基本沒有競爭),唯一模擬不了就是自己的訂單對市場的影響(但我認為sim確實幹不了這事),做一些簡單的假設,總體來說還是可以逼近實盤。snapshot (國內的期貨期權)的sim只做ioc訂單也可以很准,做限價單sim需要一個排隊成交概率模型(做不到每筆都准但可以從大樣本逼近),也談不上高深。

關鍵還是怎麼用這些輪子。


放棄吧,這是個很大的project

鄙司有一個組專門搞這個

另外有人說KCG和citadel,這兩的option都很爛


你有啥數據啊。。。要是quotation和transaction都有的話不是分分鐘寫一個么,quotation做hard limit,transaction做些補充嘛。。。當然,出行情的時候,可能有點變化


推薦閱讀:

有沒有什麼軟體能夠在Win10系統下將電腦重複的工作自動實現?
python 函數中傳值,傳的是引用還是複製一份傳給另一個函數,會修改調用函數裡面的值嘛?
Mixin是什麼概念?
關於 Python 字典的 values() 方法返回值的順序?
如何學習 Python,面對那麼多的標準庫,應該如何?

TAG:Python | 高頻交易 | 做市商 | 量化交易 | 期權 |