簡單介紹下vnpy的價差交易模組 spread_trading

張國平發表於2021-07-20


之前說從CTA趨勢轉日內交易,做了些價差交易策略,也實盤跑了下。結果不太理想,沒這麼賺錢;總結一句話,交易費用和payup 超價吃掉大部分收益,使得雖然每筆交易看看有收益,實際並不怎麼樣。


雖然現在不用價差交易策略,不過還是簡單介紹下吧。

VNPY價差交易的簡單邏輯

價差交易原理很簡單,就是一對或者一組品種其之間價格有一定關聯度,這個可以跑透過計算協方差Covariance矩陣來量化驗證,這個中可能有正向或者反向,甚至多個組合的。

當價格差大於或者小於一個閾值的時候,比如價格差的歷史波動率的3倍;可以假設是異常,應該會迴歸均值,此時可以按照反向做一個組合買賣,等迴歸均值時候,再平倉獲利。

所以,vnpy價差交易的步驟也是,定義價差組合,定義買賣價差方法,就是如果買價差組合時候,是買入A賣出B,還是如何;最後定義什麼時候買賣組合,就是價差交易策略。這些搞清楚,也就是清楚了。

價差交易的類

不同於CTA策略,價差交易還有些專用的類,這裡介紹下。


SpreadData, 這個就是前面說的價格組,或者叫價差組;就是多個不同品種組合,其實可以理解為就是一個新的品種,組合出來的品種;按照你定義計算公式計算出價格,賣出價ask和賣出量,還有買入量和買入價格;還可以組合出tick資訊,這些tick資訊設定可以組合出bar,反正你當作一個新的品種處理。

另外SpreadData還包括交易後的成交價格,和持有手數等,這些都是組合自己計算的。

這裡要注意的是min_volume,可以理解為螺紋鋼的10噸一手,這個也是組合的數量最小計量。如果為2的,主動腿買了2個單位,對於價差組就是2/2 = 1 手。


LegData,價差組就是多個品種的組合,這裡用leg來代表一個品種,做過SWAP互換的應該很好理解。這裡LegData對應就是真的品種。


SpreadAlgo:價差演算法,這個不是太直觀;因為買入或者賣出一個組合,實際上是按照這個組合下的品種組合或,買入一些或者一個品種,賣出一些品種。那麼價差演算法,就是錄入一個這樣買賣指令。

這裡就有個主動腿和超價的概念,打個比如組合是(rb2110 - rb2021),如果 價差在50以上時候,認為應該太大應該縮小。價差演算法就是價差在50的時候,賣出價格組合,演算法就會分解為應該賣出short螺紋鋼rb2110,買入buy螺紋鋼rb2021。那麼因為螺紋鋼 rb2021非主力合約,成交不活躍,應該先交易螺紋鋼rb2021,交易成交後,在按照賣出螺紋鋼rb 2021的價格,加上50,賣出rb2110,但是此時可能價格變動,為了成交,在賣出價格餘量(payup)來加以螺紋鋼rb2021。

這裡還有一個組合買賣價格差,就是ask和bid的差距,不同單一品種的1個價位差,組合可能是至少2個。這樣一來一去,就吃掉至少3到4點價差,加上買和賣雙邊手續費,至少7-8個點。


SpreadStrategy:把最難的價差組合搞清楚,價差交易策略就很簡單,就是按照價差組的價格走勢,傳送價差交易演算法,這裡的是透過start_long_algo / start_short_algo 這樣發出交易演算法,再由SpreadAlgoEngine去分解傳送真正交易請求;個人感覺中間計算太多次,速度有點拖。



總結下,核心就是把價差組理解為一個組合品種,對組合品種的買賣是用價差演算法來過渡實現。但是雙邊交易手續費和價格差和payup太佔用利潤。不太適合直接作為日內交易。



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22259926/viewspace-2782233/,如需轉載,請註明出處,否則將追究法律責任。

相關文章