社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  docker

VeighNa发布v3.7.0 - 量化交易容器解决方案VeighNa Docker!

VeighNa开源量化 • 1 年前 • 335 次点击  

本周发布了VeighNa的3.7.0版本,本次更新的主要内容是增加了量化交易容器解决方案VeighNa Docker,为Linux和Mac系统用户提供类似VeighNa Studio的快速安装部署功能。

在此首先要对社区用户【eis】表示感谢!正是他在社区论坛中分享的xhost图形界面输出方案,帮助我们找到了如何基于Docker容器运行GUI程序的技术方向。

对于已经安装了VeighNa Studio的用户,可以使用快速更新功能完成自动升级。对于没有安装的用户,请下载VeighNa Studio-3.7.0,体验一键安装的量化交易Python发行版,下载链接:


https://download.vnpy.com/veighna_studio-3.7.0.exe



是否需要学习Docker


开始正文内容之前想要说明下:对比VeighNa Studio使用VeighNa Docker需要掌握更高水平的开发技术知识,并不一定适合所有用户


这里梳理一些VeighNa Docker适合的应用场景:


    • 实盘交易中使用Linux系统,希望实现更低的tick-2-trade延时

    • 需要分布式部署的程序基础设施,解决策略并发数量上限的瓶颈;

    • 交易团队已经有一定规模,需要标准化的量化投研环境部署管理


如果你有上述需求,那么强烈推荐继续往下看。



认识Docker容器技术


从互联网上普遍能搜索到的描述定义来看,Docker是一套开源的应用容器引擎,采用操作系统级别的虚拟化技术来对【软件应用】及其【依赖的运行时环境】进行打包,并将打包完成的轻量级容器快速部署到各种不同环境中高效运行。


看完这段有点绕口的文字,不知道大家的感觉如何?反正当我第一次接触Docker的时候挺晕的,所以这里试着通过类比的方式来帮大家更加容易地理解


