按15分钟取数据_【数量技术宅|金融数据分析系列分享】套利策略的价差序列计算,恐怕没有你想的那么简单...
更多精彩內(nèi)容,歡迎關(guān)注公眾號(hào):數(shù)量技術(shù)宅
#價(jià)差計(jì)算的“誤區(qū)”
我們?cè)跍y(cè)試兩個(gè)或多個(gè)金融資產(chǎn)相互運(yùn)算產(chǎn)生的策略信號(hào)時(shí),免不了需要涉及將不同的價(jià)格時(shí)間序列,按照時(shí)間軸進(jìn)行對(duì)齊,套利策略就是其中之一。然而,大部分介紹套利策略、統(tǒng)計(jì)套利類的文章,對(duì)于價(jià)差序列的生成計(jì)算,處理的十分簡(jiǎn)單,基本就是兩個(gè)時(shí)間序列相減。對(duì)于較為低頻的信號(hào),這樣處理問(wèn)題不大,但在中高頻的信號(hào)領(lǐng)域,直接相減,會(huì)存在著一定的問(wèn)題。
這是因?yàn)?#xff0c;對(duì)于不同資產(chǎn)的價(jià)格序列,存在著交易所推送時(shí)間、以及到達(dá)時(shí)間的差異。即使我們回測(cè)時(shí)看到的兩個(gè)Tick的時(shí)間戳是完全相同的,在實(shí)盤服務(wù)器接收推送行情的時(shí)候,也是按照先、后順序達(dá)到的。我們?cè)趯?shí)際交易中發(fā)現(xiàn),比如上海期貨交易所某個(gè)品種的不同到期交割月的合約,交易所在切片數(shù)據(jù)的推送不是同時(shí)進(jìn)行的,而是按照交割月的順序推送的,例如按照RB2010、RB2101、RB2015,類似這樣的先后順序來(lái)進(jìn)行推送的,其他品種也是如此,而對(duì)于同一個(gè)500ms的切片時(shí)間內(nèi),收到RB2010、RB2101、RB2015的Tick數(shù)據(jù)的時(shí)間戳,卻是相同的。
再比如數(shù)字貨幣的跨交易所套利,兩個(gè)交易所即使在相同時(shí)間發(fā)送的Tick數(shù)據(jù),由于交易所服務(wù)器物理位置不同造成的傳輸時(shí)間不同,到達(dá)我們策略信號(hào)計(jì)算服務(wù)器的時(shí)間大概率也會(huì)不同。
一個(gè)典型的價(jià)格到達(dá)頻率不同的例子
如果說(shuō)行情數(shù)據(jù)到達(dá)時(shí)間有先后,直接相減計(jì)算價(jià)差會(huì)有一定的“滯后”或“未來(lái)函數(shù)”問(wèn)題的話,價(jià)格到達(dá)頻率不同,則根本就無(wú)法直接相減計(jì)算價(jià)差了。總之,我們需要一套更貼近實(shí)際交易的價(jià)差計(jì)算方式。
我們來(lái)看一個(gè)價(jià)格到達(dá)頻率不同的例子,即兩個(gè)品種數(shù)據(jù)的推送頻率是不一樣的。如果我們需要對(duì)股指期貨、股票ETF進(jìn)行期現(xiàn)套利策略的設(shè)計(jì),以IC與中證500ETF的數(shù)據(jù)為例,計(jì)算期現(xiàn)套利的價(jià)差。
IC股指期貨的Tick數(shù)據(jù),我們的數(shù)據(jù)源是Wind,IC對(duì)應(yīng)的中金所,它的行情推送頻率是每1秒2筆數(shù)據(jù),Level1免費(fèi)行情推送的是1檔盤口,即只有買1、賣1的數(shù)據(jù),數(shù)據(jù)時(shí)間是股指期貨的交易時(shí)間:9:29-15:00。我們來(lái)看一下IC的Tick數(shù)據(jù)樣例。
再來(lái)看中證500ETF的數(shù)據(jù),同樣來(lái)源于Wind,500ETF行情數(shù)據(jù)的推送頻率相比較IC要低很多,每3秒會(huì)有1筆數(shù)據(jù),Level1免費(fèi)行情有5檔的盤口,即買1到買5、賣1到賣5,數(shù)據(jù)推送時(shí)間:9:15-15:00,包含股票的集合競(jìng)價(jià)時(shí)間段。我們來(lái)看一下500ETF的Tick數(shù)據(jù)樣例。
巧用Pandas的Merge函數(shù)
對(duì)于這樣推送頻率有差異、時(shí)間軸也有差異的數(shù)據(jù),計(jì)算價(jià)差,我們就需要根據(jù)時(shí)間軸來(lái)進(jìn)行合成。Python Pandas庫(kù)的Merge函數(shù),正好符合我們所需要的功能。我們簡(jiǎn)要介紹一下Merge函數(shù)。
pd.merge(left, right, how='inner', on=None, left_on=None,... )
我們?cè)谧鰯?shù)據(jù)合成的時(shí)候,最常用到的是前4組參數(shù):
left: 拼接的左側(cè)DataFrame對(duì)象
right: 拼接的右側(cè)DataFrame對(duì)象
on: 要加入的列或索引級(jí)別名稱。 必須在左側(cè)和右側(cè)DataFrame對(duì)象中找到,對(duì)于金融時(shí)間序列,一般來(lái)說(shuō)是時(shí)間軸
how: One of ‘left’, ‘right’, ‘outer’, ‘inner’,默認(rèn)inner。inner是取交集,outer取并集。比如left:[‘A’,‘B’,‘C’];right[’'A,‘C’,‘D’];inner取交集的話,left中出現(xiàn)的A會(huì)和right中出現(xiàn)的買一個(gè)A進(jìn)行匹配拼接,如果沒(méi)有是B,在right中沒(méi)有匹配到,則會(huì)丟失。'outer’取并集,出現(xiàn)的A會(huì)進(jìn)行一一匹配,沒(méi)有同時(shí)出現(xiàn)的會(huì)將缺失的部分添加缺失值。
而這4組參數(shù),對(duì)于套利價(jià)差計(jì)算的預(yù)處理,how字段最重要。我們用實(shí)際的數(shù)據(jù),來(lái)看不同how字段的取值,會(huì)對(duì)最終價(jià)差的計(jì)算,帶來(lái)怎樣的影響。
首先,how = “inner,取時(shí)間軸的交集,只有兩個(gè)表DATETIME列都有的時(shí)間,才會(huì)出現(xiàn)在最終的總表。我們展示計(jì)算得到的總表,并計(jì)算價(jià)差序列后繪圖。
其次,how = “outer”,取時(shí)間軸的并集,只要兩個(gè)表DATETIME列任意一表有的時(shí)間,都會(huì)出現(xiàn)在最終的總表,若另一個(gè)表沒(méi)有數(shù)據(jù),則按nan值填充。
由于outer的數(shù)據(jù)處理方式,存在著大量的nana值,我們無(wú)法直接計(jì)算價(jià)差,通常的處理方式是前向填充空值數(shù)據(jù),即將nan值用離得最近的非空值進(jìn)行填充替代,再計(jì)算期現(xiàn)(中間價(jià))價(jià)差,并繪圖。
再次,how = 'left',按左表時(shí)間軸合并。按左表(IC)的時(shí)間軸與右表逐一匹配,左表的時(shí)間軸全部保留,右表有該時(shí)間的,則并入總表,右表沒(méi)有該時(shí)間的,以nan代替。
同樣需要前向填充空值數(shù)據(jù),然后才能計(jì)算期現(xiàn)(中間價(jià))價(jià)差。
最后,how = 'right',按右表時(shí)間軸合并。按右表(500ETF)的時(shí)間軸與左表逐一匹配,右表的時(shí)間軸全部保留,左表有該時(shí)間的,則并入總表,左表沒(méi)有改時(shí)間的,以nan代替。
由于期貨數(shù)據(jù)頻率相比股票ETF更高,nan主要出現(xiàn)在股票比期貨集合競(jìng)價(jià)更早的階段,這部分nan數(shù)據(jù)可酌情刪除。
我們將不同價(jià)差計(jì)算方式所繪制的圖合并到一起,可以看到,左上how="inner"的圖,點(diǎn)最為稀疏,因?yàn)樾枰瑫r(shí)兩個(gè)價(jià)格在該時(shí)刻都有數(shù)據(jù),才會(huì)計(jì)算價(jià)差;而右上how="outer"的圖,價(jià)差點(diǎn)最為密集,只需其中一組價(jià)格變動(dòng),就會(huì)計(jì)算1次價(jià)差,而下方的兩張圖how="left"、how="right",密集程度位于兩者之間。
價(jià)差計(jì)算方式不同,帶來(lái)策略驅(qū)動(dòng)方式的差異
價(jià)差不同的計(jì)算方式,表面來(lái)看是Merge函數(shù)所選擇how的參數(shù)不同,造成的價(jià)差序列計(jì)算結(jié)果不同。然而不同how參數(shù)的選擇,背后實(shí)則對(duì)應(yīng)著不同的策略原理、策略邏輯。
我們無(wú)論在策略的回測(cè)中,對(duì)待行情數(shù)據(jù),都需要采用一種“事件驅(qū)動(dòng)”的方式來(lái)進(jìn)行測(cè)試,這是最貼近實(shí)盤交易的回測(cè)方式。我們假設(shè)歷史數(shù)據(jù)也是像實(shí)盤那樣,每生成一個(gè)新的數(shù)據(jù),推送給我們一次,而我們每收到一個(gè)新的數(shù)據(jù),相當(dāng)于是一個(gè)新的事件,這個(gè)事件驅(qū)動(dòng)了后續(xù)的策略信號(hào)計(jì)算,以及信號(hào)對(duì)應(yīng)的開(kāi)平倉(cāng)條件的判斷。
我們?cè)倩氐絻r(jià)差不同的計(jì)算方式,其對(duì)應(yīng)的,實(shí)則是策略不同的驅(qū)動(dòng)方式。
how=‘outer’:對(duì)應(yīng)的是期貨、股票雙路行情的并發(fā)驅(qū)動(dòng),即只要有股票、期貨任意數(shù)據(jù)的更新,我們的程序就更新價(jià)差,判斷是否觸發(fā)交易信號(hào),此時(shí)的信號(hào)計(jì)算和觸發(fā),最為頻繁。
how = 'left':對(duì)應(yīng)的是期貨行情的單路驅(qū)動(dòng),即我們不管股票行情是否到達(dá),只要期貨數(shù)據(jù)更新,股票采用最新存儲(chǔ)的數(shù)據(jù)合并計(jì)算價(jià)差,并判斷是否觸發(fā)交易信號(hào)。
how = 'right':對(duì)應(yīng)股票行情的單路驅(qū)動(dòng),即我們不管期貨行情達(dá)到與否,只要股票數(shù)據(jù)更新,期貨用最新存儲(chǔ)的數(shù)據(jù)合并計(jì)算價(jià)差,并判斷是否觸發(fā)交易信號(hào),left和right的觸發(fā)方式,信號(hào)不如outer頻繁。
how=‘inner’:對(duì)應(yīng)的是期貨、股票雙路行情同時(shí)驅(qū)動(dòng),我們一般在回測(cè)、實(shí)盤中均不采用這種方式,在本文第一小節(jié),為大家介紹過(guò),行情基本上不可能同時(shí)到達(dá),這種驅(qū)動(dòng)方式太過(guò)理想化,也會(huì)在無(wú)形中減少很多交易機(jī)會(huì)。
實(shí)盤應(yīng)該選用的驅(qū)動(dòng)方式
綜上,我們?cè)诨販y(cè)、交易中可選的交易方式,可以分為兩大類:雙路行情的并發(fā)驅(qū)動(dòng)、單路行情的驅(qū)動(dòng)。那么,這兩大類不同的驅(qū)動(dòng)方式,究竟又該如何選擇?
筆者根據(jù)統(tǒng)計(jì)套利策略的實(shí)盤交易經(jīng)驗(yàn),提出如下幾點(diǎn)建議:
1. 計(jì)算價(jià)差的兩類資產(chǎn),有明確的活躍度區(qū)分、從屬關(guān)系:例如期貨的遠(yuǎn)近月(近月合約的交易活躍度通常大于遠(yuǎn)月)、股票與股指期貨的期現(xiàn)套利(股指期貨對(duì)于股票現(xiàn)貨有價(jià)格發(fā)現(xiàn)的作用)等,此時(shí)應(yīng)該以交易活躍、具有領(lǐng)先作用的品種,作為主驅(qū)動(dòng)品種,采用單路行情的驅(qū)動(dòng)。
2. 計(jì)算價(jià)差的兩類資產(chǎn),無(wú)明確區(qū)分、從屬關(guān)系:例如數(shù)字貨幣的跨交易所套利(OKEX、火幣交易所之間的套利,活躍程度相當(dāng),關(guān)系對(duì)等),可以采用雙路行情的并發(fā)驅(qū)動(dòng),以此來(lái)捕捉更多的交易機(jī)會(huì)。
3. 一旦確定了驅(qū)動(dòng)方式,在數(shù)據(jù)合并、回測(cè)、以及實(shí)盤交易系統(tǒng)的開(kāi)發(fā)中,都需要采用同一種驅(qū)動(dòng)方式,以最大程度確保回測(cè)結(jié)果與實(shí)盤交易的一致性。
如果對(duì)本次技術(shù)宅分享的內(nèi)容感興趣或有疑問(wèn),歡迎與小編交流
“數(shù)量技術(shù)宅”往期分享干貨
數(shù)量技術(shù)宅:【數(shù)量技術(shù)宅|數(shù)據(jù)爬蟲(chóng)系列分享】如何獲取免費(fèi)的數(shù)字貨幣歷史數(shù)據(jù)?zhuanlan.zhihu.com數(shù)量技術(shù)宅:【數(shù)量技術(shù)宅|量化投資策略系列分享】擺脫打工人命運(yùn)之成熟交易者期貨持倉(cāng)跟隨策略?zhuanlan.zhihu.com數(shù)量技術(shù)宅:多周期共振量化交易策略?zhuanlan.zhihu.com數(shù)量技術(shù)宅:為什么中證500(IC)是最適合長(zhǎng)期做多的股票指數(shù)?zhuanlan.zhihu.com數(shù)量技術(shù)宅:大宗商品現(xiàn)貨數(shù)據(jù)不好拿?商品季節(jié)性難跟蹤?Python爬蟲(chóng)一鍵解決沒(méi)煩惱?zhuanlan.zhihu.com數(shù)量技術(shù)宅:【數(shù)量技術(shù)宅|金融數(shù)據(jù)分析系列分享】如何正確抄底商品期貨、大宗商品?zhuanlan.zhihu.com數(shù)量技術(shù)宅:【數(shù)量技術(shù)宅|量化投資策略系列分享】股指期貨IF分鐘波動(dòng)率統(tǒng)計(jì)策略?zhuanlan.zhihu.com數(shù)量技術(shù)宅:【數(shù)量技術(shù)宅 | Python爬蟲(chóng)系列分享】實(shí)時(shí)監(jiān)控股市重大公告的Python爬蟲(chóng)?zhuanlan.zhihu.com總結(jié)
以上是生活随笔為你收集整理的按15分钟取数据_【数量技术宅|金融数据分析系列分享】套利策略的价差序列计算,恐怕没有你想的那么简单...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java8电脑版安装包下载百度云_eve
- 下一篇: 声光调制器实验研究_脉冲光抽运原子钟研究