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