VeighNa量化社区
你的开源社区量化交易平台
Member
avatar
加入于:
帖子: 4711
声望: 287

发布于vn.py社区公众号【vnpy-community】
 
原文作者:何若楠 | 发布时间:2023-08-02
 
社区有不少新接触VeighNa的同学咨询如何上手学习,这里推荐下官方团队推出的小鹅通线上课程:《零基础入门系列》覆盖【Python基础】【数据分析】【GUI开发】三阶段,适合有金融背景的编程小白快速建立自己的Python开发知识体系;《全实战进阶系列》则针对具体的量化策略应用,适合有开发背景的金融小白通过实践来迅速掌握量化投研能力,包括【CTA实战】【超越海龟】【期权入门】【投组策略】

 

PyCharm是由JetBrains公司推出针对Python语言的IDE,其内置一整套可以帮助用户在使用Python语言开发时提高其效率的工具。本文意在为用户提供通过PyCharm开发使用VeighNa的方案以供参考。

本中的内容基于Windows系统编写,但对于Linux和Mac系统大部分也都适用。

当前时点,VeighNa适用的Windows系统包括:

  • Windows 10/11
  • Windows Server 2019/2022

    其他版本的Windows系统安装时可能遇到各种依赖库问题,不推荐使用。

在Windows系统上使用VeighNa,推荐安装官方推出的【VeighNa Studio】Python发行版,尤其是初次接触Python开发的新手用户

 

PyCharm安装

 

首先从PyCharm官网下载PyCharm Community安装包:

description

下载完成后,双击安装包则可进入PyCharm安装向导:

description

如果想对安装选项进行设置,可以在PyCharm Community Edition Setup页面对相关选项进行勾选:

description

安装完成后,会跳转到安装成功页面:

description

如果前面勾选了Create Desktop Shortcut选项来创建桌面快捷方式的话,此时桌面上会出现PyCharm的图标,双击图标即可运行PyCharm。

 

VeighNa开发

 

创建项目

启动PyCharm之后,在弹出的欢迎界面中点击【New Project】创建新项目,如下图所示:

description

在弹出的新项目窗口中,首先需要选择存放项目的文件夹路径【Location】,然后勾选Python解释器选项中的【Previously configured interpreter】选项(即当前系统中已经安装的Python环境):

description

点击右侧Add Interpreter下拉框中的【Add Local Interpreter】,在弹出的对话框中点击左侧的【System Interpreter】标签,并在右侧出现的下拉框中选择VeighNa Studio自带Python解释器所在的路径:

description

点击底部的【OK】按钮保存解释器配置,回到新项目窗口中,点击右下方的【Create】按钮来完成新项目的创建:

description

创建成功的项目窗口如下图所示:

description

此时点击左上方的【External Libraries】,即可看到项目中可以调用的外部库:

description

点击site_packages文件夹,往下滚动就能找到VeighNa Studio中的vnpy核心框架包以及vnpy_前缀的插件模块包。此时可以通过点击对应图标来查看每个包中的文件源码,如下图所示:

description

把鼠标光标移到代码上方,会自动弹出对应代码的文档信息:

description

若按住Ctrl键的同时用鼠标左键点击代码,则会跳转到代码的声明部分:

description

点击窗口右下角的【Python 3.10】按钮,会弹出【Settings】项目配置窗口,可以看到当前解释器环境下安装的包名称和版本号信息。带有升级符号(向上箭头)的包,说明当前版本有更新版本,点击升级符号即可自动升级。

请注意:由于VeighNa对于部分依赖库有严格的版本要求,不建议用户手动升级安装的包,可能会出现版本冲突。

description

 

运行程序

从Github代码仓库下载VeighNa Trader启动脚本文件run.py,并将其放置于trader文件夹下,即可在窗口左侧的项目导航栏中看见run.py文件:

description

若部分代码下方可以看见绿色波浪线显示(变量名称英文词语检查),可以点击项目名称左方的主菜单按钮 -【File】-【Settings】-【Editor】-【Inspections】-【Proofreading】,取消【Typo】的勾选后点击【OK】确认。再回到主窗口,可以发现绿色波浪线已经消失:

description

点击鼠标右键,选择【Run 'run'】,即可开始运行run.py脚本:

description

此时在界面底部的终端内容输出区域中,可以看到程序运行时的打印信息:

description

与此同时,VeighNa Trader的主窗口也会自动弹出显示:

description

回到PyCharm,可以看到项目界面右上角已经有run脚本的运行记录了,后续直接点击三角形运行按钮也可运行脚本,如下图所示:

description

 

