简介
- VeighNa – 基于Python的开源量化交易系统开发框架, 之前叫vnpy,最近改名叫VeighNa了,官网是 https://www.vnpy.com , 对应的产品是VeighNa Studio。 不是 http://www.vnpy.cn ,其对应的产品是VN Trader 。百度搜vnpy出来的是https://www.vnpy.cn。 不要搞混了,这两之前在打官司。 VeighNa定位是量化交易平台,提供从交易API对接到策略自动交易的完整解决方案,对接了国内外诸多不同类型的金融市场:证券、期货、期权、外汇、数字货币等。有回测功能,但支持较弱。
安装
对windows支持较好,提供了python发行版,其内置了最新版的VeighNa框架以及VeighNa Station量化管理平台,无需手动安装。 对ubuntu支持其次,对mac支持最弱。
安装后,在VeighNa社区论坛注册获得VeighNa Station账号密码(论坛账号密码即是)
Mac安装: bash install_osx.sh
mac在开始安装vn.py之前,需要先手动安装几个特殊的库,打开Terminal后执行以下命令:
1 | brew install ta-lib // 不安装这个,会提示talib/_ta_lib.c:601:10: fatal error: 'ta-lib/ta_defs.h' file not found |
talib,是Technical Analysis Library的简称,是一种广泛用在程序化交易中进行金融市场数据的技术分析的函数库。它提供了多种技术分析的函数,方便我们量化投资中编程工作
因为mac上不支持ctp接口,所以要注释掉ctp接口,否则运行会报错
代码框架介绍
vnpy 之前几乎所有代码都在 https://github.com/vnpy/vnpy 这个代码库中,但python很容易造成依赖包冲突,导致软件不能正常工作,从2.x某个版本起,vnpy开始分拆成N个代码库,好处是你只需要安装你需要的依赖,不容易造成依赖包冲突,不好的是拆的太细代码库太多了,维护起来较麻烦。
下面按如下顺序对vn.py各个功能进行说明:数据、存储、交易、回测、rpc、event、策略。
- 对接各类数据服务的适配器接口
- 对接tushare–tushare api参考tushare通用行情接口
- 对接tqsdk
- 对接米筐RQData–实现类: RqdataClient
Demo: 从rqdata获取历史行情,操作步骤:
1) 初始化rqdataClient
2) 构造请求对象
3) 从rqdata获取数据
4) 将数据保存到本地数据库
1 | from vnpy.trader.rqdata import RqdataClient |
data_manager:历史数据管理模块,通过树形目录查看数据库中已有的数据概况,选择任意时间段数据查看字段细节,支持CSV文件的数据导入和导出。
一句话概括:用好database_manager这个对象,提供了如下方法:1
2
3
4
5def load_bar_data( self, symbol: str, exchange: Exchange, interval: Interval, start: datetime, end: datetime) -> List[BarData]
def load_tick_data(self, symbol: str, exchange: Exchange, start: datetime, end: datetime ) -> List[TickData]:
def get_bar_overview(self) -> List[BarOverview]
def delete_bar_data( self, symbol: str, exchange: Exchange, interval: Interval ) -> int:
def delete_tick_data(self, symbol: str, exchange: Exchange ) -> int:data_recorder:行情记录模块,基于图形界面进行配置,根据需求实时录制Tick或者K线行情到数据库中,用于策略回测或者实盘初始化
- 对接各类数据库的适配器接口
在量化中,研究策略和实盘交易,都离不开数据。如果要提升回测速度,那么就需要搭建本地数据库。
vn.py数据库结构:DbBarData表示K线数据表映射对象,对应数据库的db_bar_data集合;DbTickData表示TICK数据表映射对象,对应对应数据库的db_tick_data; DbBarOverview表示K线汇总数据表映射对象,对应数据库的db_bar_overview。
通过对象database_manager实现,该对象通过抽象工厂模式,根据实际情况调用具体的数据库实现类。相关类: BaseDatabase。 存入数据库database_manager.save_bar_data(bars);从csv导入,import_data_from_csv, output_data_to_csv;从RQData查询, download_bar_data。
–基于peewee开发的SQLite数据库接口,无需另外安装配置数据库软件。SqliteDatabase类继承自BaseDatabase
- vnpy.gateway覆盖国内外所有交易品种的交易接口
对应接口交易接口Gateway类的query_history函数,实现历史数据的下载
对接futu–基于futu-api开发的富途证券港股、美股交易接口。使用时需要注意本接口只支持限价单。FutuGateway类继承自BaseGateway。参考futu api文档。适用于港美股、期权等
对接ib–封装InteractiveBrokers交易接口,connect, close, subscribe, send_order, query_account, query_position, query_history,底层使用EClient接口。适用于全球证券、期货、期权、贵金属等
对接ctp–基于CTP期货版的6.5.1接口封装开发,接口中自带的是【穿透式实盘环境】的dll文件。适用于国内期货、期权
对接中泰XTP–适用于国内证券(A股)、ETF期权
RPC服务(rpc):跨进程通讯接口,用于分布式架构。 使用zmq进行消息传递
- 回测
- cta_backtester:CTA策略回测模块,无需使用Jupyter Notebook,直接使用图形界面直接进行策略回测分析、参数优化等相关工作BacktesterEngine 封装了BacktestingEngine,还有init_rqdata。ib有query_history(),futu, tiger没有该接口
1
2
3
4
5
6backtester_engine.start_downloading(
vt_symbol,
interval,
start,
end
)
- rpc & webtrader
web_trader:Web服务模块,针对B-S架构需求设计,实现了提供主动函数调用(REST)和被动数据推送(Websocket)的Web服务器
rpc_service:RPC服务模块,允许将某一进程启动为服务端,作为统一的行情和交易路由通道,允许多客户端同时连接,实现多进程分布式系统
- 事件驱动引擎
- event作为事件驱动型交易程序的核心,使用Queue和Timer来实现
- 开箱即用的各类量化策略交易应用(app):
cta_strategy:CTA策略引擎模块,在保持易用性的同时,允许用户针对CTA类策略运行过程中委托的报撤行为进行细粒度控制(降低交易滑点、实现高频策略)
spread_trading:价差交易模块,支持自定义价差,实时计算价差行情和持仓,支持半自动价差算法交易以及全自动价差策略交易两种模式
option_master:期权交易模块,针对国内期权市场设计,支持多种期权定价模型、隐含波动率曲面计算、希腊值风险跟踪等功能
portfolio_strategy:组合策略模块,面向同时交易多合约的量化策略(Alpha、期权套利等),提供历史数据回测和实盘自动交易功能
algo_trading:算法交易模块,提供多种常用的智能交易算法:TWAP、Sniper、Iceberg、BestLimit等
script_trader:脚本策略模块,针对多标的组合类交易策略设计,同时也可以直接在命令行中实现REPL指令形式的交易,不支持回测功能
paper_account:本地仿真模块,纯本地化实现的仿真模拟交易功能,基于交易接口获取的实时行情进行委托撮合,提供委托成交推送以及持仓记录
chart_wizard:K线图表模块,基于RQData数据服务(期货)或者交易接口获取历史数据,并结合Tick推送显示实时行情变化
portfolio_manager:交易组合管理模块,以独立的策略交易组合(子账户)为基础,提供委托成交记录管理、交易仓位自动跟踪以及每日盈亏实时统计功能
excel_rtd:Excel RTD(Real Time Data)实时数据服务,基于pyxll模块实现在Excel中获取各类数据(行情、合约、持仓等)的实时推送更新
risk_manager:风险管理模块,提供包括交易流控、下单数量、活动委托、撤单总数等规则的统计和限制,有效实现前端风控功能
交流
我发文章的几个地方,欢迎大家在朋友圈等地方分享,多多交流。
- 微信公众号:诸葛说talk
- 知乎:https://www.zhihu.com/people/richard-zhu/posts
- 博客:https://rchardzhu.github.io/