VeighNa量化社区
你的开源社区量化交易平台
xiaohe's Avatar
Member
离线
4300 帖子
声望: 268

发布于vn.py社区公众号【vnpy-community】
 
原文作者:用Python的交易员 | 发布时间:2021-06-22
 
《30天掌握Python数据分析课程》更新到第40集,最新的5集重点讲解了如何基于pandas实现时间序列数据的各种操作处理,解决策略研究中对于多合约和多类型数据的排序对齐问题。详细课程大纲请戳我~~~
 

本周一发布了vn.py的2.4.0版本,本次更新的内容主要是实现了多进程模式的遗传算法优化,在保留遗传算法对于参数优化时智能任务调度的同时,大幅提高计算性能,降低整体的优化耗时。

和之前一样,对于使用VN Studio的用户,启动VN Station后,直接点击界面右下角的【更新】按钮就能完成自动更新升级,对于没有安装的用户,请下载VN Studio-2.4.0,体验一键安装的量化交易Python发行版,下载链接:

https://download.vnpy.com/vnstudio-2.4.0.exe

 

多进程模式的遗传算法优化

 

一点背景

在之前版本的vn.py中,针对策略参数优化的需求提供了两套算法工具,分别是暴力穷举优化(Brutal Force)和遗传算法优化(Genetic Algorithm)。

其中暴力穷举优化在运行的过程中,由于每轮执行的计算任务互相之间不存在任何状态依赖,可以非常方便的使用multiprocessing库扩展到多进程模式执行,从而充分利用CPU所有核心的算力来加速

而遗传算法优化在运行的过程中,每轮执行的计算任务中会存在相当比例的重复部分(源于优秀参数的交叉生成),因此采用了lru_cache的缓存机制来实现加速。同时lru_cache的结果缓存只能在单进程中生效,扩展到multiprocessing的多进程模式后,因为缓存失效反而会导致最终的速度变慢

改进方案

社区里有极少数vn.py的资深用户,自行改造实现了基于Redis内存数据库缓存的重量级多进程遗传算法优化功能。但由于Redis本身安装较为麻烦,且内存开销很大,使得这个方案对于普通用户来说几乎没有可行性

在2.4.0的更新中,我们采用multiprocessing库的Manager数据服务进程作为缓存方案,将vn.py内置的遗传算法优化功能升级到了多进程版本,实现数十倍优化速度提升的同时,还无需依赖任何外部工具,对于新手小白来说都是【开箱即用】

实际操作

对于vn.py的用户来说,在实际操作上和之前的版本完全一致。打开【CTA回测】模块的【参数优化】对话框后,配置好要执行优化的参数空间,点击下图红框中的【遗传算法优化】按钮即可启动优化任务:

description

唯一的区别在于此时打开Windows系统的【任务管理器】查看CPU占用情况,会发现所有的CPU核心都已经跑满(对比之前的单进程遗传算法优化,最高只会占满一个核心):

description

标准化改造

之前不少用户反映过一个问题:只有CTA策略(cta_strategy)模块内置了优化功能,而价差交易(spread_trading)和组合策略(portfolio_strategy)都需要用户自行实现(比如在Jupyter Notebook里写一个for循环来执行优化)。

所以本次更新中,我们将暴力穷举和遗传算法两套优化工具统一进行了标准化改造,从CTA策略模块中剥离,放置到了vnpy.trader.optimize模块下,后续会基于它们来实现其他策略模块的参数优化功能。

 

基于aiohttp重构RestClient和WebsocketClient

 

RestClient和WebsocketClient是目前vn.py框架中针对各类REST API和Websocket API统一开发的标准化客户端工具,在之前的版本中采用【同步调用 + 多线程】的模式来实现高性能通讯。

但由于GIL全局锁的存在,线程多了难免会出现性能下降的情况,尤其对于需要加载多个接口运行套利类策略的用户说更加敏感。因此在2.4.0版本中新增了基于aiohttp实现的【异步调用 + 协程】模式客户端,只需一个线程(运行事件循环)即可实现所有相关接口的异步事件驱动

整体的组件替换如下:

  • 事件驱动:线程池ThreadPool -> 协程asyncio
  • RestClient客户端:requests -> aiohttp
  • WebsocketClient客户端:websocket-client -> aiohttp

考虑到潜在的兼容性问题,两个新的客户端放到了全新的vnpy_rest和vnpy_websocket项目中,接下来会在剥离各个相关的交易接口时逐步替换。同时老的客户端依旧位于vnpy.api.rest和vnpy.api.websocket下,可以继续使用。

 

其他更新

 

XTP交易接口

剥离到vnpy_xtp项目中,升级到2.2.27版本的API,新增了:

  • Ubuntu上的一键自动安装功能
  • 行情接口对于本地网卡地址的支持。

 

CHANGELOG

 

新增

  1. 新增TickData的本地时间戳字段local_time(不带时区信息)
  2. 新增基于asyncio和aiohttp实现的协程异步REST API客户端vnpy_rest项目
  3. 新增基于asyncio和aiohttp实现的协程异步Websocket API客户端vnpy_websocket项目
  4. 新增基于多进程模式的遗传算法优化功能
  5. 新增XTP的API封装中,行情登录函数对于本地网卡地址的参数支持

调整

  1. 剥离CTA策略模块下的穷举和遗传优化算法到vnpy.trader.optimize模块下
  2. 遗传算法优化完成后,输出所有回测过的参数对应结果(而不只是最优结果)
  3. CTA策略引擎加载策略文件时,增加模块重载的操作,使得任何策略文件修改可以立即生效
  4. CTA策略引擎扫描特定目录下的策略文件时,使用glob函数(替换原有的os.walk),避免对子目录中文件的错误加载
  5. 将CTA策略模块剥离到vnpy_ctastrategy项目中
  6. 将CTA回测模块剥离到vnpy_ctabacktester项目中
  7. 将XTP接口剥离到vnpy_xtp项目中,并升级到2.2.27.4版本
  8. 将事前风控模块剥离到vnpy_riskmanager项目中
  9. 将数据管理模块剥离到vnpy_datamanager项目中

修复

  1. 修复MySQL和PostgreSQL数据库管理器删除K线数据时出错的问题
  2. 修复基于aiohttp的RestClient和WebsocketClient,事件循环停止后重新启动失败的问题
  3. 修复CtaBacktester基于Tick级别数据进行参数优化时,启动优化失败的问题
  4. 修复ToraStockGateway和ToraOptionGateway,调用下单函数时没有返回委托号的问题
  5. 修复InfluxDB数据管理器,导入数据时时间字段解析错误的问题

发布于vn.py社区公众号【vnpy-community】
 
原文作者:用Python的交易员 | 发布时间:2021-04-14
 
从之前【零基础入门系列】第一阶段《30天解锁Python量化开发》课程更新结束后,就一直有同学问第二阶段的数据分析内容什么时候上线。

这次憋了半个月的时间没更新公众号,总算一点点完成了的第二阶段课程准备工作,先来贴一张量化学习进阶的路径图:
 

description

 

完成第一阶段的学习,解锁基础的Python量化开发能力后,已经足以胜任量化实习生的工作

再进一步就是掌握各种Pyhton数据分析的技能,能够对于金融市场巨量且复杂的各种数据进行快速有效的分析,从中挖掘出有价值的信息来帮助量化投资中的各项决策,例如模型开发、策略评估、风险管理等等。

对比市面上其他已有的数据分析类课程,《30天掌握Python数据分析》完全从实战的角度出发,围绕目前前沿的数据分析工具来讲解(比如大数据绘图方面,我们选择了Plotly交互式图表,而不是其他课程千篇一律的静态Matplotlib),同时结合vn.py策略开发过程中的具体案例,来帮助学员建立学得懂、用得到的数据分析知识体系。

整个课程目前已经计划的课时是50节,和之前的《30天解锁Python量化开发》一样,在制作过程中也会根据大家的反馈增加额外的实战案例讲解课时,内容大纲如下:

 

description

 

这门课程适合的人群:

  • 想要极大提高工作效率、更快速出报告的的金融分析师
  • 在各类金融市场中通过量化方法来研究的投资者
  • 希望在量化领域获得工作机会的在校学生
  • 其他对课程内容感兴趣的人士

 

课程目前已经上线,原价599元,还是老规矩前100名用户8折(479元)。直接在vn.py社区微信公众号(vnpy-community)里就能购买和观看(点击底部菜单栏的【进阶课程】进入)。推荐使用PC微信打开,视频分辨率更加清晰。

 
【30天解锁Python数据分析 - 快速传送门】
 

发布于vn.py社区公众号【vnpy-community】
 
《全实战进阶系列 - CTA策略》的销量已达962,课程销量突破1000后将再次提价到599元(目前是499元)。课程通过深入浅出的CTA策略原理讲解,结合逐步深入的实践代码样例,帮助学员快速建立实盘交易能力,想要购买的同学请抓紧499的最后这38个名额吧,课程详情请戳

 
原文作者:用Python的交易员 | 发布时间:2021-02-22

 
上周发布了vn.py的2.1.9版本,本次更新的内容主要是剥离并重构了几大数据库管理端模块,实现更好的数据库读写性能和未来的新数据库扩展支持。

和之前一样,对于使用VN Studio的用户,启动VN Station后,直接点击界面右下角的【更新】按钮就能完成自动更新升级,对于没有安装的用户,请下载VNStudio-2.1.9,体验一键安装的量化交易Python发行版,下载链接:

 

https://download.vnpy.com/vnstudio-2.1.9.exe

 

重构后的数据库管理端(vnpy.database)

 

之前版本的vn.py中,和数据库相关的代码均位于vnpy.trader.database目录下,包括数据库管理端DatabaseManager的抽象模板类,以及对接各具体数据库的实现(如SqlManager和MongoManager)。

最初2.0采用这种设计时核心目标为了简单易用,只提供了基于peewee的单一SQL类数据库支持(而且绝大多数用户其实都只是在用SQLite)。但随着针对不同领域量化策略应用而支持的数据库变得越来越多,该设计在扩展性上的不足就体现了出来。

