VNPY官網



48bb2191-376d-42d3-85d0-4e8556587c6f-圖片.png VNPY CTP模擬櫃檯是一項底層模擬回測技術,是基於底層而不是應用層,所以是和程式語言無關的,並且沒有第3方平臺提供的方法,可以在不修改原有程式碼的前提下實現回測。VNPY模擬回測目前主要提供了上海期貨交易所的CTP介面(支援商品期貨、股指期貨),未來還將提供對券商、服務商、交易所的各種API進行模擬的版本。
先介紹一下CTP介面,CTP介面是上海期貨交易所提供的一套面向商品期貨、股指期貨、商品期權、股指期權的API介面,包含了行情訂閱和交易介面,支援國內149家合規期貨公司。
支援中金所、上海期貨交易所、大連期貨交易所、鄭州期貨交易所、能源所這5家期貨交易所的行情訂閱和賬戶程式化交易。
而VNPY CTP模擬櫃檯屬於底層模擬回測,同時是免費軟體,任何人和公司均可下載免費使用。

上期CTP官網
可以註冊模擬賬戶,下載原生CTP api,CTP Demo可用於該模擬的程式化交易,

VNPY模擬回測.支援程式語言

支援多種程式語言,包括C++、Python、Java、C#、Golang、易語言等 。
甚至支援快期接入。

打個比方:就像有一個叫CTP程式化的照相機,有一套普通鏡頭叫做CTP原生API,還有一套廣角鏡頭叫做VNPY模擬櫃檯,但無論哪套鏡頭拍出的照片,都可以被Photoshop後期處理調整對比度,亮度等等。而VNPY的Python框架,海風,PyCTP,Quicklib,快期就相當於後期Photoshop後期處理的這一步。

VNPY CTP模擬回測.支援的作業系統

VNPY底層模擬回測系統支援Windows作業系統,版本要求Windows7、Windows2008及以上。

VNPY CTP模擬回測.支援語言框架

支援各種自編CTP程式和各種程式語言框架,例如C++、Python、JAVA、C#等。
支援海風、VNPY、Quicklib、PyCTP等所有框架和自程式設計序。
上海期貨交易所只提供了 C++原生DLL,對於其他語言均是第三方封裝了,只能稱為CTP框架。
當然對於各種CTP 程式語言框架,例如Python框架、Java框架、C#框架等,VNPY模擬櫃檯的實現是一樣的,因為這些語言的框架本質上還是呼叫C++的庫檔案。
上期CTP官網:
提供了CTP技術文件、Windows API,Linux API,IOS  API,Android  API
推薦Windows 和Linux API介面,對IOS,Android一般不用於生產環境。
::::::上海期貨資訊科技有限公司::::::

一般透過CTP開發實現程式化交易的流程是:

(1)用手機註冊上海期貨交易所SIMNOW模擬賬戶

由於上期官方SIMNOW的模擬賬戶和實盤真實行情是基本同步的,所以這一環境僅用於功能測試,不適合用於回測;
上海SIMNOW 模擬賬戶官網
SimNow模擬交易【官方網站】

特別注意的是,上期的這2個網站,只有在工作日工作時間才能開啟,其他時間網站處於關閉狀態。事業單位,你懂的。
(2)透過VNPY CTP模擬櫃檯進行策略回測
下載資料和部署和實現模擬回測、策略引數調整和最佳化;
這一段在本文後面介紹。
(3)實盤賬戶開戶;
這裡kaihu條件很好,交易所標準+1分,交反50-80%
正規期貨公司商品期貨低佣金開戶(徽商期貨,宏源期貨,華安期貨,東方期貨)

(4)期貨實盤交易

回測方案說明

