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

发布于veighna社区公众号【vnpy-community】
 
原文作者:用Python的交易员 | 发布时间:2023-02-22
 

《30天精进Python交易GUI》课程更新35-40集,近6集内容中详细讲解了量化系统中的【通用化数据监控表格控件】的开发使用技巧,以及如何通过Qt Style Sheet实现【自定义交易UI界面风格美化】,感兴趣的同学请戳这里

上周发布了VeighNa的3.6.0版本,本次更新的主要内容是增加了Mac系统上的CTP交易接口支持(本文完成于专门为此采购的Mac Mini M2~)。

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

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

 

Mac系统的CTP接口支持

 

得益于Python语言本身的跨平台优势(Windows、Linux、Mac三大系统),VeighNa量化交易平台的核心框架部分很早就可以在Mac系统上运行。

但由于C++类交易API对于Mac系统支持的普遍不足,导致之前只有vnpy_ib等少数【纯Python实现】的交易接口可以在Mac系统上运行,对于大部分用户来说没什么实际价值。

从6.6.7版本的CTP API开始,上期技术官方推出了对Mac系统支持,包括Intel(x86_64)和苹果M系(arm64)芯片。终于,VeighNa平台可以在Mac系统上为期货量化用户提供从投研回测到实盘交易的一体化解决方案。

 

Mac系统的VeighNa安装流程

 

目前Mac系统上还没有类似VeighNa Studio的开箱即用发行版(开发团队在抓紧研究中),需要手动完成安装流程:

1 . 前往Python官网下载3.10版本的安装包(或者使用brew安装),安装完成后在终端(Terminal)中运行命令:

python3

检查确认打开的Python解释器为3.10版本。

2 . 使用brew安装TA-Lib的C++开发包:

brew install ta-lib

3 . 安装NumPy和TA-Lib(Python),这里推荐使用豆瓣PyPI镜像解决官方源访问困难的问题:

python3 -m pip install numpy --index=https://pypi.doubanio.com/simple
python3 -m pip install ta-lib==0.4.24 --index=https://pypi.doubanio.com/simple

4 . 安装米筐RQData客户端,注意这里使用的是米筐PyPI源:

python3 -m pip install rqdatac --index=https://pypi2.ricequant.com/simple

5 . 安装VeighNa核心框架,以及需要使用的功能插件模块:

python3 -m pip install vnpy --index=https://pypi.doubanio.com/simple
python3 -m pip install vnpy_ctastrategy vnpy_ctabacktester vnpy_datamanager vnpy_sqlite vnpy_rqdata --index=https://pypi.doubanio.com/simple

这里的例子中包括(具体可以根据自己的需求调整):

  • CTA策略实盘和回测模块:vnpy_ctastrategy、vnpy_ctabacktester
  • 历史数据管理模块:vnpy_datamanager
  • SQLite数据库驱动:vnpy_sqlite
  • RQData数据服务适配器:vnpy_rqdata

pip安装过程中如果出现报错某些依赖库的缺失,可以尝试先pip install该依赖库,然后再次执行上述安装命令。

6 . 安装CTP交易接口模块:

python3 -m pip install vnpy_ctp --index=https://pypi.doubanio.com/simple

如果Intel芯片的机器上安装失败,请在App Store中安装XCode编译器后再次尝试。

完成后即可使用run.py脚本启动VeighNa Trader:

from vnpy.event import EventEngine
from vnpy.trader.engine import MainEngine
from vnpy.trader.ui import MainWindow, create_qapp
from vnpy_ctp import CtpGateway
from vnpy_ctastrategy import CtaStrategyApp
from vnpy_ctabacktester import CtaBacktesterApp
from vnpy_datamanager import DataManagerApp

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_engine.add_app(DataManagerApp)

    main_window = MainWindow(main_engine, event_engine)
    main_window.showMaximized()

    qapp.exec()

if __name__ == "__main__":
    main()

附上几张Mac系统运行VeighNa平台的截图:

description

description

description

如果大家在安装过程中遇到任何问题,欢迎在本文评论区留言交流!