所以本次重构采用类似gateway(底层接口)和app(上层应用)的设计模式:

  • 在vnpy.trader.database中,定义数据库管理端的通用接口,包括:

    • 抽象模板类BaseDatabase
    • 数据库时区常量DB_TZ
    • 时区转换函数convert_tz
    • 以及K线数据整体概况BarOverview类,用于大幅提高DataManager组件的数据库概况查询速度;
  • 在vnpy.database模块下,继承BaseDatabase实现具体的数据库管理端,包括:

    • SQL类

      • SQLite(sqlite):轻量级单文件数据库,无需安装和配置数据服务程序,vn.py的默认选项,适合入门新手用户;
      • MySQL(mysql):世界流行的开源关系型数据库,文档资料极为丰富,且可替换其他高NewSQL兼容实现(如TiDB);
      • PostgreSQL(postgresql):特性更为丰富的开源关系型数据库,支持通过扩展插件来新增功能,只推荐熟手使用;
    • NoSQL类

      • MongoDB(mongodb):基于分布式文件储存(bson格式)的非关系型数据库,内置的热数据内存缓存实现更快读写速度;
      • InfluxDB(influxdb):针对时序数据专门设计的非关系型数据库,列式数据储存提供极高的读写效率和$分析应用。

另外本次更新也补齐了InfluxDB数据库客户端,之前缺失的对于Tick数据储存和加载的支持,包括:save_tick_data/load_tick_data/delete_tick_data。

尽管代码上做了许多修改,但对于vn.py的用户来说这次完全可以视作无感升级,从数据库中的表结构、到VN Trader全局配置、再到应用模块的使用流程,全部和之前版本保持兼容,唯一的区别就是速度变得更快了~

 

其他更新

 

接口方面

  1. 和中泰证券XTP官方测试团队合作,增强XtpGateway在股票和ETF期权交易方面的稳定性,并优化了在用户体验方面的细节。

策略模块

  1. OptionMaster模块新增使用合成期货作为期权定价标的物合约的功能,对于顶点飞创期权、中泰XTP等期权和ETF行情拆分在独立行情服务器的接口,也能实现实时隐含波动率和希腊值的计算。注意该功能需要通过VN Station自动更新到2.1.9.1版本方可使用。

项目仓库

  1. 新增版本更新记录文件CHANGELOD.md详细记录每次版本发布中所更新的内容,分为修复、调整和新增三大快,方便用户跟踪vn.py的修改细节,以及检查更新是否会和本地代码产生潜在冲突。

 

vn.py已经正式进驻【Gitee】(简单来说就是中国版的Github),并在一周内拿到了【GVP】(Gitee有价值开源项目)。以后对于访问Github速度太慢的用户,有了一个更好的国内替代选择,仓库地址:https://gitee.com/vnpy/vnpy。该Gitee仓库会每日和Github仓库同步,自动更新最新版本的代码,欢迎大家Star和Fork!
 

发布于vn.py社区公众号【vnpy-community】
 
《投资组合策略7天入门》已经更新到第12集,课程内容围绕针对商品期货的横截面趋势因子策略展开(和CTA策略的时序因子属于两个方向),覆盖从基础概念学习、回测数据准备、策略代码开发、参数结果优化的全流程内容,详情请戳

 
原文作者:用Python的交易员 | 发布时间:2021-02-18

 
新年第一篇,祝大家牛年发发发!!!
 

春节前的那篇《一张图认识【股票程序化交易】的各种系统》阅读量和评论数都有点出乎我们意料,看来这种量化相关的概括总结类内容颇受大家欢迎,接下来准备做成一个全新的系列文章。

已经过去的鼠年虽然充满了各种不顺,但是对于期货行业来说绝对是一个大年,截止20年底全行业保证金存量超过了8000亿,今年有望历史上首次突破万亿存量(而且很可能就在一季度发生)。

国内金融市场程序化交易的萌芽最初就出现在期货市场,我自己的职业生涯也是从期货公司的量化研究员开始,所以本系列的第二篇文章就来带大家认识下【期货程序化交易】中的各种系统了:

description

图中一些名词的说明:

  • 期货柜台:期货公司用于为客户提供委托发送、成交记录和资金仓位结算的服务端系统;

    • 次席柜台:针对程序化交易专门优化设计,提供更快交易速度的期货柜台系统,类似股票中的【极速柜台】;
    • 主席柜台:面向普通投资者(主要是散户),提供完整业务功能支持(包括开户、交易、结算等),类似股票中的【集中柜台】;
  • 资管系统:对接后端各种不同类型的柜台系统,将单一产品账户或者机构账户拆分为多个资产单元,并提供丰富的事前事中风控和事后绩效分析功能,满足MOM类投资产品和大型交易团队(私募、贸易商)需要将资金分配给多名交易员管理的需求;

  • 量化平台:对接上述提到的期货柜台和资管系统两类后端系统(通过API),由交易员每天直接使用的前端软件,大多提供UI图形界面,用户可以直接在上面开发策略、跑历史回测以及执行自动交易。

图中带有星号标记的是在对应功能领域较为常见的系统,大部分期货公司会直接采购作为官方软件提供给客户使用。

和股票程序化接入的严监管状态不同,期货程序化接入整体比较宽松开放。原则上只要完成了穿透式认证,任何机构和个人都可以用自己开发的软件接入期货公司进行程序化交易。所以上图中只包含了背后存在技术公司实体正式运营,且可以用于期货实盘程序化交易的软件系统。

 

同样如果觉得有任何遗漏或者偏差,欢迎在下方的讨论区拍砖和讨论!!!

 

发布于vn.py社区公众号【vnpy-community】
 
《投资组合策略7天入门》已经更新到第8集,课程内容围绕针对商品期货的横截面趋势因子策略展开(和CTA策略的时序因子属于两个方向),覆盖从基础概念学习、回测数据准备、策略代码开发、参数结果优化的全流程内容,详情请戳

 
原文作者:用Python的交易员 | 发布时间:2021-01-31

 
眨眼21年的第一个月就要过完了,这个月有两篇关于股票程序化交易的文章火遍了微信朋友圈。

第一篇是关于幻方量化开始投建第二台超级计算机的文章(该文章后来已被幻方撤回),其中提到目前A股市场的日均成交量中大概有20%是由量化(也就是程序化交易)去贡献的

另一篇则是财联社的《券业打响量化交易军备竞赛!机构交易服务“三端”大盘点,看谁是真头部?谁正异军突起?》,详细列举了2020年中券商程序化交易系统相关的发布新闻。尽管文中提到了:完整的交易服务体系由“策略端+柜台端+极速行情”共同构成,但可能受限于作者的专业程度,部分细节条理(尤其是围绕系统名词的内容)不是那么清晰。
 
description
 
图中一些名词的说明:

  • 柜台系统:券商用于为客户提供委托发送、成交记录和资金仓位结算的服务端系统;

    • 极速柜台:针对程序化交易专门优化设计,提供更快交易速度的柜台系统,但支持的业务类型较少,主要集中在股票的买卖(现货和两融);
    • 集中柜台:面向普通投资者(主要是散户),提供完整的业务类型支持(包括股票买卖、基金申赎、打新IPO等等),但速度相对较慢;
       
  • 行情数据:提供实时行情推送(包括L1盘口、L2盘口、逐笔成交委托、全档合成盘口)的服务端系统,在数据接收模式上可以分为TCP订阅、TCP全推、UDP组播软解码、UDP组播FPGA解码等;

  • 交易网关:对接后端各种不同类型的柜台系统,对外提供标准化API接口的网关系统,一方面可以降低客户的开发成本,另一方面也可以提供额外的交易行为风控;

  • 算法总线:将智能算法交易服务(两家主流的卡方和金纳)以类似交易API的形式提供给客户使用(参考海外IB API提供的各种内置算法),提供比常规限价单和市价单更加强大的智能交易算法委托(如VWAP、TWAP、冰山等);

  • 量化平台:对接上述提到的所有后端系统(通过API),由交易员每天直接使用的前端软件,大多提供UI图形界面,用户可以直接在上面开发策略、跑历史回测以及执行自动交易。

 

以上内容来源于我们比较有把握的信息,一些有程序化系统但我们不那么熟悉的机构就没写了(比如招商、广发、中信建投、银河等)。
 

如果觉得有任何遗漏或者偏差,欢迎在下方的讨论区拍砖和讨论!!!

 
或者如果大家对这块内容感兴趣也请告诉我们,后面可以考虑做一个专门针对股票程序化系统详细介绍的系列。

 

发布于vn.py社区公众号【vnpy-community】

 

原文作者:用Python的交易员 | 发布时间:2021-01-24

 

KeKe(张杨飞)老师主讲的全新的《投资组合策略7天入门》入门课程已经正式开售。课程目标是帮助学员快速掌握PortfolioStrategy(投资组合策略)这一vn.py框架中自由度最高、可玩性最大的模块。

 
description
 

课程内容围绕一套针对商品期货的横截面趋势因子策略展开(和CTA策略的时序因子属于两个方向),覆盖从基础概念学习、回测数据准备、策略代码开发、参数结果优化的全流程内容,整体大纲如下:

 
description
 

课程定价为99元,购买请戳传送门,或者扫描下方二维码:

 
description
 

发布于vn.py社区公众号【vnpy-community】
 
vn.py进驻【Gitee】(简单来说就是中国版的Github),目前已经收获了262个Star和87个Fork,同时也拿到了【GVP】(Gitee最有价值开源项目)。

看来对于许多我们的用户,访问Github速度太慢真心是个需求痛点啊,好在现在有了一个更好的国内替代选择。同时也发现Fork/Star比例超过Github,可能因为同步方便所以更多人愿意尝试自己扩展开发?

最后再贴下仓库地址:https://gitee.com/vnpy/vnpy。该Gitee仓库会每日和Github仓库同步,自动更新最新版本的代码,欢迎大家Star和Fork!

 
原文作者:用Python的交易员 | 发布时间:2021-01-14

 
投资组合策略模块(Portfolio Strategy,简称PS),顾名思义,就是专门用来交易多标的量化策略的模块。同时,它也是vn.py框架中自由度最高可玩性最大的一个模块。

description

因为,这个模块适用于:

  • 所有资产(股票,债券,期货,期权等),
  • 所有策略(趋势,套利,波动率交易等)

通过PS模块,我们可以对高校论文或者券商研报中的众多投资组合策略,进行历史回测和效果验证。与交易单标的合约的CTA策略不同,公开资料上关于各类投资组合相关的研报要丰富得多。

这样,PS模块提供了,从策略验证,到实盘的一条龙服务。

 

目标受众

 

PS模块最大的特点体现在高度自由化,所以,如果有以下需求,说不定它适合你噢:

1)单策略交易多品种:目前大家用的最多的CTA策略模块(CtaStrategy)中的每个策略只能交易单一合约,买卖信号也就只能局限在单一合约的时间序列因子(技术指标、统计模型)。而PS模块对于交易多合约的支持,可以允许策略实现另一大类买卖信号【横截面因子】,从而捕捉更多的交易盈利机会。