不管是投研回测还是实盘交易,想要成功运行起来一个VeighNa量化平台的程序,必须确保当前的系统上已经安装好了:


    1. Python解释器(3.7-3.10版本)

    2. 依赖的三方库(NumPy、TA-Lib、Plotly、PySide6等)

    3. VeighNa核心框架和功能插件


    上述三块内容中,3就是前文中的【软件应用】,而1和2加在一起则是【依赖的运行时环境】。那么为了实现这三块内容的快速安装部署,在Windows系统上的解决方案就是VeighNa Studio,运行exe安装包后几次点击就能自动完成整个安装流程。


    由于Linux系统上软件安装方式的区别:例如系统自带Python(影响1)、底层依赖库的全局影响(影响2)等,导致无法直接照搬VeighNa Studio的方案,更好的选择是采用类似虚拟机的形式将1-3整体打包后进行分发部署(直接不用安装了)



    在还没有VeighNa Studio的1.0版本时代,我们就曾经推出过基于VirtualBox的虚拟机镜像,但大家用下来普遍反馈虚拟机对比实体机的性能损耗还是挺明显。背后的原因可以参考上图的右侧部分,虚拟机中的应用程序和底层硬件中间,隔着有Hypervisor(虚拟硬件层)和Guest OS(虚拟机内系统)两层组件,带来了显著的开销(分钟级的启动耗时)。


    2013年发布的Docker带来了更加轻量级的方案。参考上图的左侧部分,在宿主机的操作系统上仅需运行Docker守护进程来负责对Docker容器进行运维管理,省去了臃肿的虚拟机内系统,从而实现更高的运行效率:节省大量系统资源、毫秒级的启动耗时、接近原生运行的性能水平


    本次3.7.0版本中新增的VeighNa Docker,就是打包了Python解释器、底层依赖库和VeighNa量化平台的完整量化容器镜像,仅需几行命令就能实现自动下载和运行启动。



    Docker安装流程


    运行Docker容器之前需要先安装Docker引擎,这里重点介绍在Linux(Ubuntu 22.04)服务器上的安装流程,不清楚的地方推荐参考 官方文档中的安装教程

    1. 卸载移除老版本程序:

    sudo apt-get remove docker docker-engine docker.io containerd runc

    2. 更新apt源并安装HTTPS访问所需的库:

    sudo apt-get updatesudo apt-get install \    ca-certificates \    curl \    gnupg

    3. 添加Docker官方的GPG Key:

    sudo install -m 0755 -d /etc/apt/keyringscurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpgsudo chmod a+r /etc/apt/keyrings/docker.gpg

    4. 设置添加apt仓库:

    echo \  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

    5. 再次更新apt源:

    sudo apt-get update

    6. 安装Docker引擎等组件:

    sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

    7. 运行hello-world镜像验证安装成功:

    sudo docker run hello-world

    8. 安装xhost的运行依赖程序:

    apt-get install x11-xserver-utils

    9. 启动xhost(注意该命令每次重启系统后都要运行):

    xhost +

    对于Windows和Mac系统用户直接从Docker官网下载安装Docker Desktop即可,Windows上推荐启用WSL2环境。


    上手VeighNa Docker

    完成Docker引擎的安装配置后,运行VeighNa Docker就相当简单了。

    在用户目录下创建一个空文件夹(这里假设为/home/user/trader),在其中放置run.py启动脚本文件,内容为:

    from vnpy.event import EventEnginefrom vnpy.trader.engine import MainEnginefrom vnpy.trader.ui import MainWindow, create_qapp
    from vnpy_ctp import CtpGatewayfrom vnpy_ctastrategy import CtaStrategyAppfrom vnpy_ctabacktester import CtaBacktesterApp

    def main(): """Start VeighNa Trader""" qapp = create_qapp()
    event_engine = EventEngine() main_engine = MainEngine(event_engine) main_engine.add_gateway(CtpGateway) main_engine.add_app(CtaStrategyApp) main_engine.add_app(CtaBacktesterApp)
    main_window = MainWindow(main_engine, event_engine) main_window.showMaximized()
    qapp.exec()

    if __name__ == "__main__": main()

    然后在终端Terminal中运行下述命令:

    docker run \-e DISPLAY=$DISPLAY \-v /tmp/.X11-unix:/tmp/.X11-unix \-v /home/user/trader:/home \veighna/veighna:3.7 python3 run.py

    如果是第一次运行,Docker引擎会自动从Docker Hub网站上下载拉取veighna/veighna:3.7镜像(大约几分钟的时间,取决于网络带宽),并在下载完成后直接启动容器,此时就可以看到熟悉的VeighNa Trader界面了:

    尽管容器和虚拟机在底层实现上有着挺大区别,但是对于其中运行的程序来说整体环境相当类似,在容器中同样存在运行程序时的默认用户目录/home

    运行docker run命令时,我们通过参数【-v /home/user/trader:/home】,之前在操作系统中新建的/home/user/trader(包括其中的文件)挂载到了容器内的/home目录下,从而保证在容器内运行【python3 run.py】命令时能够成功找到run.py文件。

    在VeighNa Trader的运行过程中,临时文件(JSON配置文件、SQLite数据库文件等)会被写入到容器内的/home/.vntrader文件夹中,由于前面的挂载机制等同于外部系统中的/home/user/trader/.vntrader文件夹。该文件夹中的内容即使关闭Docker容器后也依旧存在,从而满足程序运行过程中的数据持久化需求。

    目前VeighNa Docker中已经打包的模块包括:

      • 交易接口
        • vnpy_ctp、vnpy_ctptest
        • vnpy_mini
        • vnpy_sopt
        • vnpy_uft
        • vnpy_esunny、vnpy_tap
        • vnpy_xtp
        • vnpy_rohon
        • vnpy_tts
        • vnpy_ib
      • 策略应用
        • 除了vnpy_excelrtd以外的所有开源应用模块
      • 数据库适配器
        • vnpy_sqlite
        • vnpy_mysql
        • vnpy_postgresql
        • vnpy_mongodb
      • 数据服务接口
        • vnpy_rqdata
        • vnpy_tushare
      • 投研环境
        • jupyterlab

    除了上文中展示的VeighNa Trader外,VeighNa Docker还支持更多其他的运行方式,例如Jupyter Lab交互式投研环境、VS Code容器内代码开发、no_ui交易服务运行等,我们将会在后续的文章中详细讲解,欢迎关注。



    CHANGELOG


    新增

    1. 新增沪股通和深股通交易所枚举值

    2. 增加vnpy_tap对于Linux系统的支持

    3. 增加vnpy_rqdata对于新型主力合约数据支持(切换前一日收盘价比例复权)


    调整

    1. vnpy_ctastrategy/vnpy_ctabacktester加载策略类时,过滤TargetPosTemplate模板

    2. vnpy_ctp连接登录过程中,只有在授权码错误的情况下,才禁止再次发起认证

    3. vnpy_uft增加对广期所GFEX的支持

    4. vnpy_tqsdk增加对于output日志输出功能的支持

    5. vnpy_dolphindb允许指定用户自行配置具体的数据库实例

    6. vnpy_rqdata优化对于郑商所期货和期权合约的查询代码转换规则

    7. vnpy_rqdata增加对广期所GFEX的支持

    8. vnpy_portfoliostrategy增加回测爆仓检查

    9. vnpy_portfoliostrategy策略模板增加合约乘数查询函数get_size

    10. vnpy_portfoliostrategy回测加载日线和小时线数据时,不使用分段加载


    修复

    1. 修复vnpy_rpcservice中,RPC接口对于推送数据的vt前缀相关字段错误问题

    2. 修复vnpy_mini中,对于INE交易所今昨仓位的特殊处理

    3. 修复vnpy_datamanager中,批量数据更新时缺失output函数的问题

    4. 修复vnpy_spreadtrading中,回测加载数据时优先从数据服务获取历史数据的问题,改为优先从本地数据库加载


    Python社区是高质量的Python/Django开发社区
    本文地址:http://www.python88.com/topic/154216
     
    335 次点击