VirtualApi目前支持上海期貨交易所的CTP回測,可以看做本地計算機架設了一套SIMNOW仿真環境,可用於CTP程序化交易,量化交易回測。
VirtualApi2.52版本說明:當前版本的Virtualapi是對上期CTP接口 6.3.15的仿真(包括上期SIMNOW和各期貨公司實盤都採用6.3.15版本)支持的程式語言
VirtualApi Api支持多種程式語言,包括C++、Python、Java、C#、Golang、易語言等 進行量化交易回測。
支持的作業系統
VirtualApi Api支持Windows作業系統,版本要求Windows7、Windows2008及以上。
支持的量化交易框架
VirtualApi 支持各種基於CTP接口的自編程序和框架,例如vn.py、Quicklib、海風等。
CTP Demo和Virtualapi For CTP Demo 代碼是一樣的,不同的採用了2套DLL。
為了克服現有技術存在的上述不足,VirtualApi仿真API的回測技術應運而生,它是模擬原生API來實現的。例如通過模擬原生交易API和行情API,例如通過模擬原生API的庫方法的定義、頭文件的定義等,使得回測和實盤交易代碼,簡單的將實盤代碼替換為仿真API,對底層代碼可不作改動或改動較少即可實現回測和參數優化。
升級說明:Virtualapi V2.5.2 解決了上一個版本在某些環境中查詢持倉回調不反回數據的問題。
CTP可以改為自己帳戶接實盤,Virtualapi用戶回測。
問題1:SIMNOW和Virtualapi(VirtualApi 期貨CTP TICK級本地量化交易仿真回測首頁)所有什麼不同?
Virtualapi2.52
SINNOW是上期的CTP接口仿真環境,可以註冊期貨模擬帳戶,用CTP api進行交易,SIMNO的功能主要是用於功能測試。
而Virtualapi相當於你可以在本地計算機架設一套SIMNOW的仿真結算系統,並且可以快速回訪TICK數據文件,主要用於CTP接口的量化交易回測。
問題2:支持Virtualapi的數據文件從哪裡下載?
我們維護了一套支持Virtualapi欄位順序格式的數據採集伺服器,一般每半個月到1個月會打包壓縮到網盤。
mdshare和quicklib量化交易行情數據共享中心不僅提供了網盤下載連結,還提供了可以自己部署的數據採集服務DataCollect.exe。
問題3:Virtualapi支持哪些程式語言?
Virtualapi是對CTP底層仿真,並不是程式語言框架。所以不管是你自己開發的CTP程序還是用了任何程式語言的CTP框架,都可以使用Virtualapi進行回測,只要通過替換原生DLL的方式,並指定數據文件路徑list.csv和指定手續費設置setting.ini,就可以在3分鐘內將你之前開發的CTP策略程序轉換為回測程序,在代碼上可以不做任何修改。
問題4:使用Virtualapi需要注意哪些問題?
CTP是2Tick/秒, Tick之間有0.5秒的延遲,如果你做CTP在行情接收TICK後放入緩衝區,採用另一個線程進行計算,也就是說採用的是生產者消費者模式的話,是不能用於Virtualapi的。
因為Virutlapi是快速回放TICK,如果線程之間價格不一致的話,會導致很大的隨機誤差,也許計算策略的時候已經是5分鐘之前的TICK的價格了,底層結算就會出現誤差。
您可以做一個策略,如果同一個程序用同一組數據文件進行回測,資金曲線不完全一致的話就是這種隨機誤差導致的。
為了避免這個問題的發生,請在使用Virtualapi進行回測的時候,需要在行情回調函數中直接進行策略邏輯的計算,切記不要將Tick放到另一個線程裡進行策略邏輯的計算。
行情回調函數是指以下函數:
///深度行情通知
virtual void OnRtnDepthMarketData(CThostFtdcDepthMarketDataField *pDepthMarketData) {};
問題5 :Virtualapi是免費的嗎?
Virtualapi承諾提供對所有人永久免費的版本。
問題6:Virtualapi支持的數據格式是怎樣的?
CSV數據文件欄位順序:
localtime (本機寫入TICK的時間),
InstrumentID (合約名),
TradingDay (交易日),
ActionDay (業務日期),
UpdateTime (時間),
UpdateMillisec(時間毫秒),
LastPrice (最新價),
Volume(成交量) ,
HighestPrice (最高價),
LowestPrice(最低價) ,
OpenPrice(開盤價) ,
ClosePrice(收盤價),
AveragePrice(均價),
AskPrice1(申賣價一),
AskVolume1(申賣量一),
BidPrice1(申買價一),
BidVolume1(申買量一),
UpperLimitPrice(漲停板價)
LowerLimitPrice(跌停板價)
OpenInterest(持倉量),
Turnover(成交金額),
PreClosePrice (昨收盤),
PreOpenInterest (昨持倉),
PreSettlementPrice (上次結算價),
VirtualApi誕生的技術背景
現在的量化回測軟體和方法有三類,一類是通過文華、TB、MC等商業軟體,在商業軟體中通過編寫交易指標和交易公式,或通過加載用戶自己開發的第三方策略庫進行交易策略的開發和回測;第二類是直接使用交易所、券商、API軟體服務商提供的API或券商等機構提供的行情和交易API直接開發交易策略,或通過一些回測框架調用這些原生API進行回測;第三類是利用聚寬、優礦的網站在線平臺進行回測。
若採用第一類商業軟體開發量化交易回測系統,雖然對從事量化交易的人來說,開發策略需要的工作量較少,對開發者編程能力要求不高。但缺點也是顯而易見的,除了商業軟體本身需要收費提高了交易成本以外,採用商業軟體開發交易策略不夠靈活,使得很多交易策略無法實現。
若採用第二類直接使用API開發策略或採用針對API的回測框架,例如python的各種回測框架、matlaba的各種回測框架、R語言的各種回測框架,PyAlgoTrade、Zipline等、雖然開發策略較為靈活,但缺點是開發交易策略的實盤代碼並不能直接進行回測,必須要採用引入回測框架進行回測,待回測完畢,再將回測完成的參數接入實盤策略代碼中或刪除回測框架部分的代碼接入實盤交易的API,使得量化交易回測代碼和實盤的代碼有較大的改動,增加了策略開發者的工作,也增加了量化交易愛好者時間成本,甚至對很多編程能力有限的量化愛好者來說提搞了研究難度的門檻。
若採用第三類在線回測平臺進行回測,由於需要將編寫的策略在網站指定的伺服器上運行,由於是多用戶共享一臺伺服器,所以回測性能無法得到保證、網站更傾向於採用精度不高的數據進行回測。還由於對策略開發者來說不是使用原生API進行開發策略,所以策略開發的自由度也不夠,很多想法也無法實現。更重要的是,選擇網站在線平臺的方式來開發量化交易策略,就等於默認了網站管理員可隨時查看自己辛辛苦苦開發的策略代碼,保密性讓人擔憂,從事量化交易的專業機構幾乎不會採用在線網站的回測方式。
近年來,量化交易在金融領域應用的越來越廣發,回測系統的設計是量化交易中不可缺失的一部分,但同時也暴露出一些問題,例如商業軟體成本高、自己搭建會測框架時間成本高,難度大、採用第三方回測框架難度大、回測到實盤交易的代碼改動較大、量化策略保密性不高等等。
Virtualapi可以作為期貨CTP TICK級回測的本地仿真環境,實現CTP量化交易。
VN.PY回測可以使用Virtualapi