2)更高的策略夏普率:单一合约的价格变化分布会呈现出尖峰肥尾特征,结果是预测率不高,故单标的CTA策略通常表现为低胜率,高盈亏比。但是,引入多标的后,投资组合的整体价格变化分布会偏向正太分布(如下图),这样,就能套用很多现代统计学理论,提升模型的预测率。

description

3)更高的策略容量:策略包含越多标的,其容量也自然成倍提高。

4)直接实盘的途径:和专注于回测而缺乏实盘交易支持的zipline等框架不同,PS模块秉承vn.py一向的回测实盘无缝切换设计。用户完成策略的回测优化等开发工作后,无需对策略代码做任何修改,立即就能开始实盘交易。

 

课程内容

 

PS模块更高的自由度,自然也代表着更高的使用难度。从2020年中这个模块发布以来,除了个别vn.py资深大佬外,社区里大部分成员还是停留在想用但又无从下手的阶段。

相信大家还是更希望把精力放在策略研究本身,而不是浪费在熟悉模块这第一步上:调用PS模块,遇到坑,读代码;然后再次使用,遇到坑,读代码……

所以,本课程的目标是让用户跳过入门的坑,快速了解PS模块的原理和用法,然后开始上手研究策略

课程内容主要包括:

  1. 介绍投资组合策略的原理,历史渊源,以及应用前景;
  2. 介绍PS模块的主要构成,基于策略生命周期的逻辑,逐步理清主要函数的功能,以及前后联系;
  3. 活用数据管理模块,批量下载数据;
  4. 介绍PS策略模块工作原理,与引擎层面交互,并开发一个简单策略;
  5. 实盘注意事项以及参数优化。

课程大纲如下:

description

 

预期收获

 

学完课程以后,你的收获将会包括:

  • 了解投资组合策略的原理和使用前景;
  • 使用自动化脚本来批量下载数据;
  • 了解实盘引擎的底层工作原理;
  • 了解回测框架的工作原理;
  • 了解策略模板的功能函数,以及与底层引擎的交互;
  • 了解投资组合策略,从信号生成到仓位维护全过程;
  • 了解目标持仓算法功能以及作用;
  • 了解策略回测后的品种持仓占比分析。

总之,结合代码demo,你将能够使用PS模块开发出一套简单的投资组合策略,后续也可以尝试把单标的CTA策略中的信号逻辑套用到多品种上。

毕竟,熟悉轮子的功能使用和工作原理,才能更好生产嘛。

description

 
本课程下周即将上线,敬请期待(๑•̀ㅂ•́)و✧

发布于vn.py社区公众号【vnpy-community】
 
原文作者:用Python的交易员 | 发布时间:2021-01-09
 
基于《30天解锁Python量化开发》的课程内容,我们制作了这张【知识要点图】:

  • 对于已经购买课程的学员,可以更好的把课程中学到的内容要点,构建成为自己的Python量化开发知识体系
  • 对于目前还在自学的用户,可以有一套方向清晰的入门路径图,顺着循序渐进的目标一步一个脚印的学习前进

看完对课程感兴趣的话,请戳课程传送门】
 

description
 

最后,vn.py进驻【Gitee】(简单来说就是中国版的Github)差不多已经一个月的时间了,目前已经收获了218个Star和73个Fork,同时也拿到了【GVP】(Gitee最有价值开源项目)。

看来对于许多我们的用户,访问Github速度太慢真心是个需求痛点啊,好在现在有了一个更好的国内替代选择。同时也发现Fork/Star比例超过Github,可能因为同步方便所以更多人愿意尝试自己扩展开发?

最后再贴下仓库地址:https://gitee.com/vnpy/vnpy 。该Gitee仓库会每日和Github仓库同步,自动更新最新版本的代码,欢迎大家Star和Fork!
 

发布于vn.py社区公众号【vnpy-community】
 

vn.py已经正式进驻【Gitee】(简单来说就是中国版的Github),并在一周内拿到了【GVP】(Gitee最有价值开源项目)。以后对于访问Github速度太慢的用户,有了一个更好的国内替代选择,仓库地址:
https://gitee.com/vnpy/vnpy。该Gitee仓库会每日和Github仓库同步,自动更新最新版本的代码,欢迎大家Star和Fork!
 
原文作者:用Python的交易员 | 发布时间:2020-12-31

 
2020年10月Python迎来了3.9版本,但社区期盼已久的GIL由【进程内全局锁】转向【解释器全局锁】的修改还是没能实现,反观隔壁的Ruby新3.0版本都提供JIT(Just-In-Time Complier)的官方实现了(伤心)。

考虑到3.8和3.9版本,对比目前vn.py基于的Python 3.7版本并没有提供特别明显的优化,暂时我们官方Github仓库中的二进制编译部分(主要是各类C++接口的封装)以及VNStudio发行版,还是会保持使用3.7版本的Python。

而vn.py核心的代码、REST/Websocket类接口、纯Python类接口都可以直接运行于3.8或者3.9版本,无需做任何修改(官方测试过)。对于有C++类接口有需求的用户,可以自行基于3.8或3.9的Python环境重新编译即可。

Python的作者Guido已经加盟微软,背靠这么一棵大树,未来看到新版本中【移除GIL】或者【加上JIT】都还是比较值得期待的,一旦发布vn.py也会及时重构进入3.0大版本的时代,在那之前就都还是2.0大版本往上迭代了。

经过了第一年(2019)的重构起步,第二年(2020)的功能扩展,2.0大版本第三年(2021)的任务主题就是夯实巩固了。
 

精简项目代码

 

description
 
上图是一张Python两大经典Web框架Django和Flask的特性对比,尽管都有着诸多成功的应用案例,两者其实体现了完全不同的设计哲学:

开箱即用(Django) vs 极简设计(Flask)

vn.py之前的侧重点一直是开箱即用,尽可能支持更多的交易接口和策略应用,将所有功能代码都包括在核心开源项目中,满足交易员快速上手进入实盘的需求

但这一设计也使得部分新用户,在尝试学习项目代码时陷入困难,甚至会产生一种不知所措的感觉(我自己曾经在阅读AlgoTrader源代码的时候就有体会过),同时也增加了程序部署时的难度(Windows/Linux/Mac兼容性问题)。

所以接下来会在满足交易员快速上手的前提下,将开发上的侧重点转向精简项目代码,考虑尝试的方向包括:

  • 剥离抽象化数据库(Database)和数据服务(DataService)两大组件,采用类似交易接口(Gateway)和策略应用(App)的设计;
  • 从核心开源项目(vnpy)中分离以上组件到独立的模块项目中,比如把CTP接口放到(vnpy_ctp)项目中,用户可以按需安装;
  • 更多采用Python 3.7以后引入的新语法糖,减少整体代码的行数(这条不知道是否会增加初学者的学习成本?)。

可能还有其他我们没有考虑到的方向,欢迎在下方留言补充。

 

优化文档资料

 
从2020年3季度开始,对项目的官方文档进行了持续的补齐和优化,现在大概覆盖了70%的模块功能使用说明,接下来2021年的目标:

  • 做到100%的模块功能覆盖
  • 更新部分较老的模块内容
  • 把语言文字写得更加通俗易懂

同时我们的官网也会进一步完善,争取彻底解决异常崩溃、搜索关键词限制、邮件队列堵塞等大家反应比较多的问题。

除了作为基础使用说明的文档,学习效率更高的线上线下课程也会继续推出,目前计划新增的内容:

  • 线上课程

    • CTA策略深入研究班
    • 期权系列剩余4阶段
    • 多合约组合策略系列
  • 线下课程

    • 核心系统开发小班课

 

 

最后:2021,Enjoy Trading!!!

发布于vn.py社区公众号【vnpy-community】
 

vn.py已经正式进驻【Gitee】(简单来说就是中国版的Github),并在一周内拿到了【GVP】(Gitee最有价值开源项目)。以后对于访问Github速度太慢的用户,有了一个更好的国内替代选择,仓库地址:
https://gitee.com/vnpy/vnpy。该Gitee仓库会每日和Github仓库同步,自动更新最新版本的代码,欢迎大家Star和Fork!
 
原文作者:用Python的交易员 | 发布时间:2020-12-29

 

回顾2020年

 
因为疫情的关系,今年宅在家里的时间远超过往,对于开发开源项目这一工作可能到未必是坏事(有更多时间老老实实写代码了......)。回顾下2020年的工作成果:

  • 用户数量

    • Github Star:13.5k(+2.8k)
    • Github Fork:5.8k(+1.1k)
  • 项目开发

    • 版本迭代:9次(2.1.0 -> 2.1.8)
    • 底层交易接口:44个(新增15个,升级7个)
    • 上层策略应用:16个(新增5个,升级5个)
  • 社区交流

    • 论坛用户数量:18144(+9670)
    • 论坛帖子数量:17574(+9790)
    • 线下活动:4次
    • 线上分享:25次
    • 专题小班课:6次

 

用户数量

 
截止2020年12月29日,vn.py在Github上一共收获了13521个Star,Fork数量达到5.8k,和往年比依旧保持线性增长。下图来源于统计工具Star History(用来看Star数量的变化历史挺方便的):

description

Github上排名前十的量化类开源项目情况,今年贴个只包含传统金融的:

description

尽管Quantopian公司关门了,但其遗产Zipline却并未失去社区的关注,Star数量继续快速上涨。前十名中Python已经占到9席,按国家分是中国6个、美国3个,德国1个。

 
项目开发

 

2020年vn.py继续保持快速迭代的开发模式,一共完成了从v2.1.0到v2.1.8的9个版本的发布,工作的重心从2019年的Python 3.7移植重构,转向了新底层接口和上层应用的开发上。

接口方面进一步增加了股票、ETF期权的产品覆盖:

  • UftGateway:恒生UFT柜台接口(ETF期权)
  • HsoptionGateway:中信证券恒生集中接口(ETF期权)
  • SecGateway:顶点飞创柜台接口(ETF期权)
  • OesGateway:宽睿极速柜台接口(股票、ETF期权)
  • ToraGateway:华鑫奇点柜台接口(股票、ETF期权)
  • NhStockGateway:南华NHTD柜台接口(ETF期权)
  • GtjaGateway:国君统一交易网关接口(股票)

也支持了一些目前可能还相对小众的量化市场:

  • SgitGateway:飞鼠柜台接口(黄金T+D)
  • KsgoldGateway:金仕达黄金柜台接口(黄金T+D)
  • ComstarGateway:中汇亿达ComStar接口(银行间XBond债券)

