vn.py是基于Python的開(kāi)源量化交易程序開(kāi)發(fā)框架,起源于國(guó)內(nèi)私募的自主量化交易系統(tǒng)。2015年初項(xiàng)目啟動(dòng)時(shí)只是單純的交易API接口的Python封裝。隨著業(yè)內(nèi)關(guān)注度的上升和社區(qū)不斷的貢獻(xiàn),目前已經(jīng)成長(zhǎng)為一套全功能的交易程序開(kāi)發(fā)框架,用戶群體也日漸多樣化,包括私募基金、券商自營(yíng)和資管、期貨資管和子公司、高校研究機(jī)構(gòu)和專業(yè)個(gè)人投資者等。
豐富的Python交易API接口(vnpy.api),基本覆蓋了國(guó)內(nèi)外所有常規(guī)交易品種(股票、期貨、期權(quán)、外匯、外盤、比特幣),具體包括:
CTP(ctp)
飛馬(femas)
中泰證券XTP(xtp)
中信證券期權(quán)(cshshlp)
金仕達(dá)黃金(ksgold)
金仕達(dá)期權(quán)(ksotp)
飛鼠(sgit)
飛創(chuàng)(xspeed)
QDP(qdp)
上海直達(dá)期貨(shzd)
Interactive Brokers(ib)
OANDA(oanda)
OKCOIN(okcoin)
火幣(huobi)
LBank(lbank)
簡(jiǎn)潔易用的事件驅(qū)動(dòng)引擎(vnpy.event),作為事件驅(qū)動(dòng)型交易程序的核心
支持服務(wù)器端數(shù)據(jù)推送的RPC框架(vnpy.rpc),用于實(shí)現(xiàn)多進(jìn)程分布式架構(gòu)的交易系統(tǒng)
開(kāi)箱即用的實(shí)盤交易平臺(tái)框架(vnpy.trader),整合了多種交易接口,并針對(duì)具體策略算法和功能開(kāi)發(fā)提供了簡(jiǎn)潔易用的API,用于快速構(gòu)建交易員所需的量化交易程序,應(yīng)用舉例:
同時(shí)登錄多個(gè)交易接口,在一套界面上監(jiān)控多種市場(chǎng)的行情和多種資產(chǎn)賬戶的資金、持倉(cāng)、委托、成交情況
支持跨市場(chǎng)套利(CTP期貨和XTP證券)、境內(nèi)外套利(CTP期貨和IB外盤)、多市場(chǎng)數(shù)據(jù)整合實(shí)時(shí)預(yù)測(cè)走勢(shì)(CTP的股指期貨數(shù)據(jù)、IB的外盤A50數(shù)據(jù)、Wind的行業(yè)指數(shù)數(shù)據(jù))等策略應(yīng)用
CTA策略引擎模塊,在保持易用性的同時(shí),允許用戶針對(duì)CTA類策略運(yùn)行過(guò)程中委托的報(bào)撤行為進(jìn)行細(xì)粒度控制(降低交易滑點(diǎn)、實(shí)現(xiàn)高頻策略)
實(shí)盤行情記錄,支持Tick和K線數(shù)據(jù)的落地,用于策略開(kāi)發(fā)回測(cè)以及實(shí)盤運(yùn)行初始化
數(shù)據(jù)相關(guān)的API接口(vnpy.data),用于構(gòu)建和更新歷史行情數(shù)據(jù)庫(kù),目前包括:
上海中期歷史行情服務(wù)(shcifco)
通聯(lián)數(shù)據(jù)API下載服務(wù)(datayes)
天勤行情數(shù)據(jù)接口(tq)
關(guān)于vn.py項(xiàng)目的應(yīng)用演示(examples),對(duì)于新手而言可以從這里開(kāi)始學(xué)習(xí)vn.py項(xiàng)目的使用方式
vn.py項(xiàng)目的Docker鏡像(docker),目前尚未完成
官網(wǎng)和知乎專欄,內(nèi)容包括vn.py項(xiàng)目的開(kāi)發(fā)教程和Python在量化交易領(lǐng)域的應(yīng)用研究等內(nèi)容
官方交流QQ群262656087,管理較嚴(yán)格(定期清除長(zhǎng)期潛水的成員)
Windows
Ubuntu
請(qǐng)參考項(xiàng)目wiki中的教程。
方法1
在這里下載最新版本,解壓后:
方法2
pip install vnpy pymongo msgpack-python websocket-client qdarkstyleconda install -c quantopian ta-lib=0.4.9
關(guān)于TA-Lib安裝
Ubuntu上安裝到talib時(shí)若遭遇'Permission denied'錯(cuò)誤,請(qǐng)?jiān)趇nstall.sh運(yùn)行完成后,在Terminal中輸入以下命令安裝:
sudo /home/vnpy/anaconda2/bin/conda install -c quantopian ta-lib=0.4.9
其中'/home/vnpy/anaconda2/'是你的Anaconda安裝路徑。
在SimNow注冊(cè)CTP仿真賬號(hào),記下你的賬號(hào)、密碼、經(jīng)紀(jì)商編號(hào),然后下載快期查詢你的交易和行情服務(wù)器地址
找到vn.py應(yīng)用示例目錄examples,打開(kāi)examples\VnTrader\CTP_connect.json,修改賬號(hào)、密碼、服務(wù)器等為上一步注冊(cè)完成后你的信息(注意使用專門的編程編輯器,如Sublime Text等,防止json編碼出錯(cuò))
找到VnTrader的啟動(dòng)入口run.py,并雙擊運(yùn)行(若無(wú)法雙擊,則在當(dāng)前目錄按住Shift點(diǎn)鼠標(biāo)右鍵,打開(kāi)cmd輸入python run.py運(yùn)行),run.py內(nèi)容如下:
# encoding: UTF-8# 重載sys模塊,設(shè)置默認(rèn)字符串編碼方式為utf8import sysreload(sys)sys.setdefaultencoding('utf8')# 判斷操作系統(tǒng)import platformsystem = platform.system()# vn.trader模塊from vnpy.event import EventEnginefrom vnpy.trader.vtEngine import MainEnginefrom vnpy.trader.uiQt import createQAppfrom vnpy.trader.uiMainWindow import MainWindow# 加載底層接口from vnpy.trader.gateway import (ctpGateway, oandaGateway, ibGateway, tkproGateway)if system == 'Windows': from vnpy.trader.gateway import (femasGateway, xspeedGateway, futuGateway, secGateway) if system == 'Linux': from vnpy.trader.gateway import xtpGateway# 加載上層應(yīng)用from vnpy.trader.app import (riskManager, ctaStrategy, spreadTrading)#----------------------------------------------------------------------def main(): '''主程序入口''' # 創(chuàng)建Qt應(yīng)用對(duì)象 qApp = createQApp() # 創(chuàng)建事件引擎 ee = EventEngine() # 創(chuàng)建主引擎 me = MainEngine(ee) # 添加交易接口 me.addGateway(ctpGateway) me.addGateway(tkproGateway) me.addGateway(oandaGateway) me.addGateway(ibGateway) if system == 'Windows': me.addGateway(femasGateway) me.addGateway(xspeedGateway) me.addGateway(secGateway) me.addGateway(futuGateway) if system == 'Linux': me.addGateway(xtpGateway) # 添加上層應(yīng)用 me.addApp(riskManager) me.addApp(ctaStrategy) me.addApp(spreadTrading) # 創(chuàng)建主窗口 mw = MainWindow(me, ee) mw.showMaximized() # 在主線程中啟動(dòng)Qt事件循環(huán) sys.exit(qApp.exec_())if __name__ == '__main__': main()
更多使用方法方法請(qǐng)參考examples下的其他目錄。
項(xiàng)目的最新文檔請(qǐng)查看Github Wiki,知乎專欄和官網(wǎng)文檔已經(jīng)落后于項(xiàng)目開(kāi)發(fā)版本,建議只作為額外的參考資料。
WingIDE:非常好用的Python集成開(kāi)發(fā)環(huán)境(作者就是用它寫的vn.py)
Robomongo:MongoDB的圖形化客戶端,方便監(jiān)控和修改數(shù)據(jù)
Sublime Text:針對(duì)編程的文本編輯器,當(dāng)然你也可以使用Vim或者Emacs
PyQtGraph:適用于開(kāi)發(fā)實(shí)時(shí)更新數(shù)據(jù)的圖表,如Tick圖、K線圖、期權(quán)波動(dòng)率曲線等(Matplotlib渲染開(kāi)銷太大,用于實(shí)盤繪圖可能拖慢整個(gè)程序)
Visual Studio 2013:這個(gè)就不多說(shuō)了(作者編譯API封裝用的是2013版本)
vn.py使用github托管其源代碼,如果希望貢獻(xiàn)代碼請(qǐng)使用github的PR(Pull Request)的流程:
創(chuàng)建 Issue - 對(duì)于較大的改動(dòng)(如新功能,大型重構(gòu)等)最好先開(kāi)issue討論一下,較小的improvement(如文檔改進(jìn),bugfix等)直接發(fā)PR即可
Fork vn.py - 點(diǎn)擊右上角Fork按鈕
Clone你自己的fork: git clone https://github.com/$userid/vnpy.git
從dev創(chuàng)建你自己的feature branch: git checkout -b $my_feature_branch dev
在$my_feature_branch上修改并將修改push到你的fork上
創(chuàng)建從你的fork的$my_feature_branch分支到主項(xiàng)目的dev分支的[Pull Request] - 在此點(diǎn)擊compare across forks,選擇需要的fork和branch創(chuàng)建PR
等待review, 需要繼續(xù)改進(jìn),或者被Merge!
過(guò)去的半年中陸續(xù)收到了許多用戶的捐贈(zèng),在此深表感謝!所有的捐贈(zèng)資金都投入到了vn.py社區(qū)基金中,用于支持vn.py項(xiàng)目的運(yùn)作。最近主要的一個(gè)支出是相關(guān)文檔編寫,目前來(lái)看文檔完成的速度和質(zhì)量都顯著超出預(yù)期。
先強(qiáng)調(diào)一下:vn.py是開(kāi)源項(xiàng)目,可以永久免費(fèi)使用,并沒(méi)有強(qiáng)制捐贈(zèng)的要求?。?!
捐贈(zèng)方式:支付寶3216630132@qq.com(*曉優(yōu))
計(jì)劃長(zhǎng)期維護(hù)一份捐贈(zèng)清單,所以請(qǐng)?jiān)诹粞灾凶⒚魇琼?xiàng)目捐贈(zèng)以及捐贈(zèng)人的名字(當(dāng)然想匿名的用戶就隨意了)。
MIT
聯(lián)系客服