断点调试

PyCharm的断点调试功能十分强大,这里使用一个VeighNa的策略历史回测脚本来演示。

在左侧项目导航栏中点击鼠标右键,选择【New】-【File】, 在弹出的对话框中创建backtest.py

description

然后在文件中编写简单的策略回测代码(具体可参考Github仓库中的回测示例),在想要调试的地方打上断点,如下图所示:

description

点击鼠标右键选择【Debug 'backtest'】, 即可开始调试脚本:

description

此时项目界面右上角已经可以看到backtest.py的运行记录,后续也可以通过点击这里的按钮直接启动调试任务:

description

启动调试后,可以看到主界面底部的Debug窗口开始输出程序运行信息,并且程序会暂停运行在第一个断点处。左侧显示的是线程信息,右侧则是当前上下文中的变量信息:

description

点击类似播放键的【Resume Program】即可继续运行调试,直到下一个断点处再次暂停:

description

此时可以看到底部右侧监控窗口中,当前上下文中的变量发生了变化:

description

后续重复上述步骤,点击【Resume Program】直到调试结束,可以看到Debug窗口的相应输出:

description

调试完之后,点击【Rerun 'backtest'】即可重新调试:

description

在调试过程中,点击【Step Into】可以进入函数的内部查看运行时的细节状态:

description

description

点击【Step Out】则可跳出当前函数,查看外层调用栈的状态:

description

点击【Step Over】可越过子函数(子函数会执行):

description

description

点击【Stop 'backtest'】则会直接停止当前程序的运行:

description

description

 

指定程序的运行目录

在PyCharm中新建项目时,默认是在当前目录下运行程序。若需要指定程序运行的目录,可以点击项目界面右上角的【Edit】进入【Run/Debug Configurations】界面:

description

修改程序启动时的目录【Working directory】即可:

description

 

C++回调断点调试

通常情况下,PyCharm只能在Python解释器中启动的线程里进行代码断点调试。之前有部分用户反馈过尝试在C++回调函数(如CTP API接口、PySide图形库等)中打断点但无法起效的问题。针对这种情况,可以通过在代码中设置断点的方式,来实现对非Python线程(即C++线程)的断点调试。

在项目左侧导航栏中点击鼠标右键,选择【New】-【File】, 创建geteway_test.py。

在创建成功的geteway_test.py中添加一段脚本策略的代码(可参考该文件),然后按住Ctrl同时用鼠标左键点击代码中的CtpGateway,跳转至ctp_gateway.py的源码中,在想要调试的回调函数内打上断点(注意不要打在函数定义的def那一行),如下图所示:

description

回到gateway_test.py,点击鼠标右键选择【Debug 'gateway_test'】开始调试:

description

请注意,如果用load_json函数读取connect_ctp.json,请确保读取对应.vntrader文件夹的json文件中配置了CTP账户登录信息。

此时可观察到并没有进入之前设定的断点,如下图所示:

description

终止调试后,找到之前在ctp_gateway.py中设定的断点处,在回调函数内的断点之前添加以下代码:

import pydevd
pydevd.settrace(suspend=False, trace_only_current_thread=True)

请注意:

  • pydevd是PyCharm自带的调试插件,没有安装在Python解释器所在的Python环境里;
  • suspend参数设置为True之后,调试会在这一句代码运行完之后暂停,而不是停在断点处。trace_only_current_thread参数设置为True之后,调试过程中只会监控当前线程;
  • 调试结束之后不要忘记删掉这段代码。

然后再次运行调试gateway_test.py脚本:

description

此时可以看到底部的调试窗口中开始输出相关信息,同时程序暂停在了之前设置的断点处。左侧显示的是线程信息(可以看到多了一个Dummy线程显示),右侧显示的是变量信息(可以看到回调函数的入参):

description

 

对比VS Code

 

  1. 在PyCharm中,每个项目都需要对Python环境进行配置。在VS Code中,默认通过窗口右下角的Python解释器来选择全局的Python环境(针对所有打开的文件);
  2. PyCharm的Community版仅对Jupyter提供了只读支持,需要Professional版才能编辑和运行。VS Code仅需安装功能插件,就可以使用和Jupyter相关全部功能(包括读取、编辑、运行)。

 

Member
avatar
加入于:
帖子: 6
声望: 0

可不可以设置为不启动VeighNa Trader的主窗口呢?只是运行就好了啊

Member
avatar
加入于:
帖子: 4711
声望: 287

不想要界面直接用no_ui脚本跑就好
https://gitee.com/vnpy/vnpy/blob/master/examples/no_ui/run.py

© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】