在VNPY的Virtualapi之前, 現在的量化回測軟體和方法有三類,
一、是透過文華、TB、MC等商業軟體,在商業軟體中透過編寫交易指標和交易公式,或透過載入使用者自己開發的第三方策略庫進行交易策略的開發和回測;若採用第一類商業軟體開發量化交易回測系統,雖然對從事量化交易的人來說,開發策略需要的工作量較少,對開發者程式設計能力要求不高。但缺點也是顯而易見的,除了商業軟體本身需要收費提高了交易成本以外,採用商業軟體開發交易策略不夠靈活,使得很多交易策略無法實現。
二、是直接使用交易所、券商、API軟體服務商提供的API或券商等機構提供的行情和交易API直接開發交易策略,或透過一些回測框架呼叫這些原生API進行回測;若採用第二類直接使用API開發策略或採用針對API的回測框架,例如python的各種回測框架、matlaba的各種回測框架、R語言的各種回測框架,PyAlgoTrade、Zipline等、雖然開發策略較為靈活,但缺點是開發交易策略的實盤程式碼並不能直接進行回測,必須要採用引入回測框架進行回測,待回測完畢,再將回測完成的引數接入實盤策略程式碼中或刪除回測框架部分的程式碼接入實盤交易的API,使得量化交易回測程式碼和實盤的程式碼有較大的改動,增加了策略開發者的工作,也增加了量化交易愛好者時間成本,甚至對很多程式設計能力有限的量化愛好者來說提搞了研究難度的門檻。
第三類是利用聚寬、優礦的網站線上平臺進行回測。若採用第三類線上回測平臺進行回測,由於需要將編寫的策略在網站指定的伺服器上執行,由於是多使用者共享一臺伺服器,所以回測效能無法得到保證、網站更傾向於採用精度不高的資料進行回測。還由於對策略開發者來說不是使用原生API進行開發策略,所以策略開發的自由度也不夠,很多想法也無法實現。更重要的是,選擇網站線上平臺的方式來開發量化交易策略,就等於預設了網站管理員可隨時檢視自己辛辛苦苦開發的策略程式碼,保密性讓人擔憂,從事量化交易的專業機構幾乎不會採用線上網站的回測方式。   近年來,量化交易在金融領域應用的越來越廣發,回測系統的設計是量化交易中不可缺失的一部分,但同時也暴露出一些問題,例如商業軟體成本高、自己搭建會測框架時間成本高,難度大、採用第三方回測框架難度大、回測到實盤交易的程式碼改動較大、量化策略保密性不高等等。
為了克服現有技術存在的上述不足,VNPY的VirtualApi模擬API的回測技術應運而生,它是模擬原生API來實現的。例如透過模擬原生交易API和行情API,例如透過模擬原生API的庫方法的定義、標頭檔案的定義等,使得回測和實盤交易程式碼,簡單的將實盤程式碼替換為模擬API,對底層程式碼可不作改動或改動較少即可實現回測和引數最佳化。
以一個典型的Windows 平臺下的 C++  CTP程式為例,VNPY CTP模擬回測.實盤迴測C++流程圖對比
標準CTP C++實盤程式化交易程式流程圖
標準CTP C++實盤程式化交易程式流程圖
標準CTP C++透過VNPY模擬回測程式流程圖
標準CTP C++透過VNPY模擬回測程式流程圖

我們介紹如何使用VNPY  CTP模擬櫃檯實現TIKC級回測.

先從這裡下載VNPY  CTP模擬櫃檯壓縮包,點選紅色的按鈕“免費下載”進行下載。

v35.png
下載後解壓
65028794-050c-4495-b936-c16b76392f3f-圖片.png

進入一級目錄

188888c3-cef7-4814-b4cb-1231186a9db1-圖片.png

其中
(一)目錄“CTP6.3.15 Demo&回測替換配置”
是CTP  C++ Demo實盤案例和VNPY模擬櫃檯配置好的回測案例。
目前VNPY CTP模擬櫃檯是基於Windows的,DEMO是基於微軟的宇宙第一的IDE  Visual Studio開發的,可以相容Visual Studio2015/2017/2019進行開發和編譯。

請使用Visual Studio2015、Visual Studio2017、Visual Studio2019及以後的版本開啟Demo裡的MyAutoTrader.sln,
可以C++ Demo為基礎進行二次開發

當然VirutalApi也支援多種程式語言,支援所有基於CTP的開源框架和自程式設計序,
請根據框架和自程式設計序特點替換DLL和lib檔案重新編譯。

Bin目錄是編譯好的程式,可以直接執行除錯
CTP Demo/Bin(已編譯)/AutoTrader.exe 是原生CTP的Demo,已編譯好的應用程式。
VnpyApi For CTP Demo/Bin(已編譯)/AutoTrader.exe  是VirtualApi Demo已編譯好的應用程式,執行直接進行回測。

VnpyApi理論支援任何直接呼叫原生CTP api的策略程式,支援任何採用CTP api的框架,
VN.PY,Quicklib,支援C++、python程式、JAVA、C# 等,可以說無所不相容。並且實盤程式碼可以在不改動
一行程式碼前提下實現回測。

VnpyApi申請了國家發明專利

VnpyApi支援期貨CTP API介面,免費提供給廣大的期貨CTP程式開發愛好者。

CTP  API是上海期貨交易所的API,支援所有期貨公司期貨實盤賬戶和SIMNOW CTP模擬賬戶
模擬賬戶註冊網址

[關於VnpyApi]
VnpyApi是一種簡單易用的回測方式,這種方式可以在不修改一行程式碼的情況下進行回測,即回測程式碼即實盤程式碼,該方案透過模擬原始API的方式進行回測,回測速度極快,並申請了國家專利。

提供的Demo是基於C++的,但支援各種程式語言的CTP框架。請結合自己的CTP的程式進行替換.dll檔案(.lib,.h檔案)實現回測。

下載地址
需要安裝Visual Studio的C++模組,Visual Studiio安裝完成後,開啟專案檔案.sln檔案,
2d4c67a0-742d-4c85-bdb5-1326d4805505-圖片.png

雙擊MyAutoTrade.sln檔案開啟專案
圈出的紅色部分改為自己實盤賬戶或SIMNOW模擬賬戶
3015cbcb-3db1-4d32-b687-743150477714-圖片.png

在專案上右鍵“重新生成”即可編譯為exe程式
7fcdfeda-b21d-46c2-a334-c639e8ae0956-圖片.png

