VeighNa源碼深入解析-差價(jià)交易
期待很久的vn.py 2.0.7版本上線已經(jīng)有一段時(shí)間了,這次更新最大的變化就是增加了python3版本的SpreadTrading模塊,這樣就使得交易的方式不再只是單向交易,一些基于價(jià)差的策略如配對(duì)交易或者統(tǒng)計(jì)套利的策略的實(shí)現(xiàn)成為可能。因?yàn)槲覍?duì)價(jià)差交易方面很感興趣,所以也有經(jīng)常打聽vn.py的SpreadTrading什么時(shí)候上線,后來也是聽陳曉優(yōu)大佬說過九月中下旬會(huì)上線,所以在這個(gè)模塊上線后就打算對(duì)SpreadTrading模塊進(jìn)行整理了,因?yàn)闀r(shí)間的緣故所以一直拖到現(xiàn)在。vn.py的官方目前也有對(duì)SpreadingTrading進(jìn)行了簡(jiǎn)單介紹,下面就以官方的教程為例進(jìn)行對(duì)這個(gè)模塊進(jìn)行學(xué)習(xí)和使用。
SpreadTrading模塊介紹
這次先不分析源碼,還是以VN Station圖像化界面的操作為例,進(jìn)行SpreadTrading模塊的使用。
首先還是需要啟動(dòng)VN Station,在VN Trader的啟動(dòng)欄中將SpreadTrading模塊進(jìn)行勾選,然后連接CTP,進(jìn)入SpreadTrading的界面。
進(jìn)行價(jià)差交易之前,需要進(jìn)行兩步操作,一是創(chuàng)建價(jià)差,也就是要進(jìn)行編輯交易品種、交易數(shù)量、價(jià)格的乘數(shù)等信息;二是創(chuàng)建價(jià)差策略,也就是對(duì)上面創(chuàng)建的價(jià)差進(jìn)行以某種策略進(jìn)行交易。下面就是這兩個(gè)部分:
創(chuàng)建價(jià)差
點(diǎn)擊創(chuàng)建價(jià)差即可以進(jìn)行價(jià)差的創(chuàng)建,下面的例子是以螺紋鋼rb2001和rb2002為例進(jìn)行創(chuàng)建價(jià)差,從而可以實(shí)現(xiàn)一個(gè)簡(jiǎn)單跨期套利。
需要注意的是:
1、主動(dòng)腿以及其他腿的代碼需要按照vn.py中規(guī)定的格式進(jìn)行編輯。
2、主動(dòng)腿指的是當(dāng)價(jià)差滿足條件時(shí),率先發(fā)出的合約,主動(dòng)腿需要在下面的腿1-5內(nèi)。
3、價(jià)格乘數(shù)也就是構(gòu)成價(jià)差公式的對(duì)應(yīng)合約價(jià)格的系數(shù),圖中的價(jià)差即 spread = 1 × rb2001 - 1 × rb2002。
4、交易乘數(shù)也就是執(zhí)行交易時(shí)的手?jǐn)?shù),正數(shù)意味著多頭,負(fù)數(shù)意味著空頭。
關(guān)于上面的“腿”的說法沒有接觸過價(jià)差套利的人可能會(huì)比較陌生,因?yàn)樵谧鲆恍﹥r(jià)差套利時(shí),通常需要在相關(guān)的合約上進(jìn)行兩個(gè)方向的多空交易,此時(shí)就可以理解為一個(gè)人的兩條腿,缺少了哪一條都無法正常行走,所以在價(jià)差交易中多空部分分別被稱為腿(或者“邊“)。有時(shí)候,套利的對(duì)象可能會(huì)有多個(gè),如大豆、豆粕和豆油三者,這時(shí)候就會(huì)有多條腿,這也是vnpy在創(chuàng)建價(jià)差時(shí)設(shè)置了下面的腿1-5。
在創(chuàng)建了價(jià)差之后,界面就對(duì)剛剛創(chuàng)建的價(jià)差進(jìn)行了更新:
價(jià)差策略
在創(chuàng)建價(jià)差后,就可以創(chuàng)建針對(duì)這些價(jià)差的策略了。通過點(diǎn)擊添加策略,可以將vnpy自帶的基礎(chǔ)價(jià)差策略BasicSpreadStrategy進(jìn)行添加。
在創(chuàng)建策略的時(shí)候,需要注意的是:
1、策略名稱可以根據(jù)價(jià)差交易的對(duì)象進(jìn)行設(shè)置,但是spread_name需要和上面創(chuàng)建的價(jià)差保持一致。
2、buy、sell、cover、short價(jià)格分別是對(duì)價(jià)差進(jìn)行相應(yīng)操作的觸發(fā)價(jià)位。
3、max_pos指的是價(jià)差合約的最大持倉(cāng)量。
4、payup是下單時(shí)的超價(jià)。
5、interval指的是下單到撤單可以等待的時(shí)間,單位是秒。
在創(chuàng)建策略后,界面就更新出類似CTA策略一樣的啟動(dòng)欄,需要做的同樣是初始化和啟動(dòng)的操作:
總結(jié)和展望
由于SpreadTrading模塊只是剛剛上線,所以功能上并不是很完善,像現(xiàn)在自帶的價(jià)差策略只是一個(gè)簡(jiǎn)單的到價(jià)撮合成交的策略,開平倉(cāng)的價(jià)格也是需要自己手動(dòng)去設(shè)置,并不能隨著行情的改變而進(jìn)行自適應(yīng)的調(diào)整,所以,想必后期的價(jià)差策略也會(huì)在此方面進(jìn)行改進(jìn)吧。
另一方面,手動(dòng)設(shè)置多空品種的價(jià)格乘數(shù)或者交易乘數(shù)也為交易者提供了一些便利,這樣,我們就可以根據(jù)自己分析得到的一些規(guī)律,如協(xié)整系數(shù)或者回歸系數(shù)等來設(shè)置相應(yīng)的數(shù)值。
除此之外,對(duì)比與CTA策略,SpreadTrading模塊還缺少對(duì)應(yīng)的價(jià)差策略回測(cè)模塊,所以這也將是后期更新的一部分。
總而言之,SpreadTrading模塊的加入,為vnpy增色不少,后面也會(huì)繼續(xù)對(duì)其源碼進(jìn)行分析,同時(shí)也希望vnpy后續(xù)增添更多亮點(diǎn),為交易者提供更多便利。
市場(chǎng)微觀結(jié)構(gòu)
期貨、股票、期權(quán)、外匯、美股,這些不同市場(chǎng)的微觀交易結(jié)構(gòu)是怎樣的?
行情是怎么形成的,到底什么是tick?
下單后,委托請(qǐng)求是怎么一步步到達(dá)交易執(zhí)行端,再返回委托結(jié)果的?
C++ API的Python封裝
pybind11、cython、ctypes等封裝技術(shù)的詳細(xì)講解
針對(duì)國(guó)內(nèi)各種風(fēng)格的C++ API,如何實(shí)現(xiàn)低延時(shí)的封裝方案
交易接口業(yè)務(wù)層的功能對(duì)接開發(fā)
從0開始對(duì)接開發(fā)交易接口
如何針對(duì)某一市場(chǎng)定制交易接口,充分利用STOP、FAK、FOK等委托?
RPC核心交易路由服務(wù)
認(rèn)識(shí)VeighNa的RPC開發(fā)框架:REQ-REP和SUB-PUB模式
應(yīng)用RpcGateway交易接口,實(shí)現(xiàn)輕量級(jí)多進(jìn)程實(shí)盤交易架構(gòu)
RpcService模塊擴(kuò)展開發(fā),添加標(biāo)準(zhǔn)化TWAP算法交易支持
價(jià)格:10999元
VeighNa深入CTA實(shí)戰(zhàn)日期:2022年12月17日(周六)和12月18日(周日)時(shí)間:兩天下午1點(diǎn)-6點(diǎn),共計(jì)10小時(shí)大綱:
CTA策略開發(fā)
投研歷史數(shù)據(jù)解決方案,多種數(shù)據(jù)庫(kù)配置、歷史行情記錄、異常數(shù)據(jù)清洗
基于模板開發(fā)CTA策略,參數(shù)變量設(shè)計(jì),回調(diào)函數(shù)處理,交易函數(shù)詳解
深入K線時(shí)間序列:自定義K線合成,技術(shù)指標(biāo)定制,時(shí)間序列統(tǒng)計(jì)分析
策略回測(cè)優(yōu)化
回測(cè)引擎核心業(yè)務(wù)邏輯流、委托撮合規(guī)則(停止單、限價(jià)單)、策略狀態(tài)控制
回測(cè)圖表的分析方法,統(tǒng)計(jì)數(shù)據(jù)分析中的誤區(qū)
優(yōu)化算法詳解:暴力窮舉算法、智能遺傳算法
實(shí)盤交易運(yùn)維
策略每日盤中的生命周期管理
歷史數(shù)據(jù)初始化、策略運(yùn)行狀態(tài)同步管理
盤中交易異常處理方案
CTA策略案例
股指期貨策略源代碼分享:SuperCombo、Cuatro、NewDualThrust
商品期貨策略源代碼分享:MoneyFlow、OscillatorDrive、CincoStrategy
外盤市場(chǎng)策略源代碼分享:SuperTurtle、KeltnerBandit、RsiMomentum
CTA策略中的交易算法實(shí)現(xiàn):委托細(xì)粒度狀態(tài)機(jī)管理