本次在Mac上开发CTP交易接口的过程中也踩了不少的坑,包括:

  • 头文件和Windows/Linux定义不一致
  • GBK到UTF-8的中文编码转换出错
  • Clang的专属编译和链接配置参数
  • Mac版本开发包中使用.a静态链接库

如果对上述内容感兴趣的话也请在评论区告诉我们,后面考虑做一期专门的技术分享文章!

 

CHANGELOG

 

新增

  1. 新增vnpy_ctp的Mac系统支持(M1/M2)

调整

  1. BaseDatafeed的相关功能函数增加output入参用于输出日志
  2. 修改相关数据服务模块适配output参数:vnpy_rqdata/vnpy_ifind/vnpy_wind/vnpy_tushare
  3. 修改相关策略应用模块适配output参数:vnpy_ctastrategy/vnpy_ctabacktester/vnpy_portfoliostrategy/vnpy_spreadtrading/vnpy_datamanager
  4. OffsetConverter增加对于SHFE/INE合约的锁仓模式支持
  5. 在OmsEngine中添加全局的OffsetConverter功能,不再需要各AppEngine自行维护
  6. 添加CTA策略模块在执行参数优化时的进程数量限制参数:vnpy_ctastrategy/vnpy_ctabacktester
  7. 增加穷举优化算法运行过程中基于tqdm的进度条输出
  8. 增加遗传优化算法运行过程中的迭代次数进度输出
  9. 增加vnpy_optionmaster模块的期权产品对应标的合约的匹配函数,不再限制产品范围
  10. 升级vnpy_tts的dll链接库,解决openctp升级导致的资金不显示的问题
  11. 修改vnpy_ctastrategy使用vnpy.trader.database中统一定义的时区来加载数据
  12. 增加vnpy_ctastrategy策略模板的合约乘数查询函数get_size
  13. 增加vnpy_spreadtrading回测中统计绩效时对于爆仓情况的检查
  14. 增加vnpy_scripttrader基于vt_symbol和direction查询持仓数据的函数
  15. 修改vt_positionid的字符串内容,增加gateway_name前缀标识

修复

  1. 修复异常捕捉钩子threading_excepthook的参数错误问题
  2. 修复vnpy_ib获取历史数据时的异常失败问题
  3. 修复vnpy_rest/vnpy_websocket中aiohttp的代理参数proxy传空时必须为None的问题
  4. 修复vnpy_optionmaster模块的Greeks监控表行数设置不足的问题
  5. 修复vnpy_rqdata查询股票期权数据报错的问题
  6. 修复vnpy_rqdata中RqdataGateway获取期货指数和连续合约信息时错误的问题
  7. 修复vnpy_portfoliostrategy中,从缓存文件恢复数据,导致defaultdict变成dict的问题
     
Member
avatar
加入于:
帖子: 8
声望: 0

centos上面支持吗?

Member
avatar
加入于:
帖子: 1471
声望: 105

leo-2a6111b0fda7498e wrote:

centos上面支持吗?

可以运行,只是安装模块时要用yum替代apt了

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