应用方面,针对社区长期以来对于多合约交易的需求推出了PortfolioStrategy组合策略模块,同时也增加了更多量化相关的管理功能应用:

description

PortfolioManager投资组合管理模块

description

ChartWizard图表模块(可嵌于CtaBacktester使用)

description

PaperAccount本地模拟交易模块

description

MarketRader市场信号雷达模块

 
社区交流
 

【vn.py量化社区论坛】用户数量增长100%,超过18000人了,同时帖子主题的数量也都同步增长,现在已经成为vn.py用户遇到问题寻求帮助的一个主要渠道,我们也在不断根据大家提问比较集中的内容来开辟新的论坛版块。

当然网站开发毕竟不是我们的主业,年中也出现过搜索功能坏掉、找回密码坏掉、论坛经常崩溃的问题,现在通过提高数据库配置、更换消息队列总算暂时解决了,不过长期来看还是需要增加投入,也欢迎社区里的大牛们提供支持。

因为疫情的关系,2020年线下活动从三季度才恢复举办了4次,大部分社区活动都转向了线上(一共举办了25次),加起来也有将近30次了,比去年翻倍还多了点。

专题小班课一共搞了6场,除了去年的【接口开发实战】和【CTA策略深入】外,还增加了【价差套利交易】和【期权波动率交易】两个新的主题。关于课程学习的效果,两天10小时的密集培训模式,平均11000元的价格(涨价了10%),几乎每场都是满员(10人),应该足以说明问题了。

 

 

2020年回顾完,接下来一篇就是对2021年的计划了,上篇2.1.8发布公告的文章下面有一批用户给我们反馈了各种建议,同样这篇也欢迎大家多多留言告诉我们你对vn.py的期望!

发布于vn.py社区公众号【vnpy-community】
 

vn.py已经正式进驻【Gitee】(简单来说就是中国版的Github),并在一周内拿到了【GVP】(Gitee最有价值开源项目)。以后对于访问Github速度太慢的用户,有了一个更好的国内替代选择,仓库地址:
https://gitee.com/vnpy/vnpy。该Gitee仓库会每日和Github仓库同步,自动更新最新版本的代码,欢迎大家Star和Fork!
 
原文作者:用Python的交易员 | 发布时间:2020-12-26

 

本周二发布了vn.py的2.1.8版本,本次更新的内容主要是重构了PortfolioManager模块,实现交易策略的实时盈亏统计监控功能。

和之前一样,对于使用VN Studio的用户,启动VN Station后,直接点击界面右下角的【更新】按钮就能完成自动更新升级,对于没有安装的用户,请下载VNStudio-2.1.8,体验一键安装的量化交易Python发行版,下载链接:

https://download.vnpy.com/vnstudio-2.1.8.exe

 

重构后的投资组合管理模块(PortfolioManager)

 

PortfolioManager模块最初于2.0.8版本发布,当时主要的定位是为主观类的交易策略(如期货基本面单边和套利策略),提供一个方便的交易业绩跟踪和分析工具。

在2.1.7版本增加了委托来源标识(reference字段)后,所有从vn.py发出的委托请求都可以直接通过该标识来区分其交易来源,如手动交易、算法执行、量化策略等,每个交易来源可以视作一个独立的【投资组合】。

本次2.1.8版本对PortfolioManager模块的重构,将所有委托基于reference字段进行映射和计算,进一步增强了对于投资组合的盈亏统计和分析功能:

description
 
界面整体可以分为左右两部分,左边显示的是当前已有交易组合的信息表:
 
description
 

其中每列的含义如下:

  • 组合名称:委托的来源(reference)

    • 手动交易:ManualTrading
    • CTA策略:CtaStrategy_策略名
    • 价差交易:SpreadTrading_价差名
    • 期权交易:OptionMaster_ElectronicEye/DeltaHedging
    • 算法交易:AlgoTrading_算法编号
    • 脚本策略:ScriptTrader
    • 组合策略:PortfolioStrategy_策略名
  • 本地代码:带交易所后缀的合约代码

  • 开盘仓位:昨日收盘时(今日开盘),组合内该合约的持仓

  • 当前仓位:开盘仓位加上今日成交数量(多头成交 - 空头成交)的结果

  • 交易盈亏:今日所有成交,以成交价格映射到当前最新价的盈亏

  • 持仓盈亏:组合开盘仓位,以昨收盘价映射到当前最新价的盈亏

  • 总盈亏:交易盈亏和持仓盈亏的和

  • 多头成交:组合内该合约今日买开和买平成交数量

  • 空头成交:组合内该合约今日卖开和卖平成交数量

其中交易盈亏(TradingPnl)和持仓盈亏(HoldingPnl)的计算,采用的是期货交易所每日结算时所用的【逐日盯市】(Marking to Market)算法,具体原理可以搜索相关资料学习。

该组件基于QTreeWidget(树形表格)开发,可以很方便的点击最左侧每行的箭头进行折叠和展开,也可以点击顶部的【全部展开】和【全部折叠】按钮进行批量操作,并通过【调整列宽】按钮自动调整表格每列的宽度。

右侧部分显示的是所有成交记录,支持通过右上角的下拉框根据组合进行筛选显示:

description

盈亏数字的更新基于定时逻辑自动计算,计算频率可以通过顶部中间的选项框调整:

description

整体上重构后的PortfolioManager使用非常傻瓜,大部分情况下只要在VN Station的启动界面加载即可,运行策略交易的过程中打开【投资组合】界面,就能实时监控每个策略的当日交易和盈亏情况。

虽然模块中最频繁运行的策略盈亏计算逻辑已经高度优化,实现了和成交数量无关的O(1)时间复杂度,即不会因为成交数量过多而导致计算耗时变长,但终究会有一定的额外开销(百微秒到几毫秒)。对于运行策略交易的程序,总归开销是越低越好,因此推荐刷新频率在不影响使用的情况下可以设的高些(比如30秒才计算一次)。

所有组合的持仓数据数据会在关闭VN Trader时写入缓存文件中,所以不要直接杀进程退出,会丢失数据!在隔日加载时,程序会自动将昨天的总仓位结算到今天的昨仓数据字段中,注意该逻辑对于24小时交易的市场(外盘期货)可能不一定合适,后面考虑加入每日定时结算或者手动结算的功能。

如果发现有仓位记录错误,或者策略已经移除的情况,可以用VS Code手动修改缓存文件,修改后再重新启动VN Trader即可。缓存文件位于C:\users\administrator.vntrader\portfolio_manager_data.json。

 

其他更新

 

接口方面

  1. 南华期货NHTD极速接口,包括针对ETF期权的NhStockGateway和针对期货的NhFuturesGateway,该接口只能在【南华云】托管环境中使用,采用UDP通讯协议(行情和交易)替换传统API的TCP通讯协议,达到极致的低延时交易性能;
  2. 国泰君安统一交易网关接口GtjaGateway,行情上基于国君SIP行情API开发(支持TCP、软件组播、FPGA组播等多种行情源),交易上基于国君HFT交易API开发(支持华锐极速、顶点极速、金证集中等多种柜台)。

策略模块

  1. SpreadTrading模块新增灵活价差功能,对比之前的普通价差,能够支持更加灵活的价差计算公式(例如A/B、A-B*C等),同时允许引入不参与交易的定价腿,满足复杂境内外套利价差需要考虑汇率和税率等因素的需求。

 

眨眼之间已经到了2020年底,接下来又要做一年一度的项目总结和明年规划了,有什么想说给vn.py的吐槽或者建议,欢迎在下方留言!!!

发布于vn.py社区公众号【vnpy-community】

 

原文作者:用Python的交易员 | 发布时间:2020-12-11
 

更新日期:2020-12-11
 
针对许多初学者在刚开始使用vn.py时,容易遇到的各种常见问题,整理了这份FAQ文档,后续也会持续保持更新。
 

软件安装和基础使用


【Q】阅读和开发vn.py相关的代码,推荐怎么选择Python版本和IDE工具?

【A】建议使用vn.py官方打包的Python发行版VN Studio作为Python环境,同时使用Visual Studio Code(安装Python和Pylance插件)作为IDE工具。

对于新手来说,尤其不推荐使用PyCharm,作为针对大型Python项目的PyCharm,使用时需要用户对运行环境进行大量细节配置,不熟悉的人很容易在各种地方出错,浪费大量时间去爬坑。

对于经验丰富的老手来说就无所谓了,选择自己最熟悉的Python版本和IDE工具就好。

 

CTP期货接口


【Q】已经连接登录了CTP接口,但是在VN Trader主界面,左上角的编辑框中输入合约代码后,为何回车无法订阅行情?

【A】请检查合约代码是否输入正确,国内4家期货交易所的合约命名规则有所区别,vn.py内部全部采用官方命名,举例来说:

  • 中金所:IF2003
  • 上期所:au2003
  • 大商所:m2003
  • 郑商所:TA003

请注意以上命名中的英文字母大小写,以及年月的数字。


【Q】连接SimNow的CTP服务器,主界面左下角日志区域没有任何输出信息,或者出现4097错误?

【A】可能有以下几个原因,请按顺序排查:

  1. SimNow提供两套环境,其中第一套仿真**实盘环境只能在交易时段使用(9:00-15:00),第二套仿真测试环境**只能在非交易时段使用(所有其他时间);
  2. 第一套环境中又分为三组服务器,vn.py只能连接第二和第三组服务器(支持穿透式验证的版本),不能连接第一组;
  3. 由于运维方面的原因,SimNow服务器有时会出现停机维护的情况(2019年之后尤其频繁),此时只能等待到下一个交易日再尝试。

【Q】CTP接口报错:“交易服务器授权验证失败,代码:63,信息:CTP:客户端认证失败”是怎么回事?

【A】这个报错是因为登录时,填写的穿透式认证的产品名称和授权码错误。如果是实盘账户请联系期货公司确认,如果是SimNow账户请使用下面的配置(来自SimNow官网)

  • 产品名称:simnow_client_test
  • 授权编码:0000000000000000

【Q】申请穿透式接入时,期货公司要求提供AppID,请问AppID是什么?

【A】AppID是一个由用户提供的交易程序的代码,具体怎么写可以参考这篇文章:《看完这篇,彻底搞定期货穿透式CTP API接入》


【Q】行情订阅失败,说找不到合约,请问这是怎么回事?