編譯生成exe應用程式的路徑如圖:
9ab91351-c1aa-49ac-be46-688d74eb0cde-圖片.png
我們進入到上圖的目錄下:
7510f816-89c4-4cf8-8de4-edcfd9e8d52b-圖片.png
其中:
AutoTrade.exe就是剛剛編譯生成的應用程式檔案;
AutoTrader.iobj 、AutoTrader.ipdb、AutoTrader.pdb是臨時檔案,可刪除;
thostmduserapi_se.dll 是原生CTP庫的行情庫,用於訂閱合約行情的;
thosttraderapi_se.dll 是原生CTP庫的交易庫,用於呼叫下單。

雙擊AutoTrade.exe 即可執行策略,這個Demo是一個最簡單的CTP策略:連續3比TICK上漲即開多,連續3比TICK下跌反手開空。

90decd76-e062-4b01-b239-47ad9bade197-圖片.png

CTP每天在交易日15點以後半小時到1小時關閉伺服器連線,所以需要在程式碼條件中自動重連程式碼,約在夜盤的20: 30以後自動重連,以及早上8: 30以後重連。如果再實現自動換主力合約的話,就可以做到365X24小時不 間斷執行,而且不需支付軟體使用費用,CTP介面是完全免費的。

下面介紹如何將這個實盤策略接入VNPY CTP模擬櫃檯進行回測

我們知道CTP的原生API為下圖部分
693fd42d-65f9-4eb5-b61d-ed41abe20cfb-圖片.png

VNPY模擬櫃檯的API如下圖
9df5ecf3-03d1-401a-ab9f-e969bb105036-圖片.png

其中.lib檔案和.h檔案是編譯中使用的,.dll檔案是編譯好後倍AutoTrade.exe呼叫的,我們要實現實盤轉回測只要將.dll檔案替換即可。
如下圖,其中圈紅色部門的檔案為替換檔案,藍色圈出的檔案為VNPY模擬櫃檯API特有檔案,複製到該目錄下即可。

(1)其中setting.ini 為手續費和滑點設定檔案;
(2)list.csv為資料檔案路徑設定檔案;
(3)Graph.exe為資金曲線分時圖繪製程式,在執行AutoTrade.exe時會自動開啟;
也可以待回測完成,開啟Graph.exe,再將資金曲線資料檔案qy.csv拖入Graph.exe視窗,即可繪製資金曲線分時圖;
(4)price.exe是回測部門行情繪圖檔案,當回測完成會生成md.py,將該檔案拖進price.exe即可繪製多日連續分時圖;

277b86c0-b27a-455d-a601-bd9c0cd1eb30-圖片.png

其中list.csv開啟如圖所示
特別注意:
(1)list.csv的資料檔案,必須是同一個合約;
(2)list.csv資料檔案裡的合約程式碼,必須和訂閱的合約要一致;
比如圖中是./Data/20180627/rb1810.csv
就必須在C++程式碼訂閱的是rb1810這個合約,目前Virtualapi不支援訂閱多合約和套利合約,多合約和套利回測會在未來升級版本中支援。
e7a65f5e-89f2-4085-a6b2-e4816a394911-圖片.png

VritualApi For CTP目錄和CTP API目錄,這2個目錄下的DEMO,程式碼完全一樣,僅僅是替換了thostmduserapi.lib、thostmduserapi.dll、thosttraderapi.lib、thosttraderapi.dll 這4個檔案重新編譯,
並將編譯好的exe程式目錄放入Graph.exe、price.exe、list.csv這3個檔案,執行AutoTrade.exe即可實現本地TICK級回測。
list.csv儲存的是依次讀取的tick資料檔案的路徑。

透過直接替換CTP的api,同時將list.csv、Graph.exe、price.exe放到程式編譯的目錄下面。
直接執行,直接進行回測。
預設資金為50萬。
生成臨時檔案qy.csv儲存資金曲線資料
生成臨時檔案md.csv儲存回測期間的分時資料
clean.bat 執行清理 qy.csv和md.csv 檔案。

資料從哪裡獲取?
(1)利用VNPY官網提供的CTP TICK資料實時採集工具;
VNPY行情采集工具

(2)從網盤下載
VNPY TICK資料下載

需要下載資料檔案,並修改list.csv目錄路徑。
其中資料格式為Dataupdate.exe規定的CSV欄位順序

在編譯好的目錄下,只需要將檔案替換為介面實現回測。

需要注意的問題:
1.訂閱合約和指定的資料檔案合約必須一致
2.一次只能回測一個合約,所以暫時不支援套利(2個合約)
3.行情回撥函式里進行策略計算,不要在另一個執行緒進行計算,否則會導致較大結算誤差。
原因是因為TICK更新太快,觸發交易訊號的價格和結算價格相差過大。
4.如果回測無資料,請仔細檢查list.csv 制定資料檔案的路徑是否正確;
5.暫時不支援setting.ini  資金的修改,預設為50萬 (500000);

(二)目錄“VnpyApi For CTP6.3.15庫檔案”
是與CTP原生API對應的VNPY CTP模擬櫃檯API檔案。

開戶6項權益

伺服器免費託管