这个异常是什么原因?
raceback (most recent call last): File "/Users/daniel/Dev/vnpy/run.py", line 27, in <module> main() File "/Users/daniel/Dev/vnpy/run.py", line 21, in main main_window = MainWindow(main_engine, event_engine) File "/usr/local/Caskroom/miniforge/base/lib/python3.10/site-packages/vnpy/trader/ui/mainwindow.py", line 51, in __init__ self.init_ui() File "/usr/local/Caskroom/miniforge/base/lib/python3.10/site-packages/vnpy/trader/ui/mainwindow.py", line 56, in init_ui self.init_dock() File "/usr/local/Caskroom/miniforge/base/lib/python3.10/site-packages/vnpy/trader/ui/mainwindow.py", line 63, in init_dock self.trading_widget, trading_dock = self.create_dock( File "/usr/local/Caskroom/miniforge/base/lib/python3.10/site-packages/vnpy/trader/ui/mainwindow.py", line 232, in create_dock dock.setFeatures(dock.DockWidgetFloatable | dock.DockWidgetMovable) AttributeError: 'PySide6.QtWidgets.QDockWidget' object has no attribute 'DockWidgetFloatable'. Did you mean: 'DockWidgetFeature'?

Member
avatar
加入于:
帖子: 1471
声望: 105

pip install PySide6==6.3.0

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

请问报这个错是什么原因呢?
symbol not found in flat namespace '_libiconv'

Member
avatar
加入于:
帖子: 1471
声望: 105

小太阳 wrote:

请问报这个错是什么原因呢?
symbol not found in flat namespace '_libiconv'

找不到iconv这个依赖库,用www.python.com下载的Python 3.10安装试试吧,不要用Anaconda之类的三方发行版

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

小太阳 wrote:

请问报这个错是什么原因呢?
symbol not found in flat namespace '_libiconv'
谢谢,已经解决了

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

请问这个报错怎么解决啊,AttributeError: Cannot reassign members.

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

按上面的步骤操作

链接交易服务器报 4097,
行情服务器:4040

请问是什么问题?

Member
avatar
加入于:
帖子: 1471
声望: 105

jixiangcn wrote:

按上面的步骤操作

链接交易服务器报 4097,
行情服务器:4040

请问是什么问题?

贴个图看下?

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

description
这个是连simnow服务器

description

这是交易商测试服务器

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

请问,怎么设置是通过测试API还是生产API进行连接?
我看官网mac的 6.6.9,我们这个3.6.0里的是多少版本?怎么更新?

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

测评api连ctptest接口,生产api连ctp接口。目前都是6.6.7,目前mac只提供了ctp接口支持

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

jixiangcn wrote:

description
这个是连simnow服务器

description

这是交易商测试服务器
报错3是账号密码不对。下面那个报错截图是api版本问题。

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

打开CTA策略 或者 CTA回测 弹窗报错
Traceback (most recent call last):
File "/Users/xiang/miniforge3/lib/python3.10/site-packages/vnpy/trader/ui/mainwindow.py", line 276, in open_widget
widget = widget_class(self.main_engine, self.event_engine)
File "/Users/xiang/miniforge3/lib/python3.10/site-packages/vnpy_ctastrategy/ui/widget.py", line 41, in init
self.cta_engine.init_engine()
File "/Users/xiang/miniforge3/lib/python3.10/site-packages/vnpy_ctastrategy/engine.py", line 102, in init_engine
self.init_datafeed()
File "/Users/xiang/miniforge3/lib/python3.10/site-packages/vnpy_ctastrategy/engine.py", line 123, in init_datafeed
result: bool = self.datafeed.init(self.write_log)
TypeError: RqdataDatafeed.init() takes 1 positional argument but 2 were given

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

升级一下vnpy_rqdata,有问题建议还是在对应的分区下开贴咨询

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

jixiangcn wrote:

打开CTA策略 或者 CTA回测 弹窗报错
Traceback (most recent call last):
File "/Users/xiang/miniforge3/lib/python3.10/site-packages/vnpy/trader/ui/mainwindow.py", line 276, in open_widget
widget = widget_class(self.main_engine, self.event_engine)
File "/Users/xiang/miniforge3/lib/python3.10/site-packages/vnpy_ctastrategy/ui/widget.py", line 41, in init
self.cta_engine.init_engine()
File "/Users/xiang/miniforge3/lib/python3.10/site-packages/vnpy_ctastrategy/engine.py", line 102, in init_engine
self.init_datafeed()
File "/Users/xiang/miniforge3/lib/python3.10/site-packages/vnpy_ctastrategy/engine.py", line 123, in init_datafeed
result: bool = self.datafeed.init(self.write_log)
TypeError: RqdataDatafeed.init() takes 1 positional argument but 2 were given

我也是这个错误,刚解决。
需要在/Users/xiang/miniforge3/lib/python3.10/site-packages这个文件夹里面找到vnpy_rqdata文件夹
然后去github下载最新的vnpy_rqdata来替换这个文件夹就可以打开了

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

mac m1 vnpy3.6.0 运行run.py提示找不到数据服务驱动vnpy_tushare

description

目前使用的vnpy_tushare版本是1.2.89.0
请问这种情况应该怎么解决呀

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

用云服务器windows server 2012R 无法启动,怎么弄

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

沪公网安备 31011502017034号

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