【A】查找合约可以点击主界面的顶部菜单栏的【帮助】->【查询合约】打开对话窗口:

  • 在对话窗口的搜索框中输入想要交易的合约代码的一部分,搜索全部相关的合约信息;
  • 或者将搜索框留空,直接点击搜索,则会显示当前已连接的交易接口所能交易的全部合约。

通过搜索出来的结果,即可判断合约代码的正确写法。

同时两种比较常见的出错原因:

  1. 代码名称写错,比如【RM101.CZCE】可能打成了【rm101.CZCE】。
  2. 找不到该合约,比如说已退市的合约或者是账户权限外的合约。像SimNow账户就不支持期权仿真环境,所以SimNow账户是找不到期权合约的。如果需要的话,可以去支持期权仿真环境的期货公司申请试用账户。

【Q】CTP/CTPTEST接口在登陆时报错:“交易服务器登录失败,代码:3,信息:CTP:不合法的登录”,是怎么回事?

【A】这个报错是典型的账号密码错误,可以检查一下是否输入错误:

  1. 对于SimNow环境,账号是填写InvestorID(纯数字),而不是网站注册时填写的账号(手机号);
  2. 如果确定没有输入错误的话,那么请检查是否服务器的地址配置产生错误了(比如测试和生产环境搞混)。

 

RQData数据服务


【Q】RQData中的连续合约数据,提供88、888、99等多种类型,做CTA策略回测应该用哪个?

【A】首先是数据的区别,以股指IF合约为例:

  • IF88:简单将IF股指期货每个主力月份的量价数据进行拼接,未做任何平滑处理,在主力合约换月时数据会有跳空的现象,因此该数据只适合日内CTA策略的回测(收盘无持仓)
  • IF888:在IF88数据的基础上,当主力合约换月时记录换月的价差金额,并对之前的历史数据全部加上或者减去该价差,进行平滑处理,因此该数据适合隔夜CTA策略的回测(收盘有持仓)
  • IF99:由所有可交易品种的数据,以累计持仓量进行加权平均后,得出的指数数据,由于其在现实中不可交易(交易所并不提供指数合约),因此不推荐使用该数据进行回测,可用于某些数据模型的研究

具体细节可以参考米筐官方的RQData文档页面


【Q】RQData报错:this license is only allowed to access through the education network,请问这个该怎么解决?

【A】这个报错说明使用的是学生账号,只能在校园网环境下使用。如果已经使用的是校园网络,但仍报同样的错,应该是ip地址不在的RQData网段池里,建议联系RQData的工作人员进行添加。


【Q】RQData报错:rqdatac.share.errors.QuotaExceeded: Quota exceeded,请问这个是什么情况?

【A】这个报错说明目前该账户同时登录的次数超过了限制。对于付费用户,RQData默认允许同时有3个连接登录,对于试用账户则只有1个了。请关闭其他连接了RQData的进程后,再次尝试即可。

 

CTA策略交易


【Q】我自己开发的策略,应该放到什么目录?

【A】CtaStrategy和CtaBacktester两个模块,在启动时都会自动扫描加载VN Trader运行时目录(主界面窗口顶部标题栏的路径)下的strategies目录中的策略文件。

默认情况下,运行时目录是当前操作系统的用户目录,假设你的用户名为abc:

  • Windows系统

    • 用户目录为c:\users\abc;
    • 策略应该放在c:\users\strategies中
  • Linux/Mac系统

    • 用户目录为/home/abc
    • 策略应该放在/home/abc/strategies中

【Q】启动CTA策略模块时,弹出报错json.decoder.JSONDecodeError: Expecting value: line xx column xx (char xxx),应该该怎么解决呢?

【A】首先请删除C:\users\administrator.vntrader文件夹里对应的json文件:

  • cta_strategy_setting.json
  • cta_strategy_data.json

注意,这里的administrator应该是你的Windows操作系统用户名。删除后重启VN Trader即可。

如果后续再次出现该错误,请检查策略代码中,是否有把str、bool、int、float类型以外的变量名称写到了parameters列表中,这四种类型以外的变量由于无法通过json序列化会导致保存策略状态出错(损坏json文件)。

 

历史数据和数据库


【Q】vn.py支持哪些数据库?对于用户来说应该怎么选择?

【A】目前一共支持四套数据库:SQLite、MySQL、PostgreSQL以及MongoDB。其中SQLite、MySQL和PostgreSQL属于SQL类数据库,MongoDB属于NoSQL类数据库。

从各自的特点看:

  • SQLite:采用单一本地文件来保存数据,用户无需安装任何软件即可使用,也是vn.py默认使用的数据库,推荐绝大部分刚上手的用户使用(无需做任何配置);
  • MySQL:互联网时代使用广泛的数据库,需要额外安装运行MySQL数据库服务(可以选择本机或者独立服务器部署),推荐需要同时运行多个VN Trader进程访问数据库,且有一定SQL经验的用户使用;
  • MongoDB:基于类似Json格式储存的文件型数据库,其查询语言比起SQL更加适合交易员的胃口(易上手),同时速度性能比起MySQL有一定优势,推荐需要同时运行多个VN Trader进程访问数据库,且不会SQL的用户使用
  • PostgreSQL:功能强大的开源数据库之一,比起MySQL支持更复杂的查询语法和数据格式,但同样也需要大量的时间来学习和配置,只推荐对其已有丰富使用经验的用户使用。

关于数据库的具体配置方法,请参考官网文档


【Q】手头已有从其他来源(淘宝购买、软件导出等)获取的CSV格式的K线数据,如何导入到vn.py中用于策略历史回测分析?

【A】注意:最新版本中已将之前的CsvLoader模块的功能,合并到了DataManager模块中。

操作流程如下:

  1. 在VN Station中启动VN Trader Pro时,勾选加载DataManager应用模块;
  2. 打开VN Trader主界面后,点击顶部菜单栏的【功能】->【数据管理】,打开DataManager窗口;
  3. 点击右上角的【导入数据】按钮,弹出对话框【从CSV导入数据】;
  4. 点击【选择文件】按钮,在弹出的对话框中选择要导入的CSV文件路径;
  5. 在【合约信息】栏目下,配置要把数据放到其中的目标数据库,注意周期只支持:MINUTE(1分钟线)、HOUR(1小时线)、DAILY(1日线)、WEEKLY(1周线);
  6. 在【表头信息】栏目下,根据CSV文件内的表头进行匹配,注意如果是英文大小写必须完全一致;
  7. 在【格式信息】栏目下,对日期时间戳的字符串格式进行匹配,大部分情况下注意分隔符(如年月日用“-”还是“/”)以及日期时间之间是否有空格就够了;
  8. 点击【确定】按钮执行导入操作,导入过程中界面会假死,通常耗费几秒到十几分钟的时间(视乎数据量);
  9. 完成后点击右上角的【刷新】按钮,即可查询数据库中当前该合约的数据范围情况。

 

其他应用模块


【Q】启动VN Trader时,报错zmq.error.ZMQError: Permission denied,请问如何解决?

【A】出现这个报错是因为ZeroMQ使用的端口冲突了。在VN Station中配置VN Trader的加载模块时请注意,ExcelRtd、RpcService都需要用到ZeroMQ,因此同时加载就可能导致冲突情况。建议在使用的时候,只加载自己需要用到的模块即可。

发布于vn.py社区公众号【vnpy-community】

 

原文作者:用Python的交易员 | 发布时间:2020-11-16
 

更新日期:2020-11-16
 
针对许多初学者在刚开始使用vn.py时,容易遇到的各种常见问题,整理了这份FAQ文档,后续也会持续保持更新。
 

软件安装和基础使用


【Q】阅读和开发vn.py相关的代码,推荐怎么选择Python版本和IDE工具?

【A】建议使用vn.py官方打包的Python发行版VN Studio作为Python环境,同时使用Visual Studio Code(安装Python和Pylance插件)作为IDE工具。

对于新手来说,尤其不推荐使用PyCharm,作为针对大型Python项目的PyCharm,使用时需要用户对运行环境进行大量细节配置,不熟悉的人很容易在各种地方出错,浪费大量时间去爬坑。

对于经验丰富的老手来说就无所谓了,选择自己最熟悉的Python版本和IDE工具就好。

 

CTP期货接口


【Q】已经连接登录了CTP接口,但是在VN Trader主界面,左上角的编辑框中输入合约代码后,为何回车无法订阅行情?

【A】请检查合约代码是否输入正确,国内4家期货交易所的合约命名规则有所区别,vn.py内部全部采用官方命名,举例来说:

  • 中金所:IF2003
  • 上期所:au2003
  • 大商所:m2003
  • 郑商所:TA003

请注意以上命名中的英文字母大小写,以及年月的数字。


【Q】连接SimNow的CTP服务器,主界面左下角日志区域没有任何输出信息,或者出现4097错误?

【A】可能有以下几个原因,请按顺序排查:

  1. SimNow提供两套环境,其中第一套仿真实盘环境只能在交易时段使用(9:00-15:00),第二套仿真测试环境只能在非交易时段使用(所有其他时间);
  2. 第一套环境中又分为三组服务器,vn.py只能连接第二和第三组服务器(支持穿透式验证的版本),不能连接第一组;
  3. 由于运维方面的原因,SimNow服务器有时会出现停机维护的情况(2019年之后尤其频繁),此时只能等待到下一个交易日再尝试。

【Q】CTP接口报错:“交易服务器授权验证失败,代码:63,信息:CTP:客户端认证失败”是怎么回事?

【A】这个报错是因为登录时,填写的穿透式认证的产品名称和授权码错误。如果是实盘账户请联系期货公司确认,如果是SimNow账户请使用下面的配置(来自SimNow官网)

  • 产品名称:simnow_client_test
  • 授权编码:0000000000000000

【Q】申请穿透式接入时,期货公司要求提供AppID,请问AppID是什么?

【A】AppID是一个由用户提供的交易程序的代码,具体怎么写可以参考这篇文章:《看完这篇,彻底搞定期货穿透式CTP API接入》


【Q】行情订阅失败,说找不到合约,请问这是怎么回事?

【A】查找合约可以点击主界面的顶部菜单栏的【帮助】->【查询合约】打开对话窗口:

  • 在对话窗口的搜索框中输入想要交易的合约代码的一部分,搜索全部相关的合约信息;
  • 或者将搜索框留空,直接点击搜索,则会显示当前已连接的交易接口所能交易的全部合约。

通过搜索出来的结果,即可判断合约代码的正确写法。

同时两种比较常见的出错原因:

  1. 代码名称写错,比如【RM101.CZCE】可能打成了【rm101.CZCE】。
  2. 找不到该合约,比如说已退市的合约或者是账户权限外的合约。像SimNow账户就不支持期权仿真环境,所以SimNow账户是找不到期权合约的。如果需要的话,可以去支持期权仿真环境的期货公司申请试用账户。

 
RQData数据服务


【Q】RQData中的连续合约数据,提供88、888、99等多种类型,做CTA策略回测应该用哪个?

【A】首先是数据的区别,以股指IF合约为例:

  • IF88:简单将IF股指期货每个主力月份的量价数据进行拼接,未做任何平滑处理,在主力合约换月时数据会有跳空的现象,因此该数据只适合日内CTA策略的回测(收盘无持仓)
  • IF888:在IF88数据的基础上,当主力合约换月时记录换月的价差金额,并对之前的历史数据全部加上或者减去该价差,进行平滑处理,因此该数据适合隔夜CTA策略的回测(收盘有持仓)
  • IF99:由所有可交易品种的数据,以累计持仓量进行加权平均后,得出的指数数据,由于其在现实中不可交易(交易所并不提供指数合约),因此不推荐使用该数据进行回测,可用于某些数据模型的研究

具体细节可以参考米筐官方的RQData文档页面


【Q】RQData报错:this license is only allowed to access through the education network,请问这个该怎么解决?

【A】这个报错说明使用的是学生账号,只能在校园网环境下使用。如果已经使用的是校园网络,但仍报同样的错,应该是ip地址不在的RQData网段池里,建议联系RQData的工作人员进行添加。


【Q】RQData报错:rqdatac.share.errors.QuotaExceeded: Quota exceeded,请问这个是什么情况?

【A】这个报错说明目前该账户同时登录的次数超过了限制。对于付费用户,RQData默认允许同时有3个连接登录,对于试用账户则只有1个了。请关闭其他连接了RQData的进程后,再次尝试即可。

 

CTA策略交易


【Q】我自己开发的策略,应该放到什么目录?

【A】CtaStrategy和CtaBacktester两个模块,在启动时都会自动扫描加载VN Trader运行时目录(主界面窗口顶部标题栏的路径)下的strategies目录中的策略文件。

默认情况下,运行时目录是当前操作系统的用户目录,假设你的用户名为abc:

  • Windows系统

    • 用户目录为c:\users\abc;
    • 策略应该放在c:\users\strategies中
  • Linux/Mac系统

    • 用户目录为/home/abc
    • 策略应该放在/home/abc/strategies中

 

历史数据和数据库


【Q】vn.py支持哪些数据库?对于用户来说应该怎么选择?

【A】目前一共支持四套数据库:SQLite、MySQL、PostgreSQL以及MongoDB。其中SQLite、MySQL和PostgreSQL属于SQL类数据库,MongoDB属于NoSQL类数据库。

从各自的特点看:

  • SQLite:采用单一本地文件来保存数据,用户无需安装任何软件即可使用,也是vn.py默认使用的数据库,推荐绝大部分刚上手的用户使用(无需做任何配置);
  • MySQL:互联网时代使用广泛的数据库,需要额外安装运行MySQL数据库服务(可以选择本机或者独立服务器部署),推荐需要同时运行多个VN Trader进程访问数据库,且有一定SQL经验的用户使用;
  • MongoDB:基于类似Json格式储存的文件型数据库,其查询语言比起SQL更加适合交易员的胃口(易上手),同时速度性能比起MySQL有一定优势,推荐需要同时运行多个VN Trader进程访问数据库,且不会SQL的用户使用
  • PostgreSQL:功能强大的开源数据库之一,比起MySQL支持更复杂的查询语法和数据格式,但同样也需要大量的时间来学习和配置,只推荐对其已有丰富使用经验的用户使用。

关于数据库的具体配置方法,请参考官网文档


【Q】手头已有从其他来源(淘宝购买、软件导出等)获取的CSV格式的K线数据,如何导入到vn.py中用于策略历史回测分析?

【A】注意:最新版本中已将之前的CsvLoader模块的功能,合并到了DataManager模块中。

操作流程如下:

  1. 在VN Station中启动VN Trader Pro时,勾选加载DataManager应用模块;
  2. 打开VN Trader主界面后,点击顶部菜单栏的【功能】->【数据管理】,打开DataManager窗口;
  3. 点击右上角的【导入数据】按钮,弹出对话框【从CSV导入数据】;
  4. 点击【选择文件】按钮,在弹出的对话框中选择要导入的CSV文件路径;
  5. 在【合约信息】栏目下,配置要把数据放到其中的目标数据库,注意周期只支持:MINUTE(1分钟线)、HOUR(1小时线)、DAILY(1日线)、WEEKLY(1周线);
  6. 在【表头信息】栏目下,根据CSV文件内的表头进行匹配,注意如果是英文大小写必须完全一致;
  7. 在【格式信息】栏目下,对日期时间戳的字符串格式进行匹配,大部分情况下注意分隔符(如年月日用“-”还是“/”)以及日期时间之间是否有空格就够了;
  8. 点击【确定】按钮执行导入操作,导入过程中界面会假死,通常耗费几秒到十几分钟的时间(视乎数据量);
  9. 完成后点击右上角的【刷新】按钮,即可查询数据库中当前该合约的

发布于vn.py社区公众号【vnpy-community】

 
《30天解锁Python量化开发》额外补充的5集实践案例分享已经全部更新完毕,包括批量CSV导入、全市场TICK行情录制、扩展插件开发、20行代码的双均线回测。课程通过概念讲解和实践操作结合的方式,加上vn.py框架内部代码细节的梳理学习,来帮助你快速掌握Python量化开发能力,详情请戳
 
原文作者:用Python的交易员 | 发布时间:2020-11-04
 

 
Quantopian即将在11月14日关闭的消息已经传遍了国内外的量化圈,不想蹭流量,特意迟了几天再来写这篇文章。

先来贴一张Quantopian的主要开源项目zipline的Github Star增长历史

description

原图链接:https://star-history.t9t.io/#quantopian/zipline

在vn.py刚发布的2015年初(春节期间),zipline已经积累了大概1800个的Github Star。当时的zipline可以说是整个Python量化开源量化领域的领军者,对vn.py这样刚出生的小家伙来说只是一个可望而不可及的目标。通过方便的线上平台和透明的开源代码,Quantopian在短时间内吸引到了巨大的C端流量,社区用户的规模也持续增长。

作为一家创业公司,有了通过免费产品吸引来的用户后,自然就要尝试变现盈利。尽管zipline本身作为量化策略框架,可以应用在各种资产类别和金融市场,但Quantopian线上平台当时主要提供的是美股相关的数据和内容。

大概在2017年初,Quantopian选择了对接Interactive Brokers这家对量化交易用户非常友好的美股经纪商,提供收费的线上平台实盘交易功能(Live Trading),而且价格相当便宜(大概一年几十美金,记不清了)。

在社区的运营上,Quantopian也非常拥抱开源软件的生态模式,每年举行2-3场地区性的QuantCon年会(波士顿、伦敦、新加坡),围绕交易策略、量化技术、市场机会等主题展开讨论。

我本人非常荣幸曾经在2017年受到Quantopian的邀请,作为演讲嘉宾参加了当年的新加坡QuantCon(2017年9月29日)。在活动上和Quantopian公司的管理层交流后,得知由于付费用户数量太少,他们已经决定终止IB的实盘交易功能,将在接下来转型类似MOM的众包基金模式。

接下来的情况发展,其他的一些量化公众号就都已经介绍的比较清楚了:虽然拿到了业内大佬的投资,但众包基金的业绩始终不见起色(没看过的话推荐读下这篇来自【量化投资与机器学习】的《再见!Quantopian》)。

到了2019年中,Quantopian又再次做出了转型的尝试,联合FactSet金融数据公司(一家类似Bloomberg的金融信息和分析平台)推出了Quantopian Enterprise付费线上量化平台,希望通过高质量的机构级数据,以及包括zipline、alphalens、pyfolio在内的全套量化工具链,来吸引B端用户。而这次转型尝试的结果,我们也已经知道了。

到这里Quantopian的公司历史就补完了,再来看一张vn.py和zipline的Github Star增长对比

description

度过婴儿期的2015年后,vn.py保持了比较稳定的增长速度,并于2019年4季度超过zipline成为Github上排名第1的开源量化项目。

不过,看最近的架势可能又要被反超了。

絮絮叨叨讲了半天流水账,试着做一点总结吧:

  1. Quantopian的商业尝试主要包括了4个阶段

    a. 免费量化研究平台
    b. 2C量化交易平台(IB)
    c. 众包MOM基金
    d. 2B量化研究平台(FactSet)

  2. 频繁的转型会导致巨大的成本,有可能拖垮创业公司

  3. 拿到了行业大佬和知名VC的投资,不一定是好事(容易过度烧钱

  4. 不拿投资,单靠团队苟着猥琐发展,也能活下来!

  5. 找到用户(不管2C还是2B)愿意为之付费的痛点至关重要,这点上可以看国内知名的三大矿:

    a. 米筐:转型数据服务和投研系统
    b. 聚宽:转型量化私募(股票T0方向)
    c. 优矿:通联的管理咱还是不说了......

这是最好的时代,也是最坏的时代。随着中国金融市场的不断发展和对外开放,相信量化投资相关的商业机会只会变得越来越多,Keep Walking!

 

最后,关于Quantopian或者量化行业有什么想问的问题或者想吐槽的内容,欢迎在文章下方留言。本期我们将会随机抽取一位留言者赠送《量化交易零基础入门系列 - 30天解锁Python量化开发》课程的5折优惠券一张。

 

活动主题:基于vn.py的期权量化交易

 

活动内容:

  1. 期权相关的交易接口

    a. 期货期权

    i. CTP
    ii. 恒生UFT

    b. ETF期权:
    i.SOPT(CTP证券)
    ii. SEC(飞创证券)
    iii. NHTD(南华极速)

  2. 期权策略的策略模块

    a. OptionMaster:半自动的波动率交易策略
    b. PortfolioStrategy:全自动的多维度组合策略
    c. ScriptTrader:波动率曲面实时分析

  3. 期权波动率交易经验分享

 
 
本次活动特别感谢南华期货深圳分公司赞助提供场地,报名活动是免费的,请扫描下方二维码报名即可。

同时线下场地因为位置有限(40人左右),所以名额就先到先得了。抢到的同学我们会尽快微信联系确认,没有抢到线下名额的同学也欢迎线上收看直播。

扫码填写时,请注意提供您的公司和职位信息(留空就直接线上了):

description

发布于vn.py社区公众号【vnpy-community】

 
 
原文作者:用Python的交易员 | 发布时间:2020-10-27

 

下周的第9期【交易接口开发】的小班课名额已经全部售罄,感谢大家的认可支持。

11月底的第10期【CTA策略实战】小班课内容则是针对CTA策略的主题,并包括10套实战策略代码分享,看几个DEMO:

 

针对股指日内的SuperCombo策略

description

 

针对焦炭趋势的OscillatorDrive策略

description

 

针对海外市场趋势的SuperTurtle策略

description

小班课一共包含周六周日两个下午共计10小时的课程,以及后续三个月的助教跟踪辅导。线下课程的地点在上海浦东,考虑到今年大家对于坐火车飞机的健康风险顾虑,不想来上海的同学也可以选择远程线上听课。课程大纲如下:

 

日期:2020年11月28日(周六)和11月29日(周日)

时间:两天下午1点-6点,共计10小时

大纲

1 . CTA策略开发

a. 历史数据完整解决方案,多种数据库配置、历史行情记录、异常数据清洗
b. 基于模板开发CTA策略,参数变量设计,回调函数处理,交易函数详解
c. 深入K线时间序列:自定义K线合成,技术指标定制,时间序列统计分析

2 . 策略回测优化

a. 回测引擎核心业务逻辑流、委托撮合规则(停止单、限价单)、策略状态控制

b. 回测图表的分析方法,统计数据分析中的误区

c. 优化算法详解:多进程穷举算法、单进程遗传算法

3 . 实盘交易运维

a. 策略每日盘中的生命周期管理

b. 历史数据初始化、策略运行状态同步管理

c. 盘中交易异常处理方案

4 . CTA进阶深入

a. 股指期货策略源代码分享:SuperCombo、Cuatro、NewDualThrust
b. 商品期货策略源代码分享:MoneyFlow、OscillatorDrive、CincoStrategy
c. CTA策略中的交易算法实现:委托细粒度状态机管理

价格:10999元(之前小班课学员9折)

 

报名方式和之前一样,请发送邮件到vn.py@foxmail.com,注明想参加的课程、姓名、手机、公司、职位即可。

发布于vn.py社区公众号【vnpy-community】

 
《30天解锁Python量化开发》课程的原定大纲内容(50集)已经在国庆期间全部更新结束,本月底还会补充3-5集的量化应用实践案例分享。课程通过概念讲解和实践操作结合的方式,加上vn.py框架内部代码细节的梳理学习,来帮助你快速掌握Python量化开发能力,详情请戳
 
原文作者:用Python的交易员 | 发布时间:2020-10-27

 

周一发布了vn.py的2.1.7版本,本次更新的内容主要是增加了MarketRadar市场信号雷达模块。

和之前一样,对于使用VN Studio的用户,启动VN Station后,直接点击界面右下角的【更新】按钮就能完成自动更新升级,对于没有安装的用户,请下载VNStudio-2.1.7,体验一键安装的量化交易Python发行版,下载链接:

https://download.vnpy.com/vnstudio-2.1.7.exe

 

市场信号雷达模块(MarketRadar)

 

该模块的主要功能,是允许用户基于自定义Python数学公式,实时计算衍生行情数据。

一看之下可能会觉得和SpreadTrading模块中的价差组合行情计算功能重复了,但实际上两者在功能定位上完全不同:

  • MarketRadar模块

    • 定位分析,主要用于扫描和寻找市场信号机会
    • 支持灵活的Python数学公式:加减乘除、内置函数(max/min等)
    • 基于公式内各个合约的最新成交价,计算自定义公式的最新数值
  • SpreadTrading模块

    • 定位交易,主要用于执行多条腿的价差组合买卖
    • 只能通过价差腿的系数正负,来实现加减的公式计算
    • 基于各条腿的1档盘口,计算价差组合的盘口价格

在VN Station启动对话框中,加载MarketRadar模块,启动VN Trader后先连接登录交易接口,再打开【市场雷达】组件可以看到类似下图的界面:

description

在窗口左下角的编辑区中,可以快速创建要扫描的雷达规则(RadarRule):

description

其中各字段的对应含义如下:

  • 名称

    • 雷达规则的名称,注意不能重复
  • 公式

    • 规则的计算公式,支持任意合法的Python数学公式
    • 注意其中的变量,只能是A、B、C、D、E(不需要都用)
  • A、B、C、D、E

    • 计算公式中要用到的变量对应的合约本地代码(vt_symbol)
    • 收到其中任何一个合约的TICK行情推送时,会实时触发规则计算
    • 不用的变量留空即可
  • 小数

    • 公式的最终计算结果保留多少位小数

点击【添加】按钮即可完成新规则的添加,MarketRadar会自动订阅相关合约行情并开始自动扫描计算。

除了跨期价差这种减法求差的规则外,MarketRadar也能支持金银比这种比例类的计算规则:

description

对于需要调整的规则,也可以同样在左下角输入相应信息(名称请填写要修改的规则名称),点击【修改】按钮即可完成修改。对于不再需要的规则,可以点击监控表中最右侧的【删除】按钮来进行移除。

需要添加较多的雷达规则时,可以通过CSV文件来一次性批量导入,点击窗口右下角的【导入CSV】按钮,在弹出的对话框中找到要导入的CSV文件后打开即可快速完成导入(右下角日志组件中有对应信息输出):

description

CSV文件的格式如下图所示,和编辑区的各字段完全一致:

description

结合Excel的表格快速编辑功能,批量添加规则还是挺方便的:

description

目前2.1.7版本的MarketRadar只支持雷达规则计算结果的数字显示,后续我们会进一步加入图表显示(参考文华的组合)、条件提醒(警报和发微信)、策略信号订阅等功能。

 

委托来源标识

 

这个功能要感谢社区论坛上hxxjava同学的贡献,论坛原帖:

【如何区分CTA策略委托单、成交单是属于哪个策略的?】

今年初就已经在OrderRequest下单请求类(位于vnpy.trader.object)中加入了一个reference字段用于标识委托的来源,但当时字段之前主要为了让服务端的资管系统(O32等)能够进行识别记录,并没有考虑在VN Trader客户端中的相关应用。

在这次的2.1.7版本中,我们在OrderData委托回报类上也加入了reference字段,通过OrderRequest.create_order_data方法来实现自动绑定,同时也增加了所有交易应用模块中的下单自动填写,现在可以很方便的在主界面的【委托监控】组件中看到委托的来源信息:

description

各应用模块填写的reference内容如下:

  • 手动交易:ManualTrading
  • CTA策略:CtaStrategy_策略名
  • 价差交易:SpreadTrading_价差名
  • 期权交易:OptionMaster_ElectronicEye/DeltaHedging
  • 算法交易:AlgoTrading_算法编号
  • 脚本策略:ScriptTrader
  • 组合策略:PortfolioStrategy_策略名

有了reference这个来源信息后,下个版本(2.1.8)我们将会增强下PortfolioManager模块,实现VN Trader本地化的策略盈亏统计功能(分策略、分合约)。

 

其他更新

 

接口方面

  1. 升级重构了华鑫证券的奇点极速柜台接口,并根据交易品种的区别,拆分为了针对股票的ToraStockGateway和针对期权的ToraOptionGateway。

历史数据

  1. RqdataClient增加对TICK数据下载功能支持,购买了RQData的TICK数据服务的用户,可以通过DataRecorder模块来直接下载米筐TICK数据入库;
  2. 直达期货接口DaGateway,增加外盘期货历史数据下载功能,对直达的实盘客户来说以后获取历史数据再也不是问题了(支持历史回测和实盘初始化);
  3. 修复了加载PaperAccount模块后,从接口查询历史数据可能出错的问题(之前影响的是IB接口)。

 

 

同样,有什么想问的问题或者分享的内容,欢迎在文章下方留言。本期我们将会随机抽取一位留言者赠送《量化交易零基础入门系列 - 30天解锁Python量化开发》课程的5折优惠券一张。

发布于vn.py社区公众号【vnpy-community】

 

原文作者:用Python的交易员 | 发布时间:2020-09-30

 

不知不觉,从2019年开始的vn.py小班课已经举办了8期,放几张之前课程的照片:

description

准备完毕,静候同学们到达

description

学习量化,先从掌握核心框架

description

深入代码,分析策略逻辑细节

 

2020年末的新一轮小班课即将开始,时间还是都会定在周末两天,一共包含周六周日两个下午共计10小时的课程,以及后续三个月的助教跟踪辅导。线下课程的地点在上海浦东,考虑到今年大家对于坐火车飞机的健康风险顾虑,不想来上海的同学也可以选择远程线上听课。

第一场课程的主题是【底层接口开发】,总共10个名额目前已有半数被提前报名锁定,剩余名额还有5位,感兴趣的同学请抓紧吧,课程大纲如下:

 
日期:2020年11月7日(周六)和11月8日(周日)

时间:两天下午1点-6点,共计10小时

大纲

  1. 市场微观结构

    a. 期货、股票、期权、外汇、美股,这些不同市场的微观交易结构是怎样的?
    b. 行情是怎么形成的,到底什么是tick?
    c. 下单后,委托请求是怎么一步步到达最终执行端,再返回委托结果的?

  2. C++ API的Python封装

    a. pybind11、cython、ctypes等封装技术的详细讲解
    b. 针对国内各种风格的C++ API,如何实现低延时的封装方案

  3. 交易接口业务层的功能对接开发

    a. 从0开始对接开发交易接口
    b. 如何针对某一市场定制交易接口,充分利用STOP、FAK、FOK、OCO委托?
    c. 批量委托、撤单等指令在做市策略算法中的应用

价格:9999元
 

报名方式和之前一样,请发送邮件到vn.py@foxmail.com,注明想参加的课程、姓名、手机、公司、职位即可。
 

发布于vn.py社区公众号【vnpy-community】

 
原文作者:用Python的交易员 | 发布时间:2020-08-31

 

全新的《30天解锁Python量化开发》已经更新到第10集,8折优惠名额还剩最后几位,感兴趣的同学请欲购从速~~课程大纲详情戳我
发布于vn.py社区公众号【vnpy-community】

 

本系列的最后一篇文章了,之前三篇中的内容讲的更多是围绕着【代码】的技术,但不能忘记一点:任何代码最终都还是为【人】服务的。

vn.py项目从诞生的第一天起,核心的目标用户始终是【交易员】。对于我们团队来说,Github上代码仓库里托管着的所有源代码只是项目其中的一部分,另外还有的一部分就是面向我们用户群体所提供的服务体系,其中主要的就是社区论坛和学习资料。

当然,受限于手头的资源条件(没有找VC融资、全靠自己造血),我们在这两块的服务上还有许多不足之处,比如官方文档就是用户普遍反馈的vn.py最大槽点......

从接下来的v2.1.6版本开始,我们计划投入更多的精力在完善文档和论坛的工作上。在这篇文章中,就来先看一看启发了vn.py这两块服务体系的QuantopianQuantStart。

 

Quantopian

 

官网:www.quantopian.com

类型:线上平台(提供开源软件Zipline)

国家:美国

语言:Python

启发:交流社区

作为在线量化投资平台的鼻祖,Quantopian的大名在量化圈可以说是无人不知无人不晓。国内知名的“三大矿”:优矿、米筐、聚宽,在最初的产品形态上都是借鉴自Quantopian的Web量化研究界面,如下图所示:

description

上图中左侧的部分是代码编辑器,在这里用户可以在浏览器中快速开发各类量化交易策略。结合Quantopian在线平台上提供的历史行情数据(美股和期货),用户可以快速进行量化策略的回测验证,无需在本地电脑上安装环境和准备数据,大幅降低了量化策略研究的入门门槛。

Quantopian公司同样是开源软件的拥护者,其推出的Zipline策略研究框架正是Quantopian在线平台的核心回测组件,同时也是全球Python领域最早的开源量化工具之一,截止目前依旧在Github上量化类项目中排名前三。

description

围绕着在线平台和开源项目两大主题,Quantopian的社区论坛聚集了大量的人气,在这里寻求使用帮助、分享量化经验、提供产品反馈。有点像是小米论坛的发展模式:和用户保持持续深入的沟通来增加用户粘性,并且借助用户的力量来推动产品快速迭代和不断提高。

学习Quantopian的成功经验,vn.py项目在2015年推出后几个月就上线了第一版论坛【维恩的派】,满足我们用户交流需求的同时也沉淀了许多优质内容。遗憾的是,基于Discuz系统开发的论坛引来了大量垃圾灌水机器人,经常把论坛搞得一塌糊涂,还跟小强一样怎么都封不完。

所以2018年开始2.0新版本的开发后,我们重新推出了基于FlaskBB的【vn.py量化社区】,根据社区用户喜欢交流的内容主题,整个论坛分为6个版块:

  • 官方发布
  • 课程学习
  • 交易接口
  • 策略应用
  • 互帮互助
  • 旧文存档

目前论坛的注册用户数量已经快突破15000,同时在线用户400-900,日活在3000-6000,算的上是国内活跃度较高的量化交易社区之一了。

 

QuantStart

 

官网:www.quantstart.com

类型:内容网站

国家:英国

语言:Python

启发:量化教程

QuantStart是一家专门提供量化投资(Quantitative Investment)和算法交易(Algorithmic Trading)相关文章资源的教学内容网站。

description

网站中的资源整体上分为四大主题:

  • Quantitative Trading:量化交易
  • Mathematical Finance:金融数学
  • Programming and Software Development:编程开发
  • Careers and Education:职业教育

在文章内容上,有些已经是职业量化交易员的同学,可能会觉得QuantStart上的许多文章只是点出个大概方向,并没有讲的特别精细。

但对于刚入门的量化初学者来说,从最基础的概念讲起,结合应用案例逐步深入,最后还提供进一步研究的参考资料信息,无疑是一种非常高效的学习方式。

实际上对我本人来说,QuantStart网站也是最初的量化启蒙老师(2010到2012年还在英国念大三和硕士的时候)。尽管vn.py本身的项目文档还不怎么完善,但是这几年来我自己还算是写了不少关于vn.py和量化交易的分享文章,有时可能尝试着教别人一样知识才是学习这门知识有效的方式,在可预见的将来应该还是会继续坚持下去吧。

 
同样,有什么想问的问题或者分享的内容,欢迎在文章下方留言。本期我们将会随机抽取一位留言者赠送《vn.py全实战进阶 - CTA策略》课程的5折优惠券一张。
 

发布于vn.py社区公众号【vnpy-community】

 

原文作者:用Python的交易员 | 发布时间:2020-08-27

 

感谢大家的支持,全新的《30天解锁Python量化开发》课程订阅量已达82份,8折优惠名额还剩最后18位,感兴趣的同学请欲购从速~~课程大纲详情戳我

 

这两周被催更了,先说明下这个技术架构的系列一共会有4篇文章和8个项目,分别对应:

  • 语言选择:Matlab
  • 系统设计:AlgoTrader
  • 标准接口:CTP API
  • CTA策略:MultiCharts
  • 价差交易:TT X_Trader
  • 期权交易:Horizon
  • 用户社区:Quantopian
  • 教学讲解:QuantStart

相比较于CTA策略,国内做价差交易(套利交易)和期权交易(波动率交易)的人数会少很多。所以相比于前面文章中的项目,可能大部分同学都完全没听说过这方面的平台,比如海飞鼠、ATP、飞豹、风软OptKingdom等等。

本篇文章中要讲的两个平台,分别是对启发了vn.py项目中SpreadTrading模块的的TT X_Trader平台,以及启发了OptionMaster模块的Horizon平台。

 

TT X_Trader

 

官网:www.tradingtechnologies.com

类型:商业软件

国家:美国

语言:C++

启发:价差交易

目前全世界的期货交易所,有许多已经在交易所系统内直接提供了丰富的价差合约(比如大商所的豆粕跨期组合),方便交易员直接进行价差交易。

但这类价差合约正因为交易太过方便导致竞争非常激烈,获利的空间也相对较小。许多情况下,交易员需要根据自己的经验和模型构建的非标准价差组合,才能找到更多的获利机会。

TT X_Trader是一款由Trading Technologies(缩写TT)公司推出,专门针对复杂价差交易的专业系统。在Google上搜索最常看到的就是类似下面的截图:

description

上图中从右到左一共三个OrderBook盘口信息,显示的分别是CME迷你标普期货、CME迷你纳指期货以及由这两个期货合成的价差组合。

交易员可以直接对价差组合发出买卖委托,由X_Trader内部的价差执行引擎AutoSpreader来完成具体各条价差腿上的交易执行,基于主动腿成交后被动腿瞬时对冲的模式,来最小化价差交易中的瘸腿风险。

description

其中价差组合的盘口价格信息,会根据如上图中用户自定义的价格乘数、交易乘数、主动被动腿等参数,由X_Trader内部的价差数据引擎来实时高速计算,并驱动价差执行算法来自动完成交易任务。

除了能将复杂的价差组合交易简化得接近单一期货合约的买卖,X_Trader还提供了ADL(Algo Design Lab)模块给交易员,来开发针对价差组合的量化交易策略。

最神奇的一点在于:使用ADL开发策略时用户完全用不着写代码!只需要通过类似下图中的界面,拖动和连接各种代表交易策略逻辑功能的图形块,就能完成整个量化策略的开发。

description

vn.py的SpreadTrading价差交易模块,在设计上采用了接近X_Trader的业务逻辑分层:

  • LegData负责跟踪和记录最底层各原始合约的数据(价格、持仓);
  • SpreadData维护价差组合的自定义参数,以及和LegData的映射;
  • SpreadDataEngine自动实时计算价差的盘口和持仓状态数据;
  • SpreadAlgoEngine执行用户下达的价差交易算法指令(手动、策略);
  • SpreadStrategyEngine则负责运行用户开发的价差量化策略。

目前vn.py在交易层面可以说基本实现了接近X_Trader的功能,但在UI界面上还有挺大的距离,尤其是这个ADL模块,从一个交易员的角度来看真是非常非常眼馋。

 

Horizon

 

官网:www.hsoftware.com

类型:商业软件

国家:法国(不确定)

语言:Java

启发:期权波动率交易

Horizon应该是最早进入中国市场的期权做市量化平台之一,另外还有后来被Bloomberg收购了的RTS(ORC当时还没进来),创始团队来自一家法国投行的做市部门(Societe Generale还是BNP Paribas的不记得了)。

对于期权方面的量化策略(做市、波动率交易、套利等),Horizon提供了相当完备的功能支持,首先基于市场价格来实时计算隐含波动率曲面,并进行定价波动率的拟合设置,如下图所示:

description

有了定好的定价波动率(Pricing Volatility或叫Reference Volatility)后,就可以基于标的物的实时价格来计算期权理论参考价值,再结合报价价差、报单数量、持仓调整系数等参数,挂出双边买卖委托来进行做市交易

做市算法的管理界面有点类似常见的T型报价,但是有更多用于调整算法参数的表格列,同时一定要有如下图中所示的表格高亮(防止交易员眼花):

description

成交后的期权持仓风险管理,除了最基本的Delta自动对冲功能外,对于其他希腊值也需要实时跟踪计算,方便交易员随时根据市场情况来执行相应的对冲调仓操作。

同时Horizon也内置了事件驱动引擎(Esper),对于更加个性化的套利交易策略,允许交易员自行使用Scala语言(关于这个语言的选择我倒是挺想吐槽)来快速开发策略程序,当然策略监控的界面就比较简单了,只有数字和开关按钮:

description

参考Horizon的交易业务流程,vn.py内面向期权波动率交易的OptionMaster模块,把底层数据分为了4个层次

  • 标的物:UnderlyingData
  • 期权:OptionData
  • 期权链:ChainData
  • 交易组合:PorfolioData

通过更紧密的数据结构优化,以及Cython化的定价模型组件,来解决纯Python程序在期权波动率交易这种追求低延时策略上的性能问题。

对于国内ETF期权上独有的合成期货长期贴水,OptionMaster模块内也额外添加了升贴水自动拟合算法,来保证系统内Call和Put隐含波动率计算的平衡性,避免出现许多平台上的两者对不齐的现象。

考虑到大部分用户并没有做市商牌照,无法使用CTP等柜台提供的ReqQuoteInsert双边报价函数,因此OptionMaster自带的电子眼交易算法ElectronicEyeAlgo只支持见价主动成交。当然,对于有做市需求的机构用户也可以自行修改后实现双边报价的做市功能。

 

同样,有什么想问的问题或者分享的内容,欢迎在文章下方留言。本期我们将会随机抽取一位留言者赠送《vn.py全实战进阶 - 深入期权定价模型》课程的5折优惠券一张。

 

© 2015-2022 微信 18391752892
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

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