专栏首页VNPY官方VNPY CTP 仿真柜台怎么用来实现CTP 程序TICK级回测
原创

VNPY CTP 仿真柜台怎么用来实现CTP 程序TICK级回测

VNPY官网 :

http://www.vnpy.cn

VNPY学习资料大全

http://www.gucps.cn

入门篇《VNPY CTP 仿真柜台怎么用来实现CTP 程序TICK级回测》 :

VNPY仿真柜台的用法快速入门可以参考这篇文章 (来自VNPY知乎官方公众号) https://zhuanlan.zhihu.com/p/166244874

VNPY专利技术保护方案:

https://zhuanlan.zhihu.com/p/171997958

另外VNPY CTP仿真柜台还有一个同类产品Virtualapi,也是获得下方提到的第四类回测方式的专利授权的,受国家专利法保护。

http://www.virtualapi.cn

VNPY产品扎根于国内合规期货市场和A股市场,为金融机构和量化爱好者提供全系列的量化产品线, 包含了历史行情数据、实时行情数据、仿真回测、商业化软件(资管系统、跟单软件)。 其中推出的VNPY For CTP接口仿真柜台是VNPY官方的主打产品,这款产品的设计理念是“精细化回测”,自2018年推出以来受到了广大量化交易爱好者的喜爱,尤其是职业量化交易团队和量化私募基金的青睐。

VNPY仿真回测系统在现有3类回测方案基础上开创性的提出了第4类回测,并提供了VNPY仿真回测柜台,本产品受国家专利法保护,但可以免费下载和使用。

当前市场上包括VNPY仿真柜台回测系统在内的四类回测架构:

(1)商业软件实现回测,这里软件开发策略比较容易,也比较完善,但是缺点也很明显,有些策略无法在该平台实现,而且自主设计功能非常有限,比较适合开发能力一般的交易者和对程序化要求较低又愿意付费使用的交易者。 这类平台的策略内容本质是文本内容,客户端加载策略后,将文本字符串进行分词处理,将不同的单词映射到程序相应的函数模块进行分析,所以执行效率较低。

(2)在线回测平台 这类是基于网站的回测,使用编程语言以Python,javascript为主,可以通过在网站提交代码脚本,在服务商的服务器上进行回测,由此可见这类回测的CPU硬件资源是极其有限的,很难实现基于TICK的高精度回测。 由于开发的策略使用的方法依赖于平台提供的函数方法。所以在不同平台的函数方法并不是一致的。 而且最为关键的是,代码不是本地运行的,而是依赖第三方平台的方法,而且策略本身没有保密性可言;

(3)各种基于原生API的回测框架,一般提供了第三方方法,而不是原生方法,所以这类回测很难移植到其他框架和平台运行。

(4)为了克服上述三种量化交易回测技术存在的不足,VNPY的VirtualApi仿真API的回测技术出现了,在不改变原实盘策略代码情况下,仅通过模拟原生API的方法和库文件来实现仿真回测。

具体来说,就是通过模拟原生交易API和行情API,例如通过模拟头文件的定义、模拟原生API的库方法的定义,使得回测和实盘交易代码,只需简单的将实盘代码替换为仿真API,对底层代码可不作改动或改动较少即可实现回测和参数优化。

VNPY开创的仿真回测柜台量化回测方式,主要针对有一定编程能力的程序化交易者,如果已经基于原生API完成了策略开发,再转到VNPY仿真柜台实现回测是非常容易的,只需2分钟即可将实盘程序化交易代码转为回测程序,无需修改原有实盘策列代码。

原理上说,就是因为这类量化交易回测技术是对原生API仿真的技术,不采用第三方方法,所以决定了VNPY仿真柜台所采用的基础支持市面上所有基于此api的所有框架。

此外,VNPY仿真柜台倡导的“精细化回测”彻底改变了回测流程,可以更精准方便的微调策略。

金融行业有句名言:如果不能募资,则量化交易投资生涯毫无意义。

我有一个程序员朋友,自2015年偶然受一个职业炒手之托,开发一个CTP抢单程序而接触到CTP接口, 他在CTP研发上投入大量时间,到了2016年他接触到了投资人,投资人让他管理了4000万资金,利润条件是55分,通过CTP接口程序化交易,他的年化收益也做到了50%,到了2018年他的投资人又追加投资到1亿规模 。

由于他的期货程序化交易业绩在期货保证金中心是可以查询证明的,很快期货公司又找上门,又为他发了几千万的产品。

由此可见,募集资金一定不能脱离中国的金融环境,所以一定要在国家认定合规的市场里进行,这样才是正道。

相反的,在非合规市场,不仅募集资金困难,还涉嫌违规,接口也不完善,白白浪费了很多时间。

目前期货的量化交易环境是比较完善的,上海期货交易所推出了免费的CTP API接口多年,也是影响最大和使用最广泛的期货API接口,一大批期货交易爱好者从接触CTP的那一刻起就义无反顾的开始了自己的量化交易之路。

对有一定编程能力的开发者,我们建议基于CTP 的API这类 自主开发程序化交易系统,有利于实现更复杂的策略、更灵活的交易操作。即可选用C++、Python、JAVA、C#等编程语言。 此外,如果选用C++这样的编译性语言,相比脚本语言,可以直接把程序编译成机器可读的二进制代码,因此效率和安全性都更高。

CTP小白到实盘3个步骤

(1)通过SIMNOW模拟账户开发测试,这一个阶段主要是功能测试;

(2)通过VNY仿真回测柜台做功能测试,这一个阶段主要是策略验证;

(3)实盘交易;

如果需要先开发和测试,不用实盘交易的话,可以采用上期CTP的模拟账户进行测试和开发,相关网址链接如下: 上海期货交易所SIMNOW CTP模拟账户注册地址。

simnow.com.cn/

CTP最新的原生API和说明文档也可以从这个网站下载

http://www.simnow.com.cn/static/softwareDownload.action/

上期CTP simnow模拟账户官网

http://www.simnow.com.cn/static/softwareOthersDownload.action/

CTP实盘、SINOW模拟账户、VNPY CTP仿真柜台 三者成交机制的异同

CTP同时支持期货实盘账户和simnow模拟账户,采用simnow模拟账户和期货实盘账户开发出的程序是通用的,但simnow模拟账户和实盘账户成交和结算机制还有几点不同: (1)成交机制不同,模拟账户采用对手价成交,实盘在盘中撮合成交。

(2)模拟行情比实盘行情慢很多,因采用模拟行情同时采用模拟交易,所以对信号和盈亏不会产生实质影响。

(3)资金容量对滑点的影响 模拟账户成交不需要考虑资金容量导致的滑点,实盘账户在交易时因为会影响盘口,可能会导致滑点产生。

(4)模拟行情除了和实盘一致的行情服务以外,还提供了24小时服务器进行测试,但不提供结算,适合用作CTP开发时的功能测试。 如果需要实盘账户,请去各大期货公司开户。获得几项信息即可接入CTP进行交易

  1. . brokeid
  2. . 投资者账户
  3. . 投资者密码
  4. . 期货公司交易服务器IP和端口号
  5. . 期货公司行情服务器IP和端口号

VNPY CTP仿真柜台和SIMNOW是类似的。

VNPY CTP仿真柜台可以看作本地部署的SIMNOW+快速TICK回放+资金曲线绘制功能。

TICK数据全部存储在本地的。

此外VNPY CTP 仿真柜台可以通过修改setting.ini来自由设置滑点和手续费,对于账户接入信息(brokeid、投资者账户、投资者密码、期货公司交易服务器IP和端口号、期货公司行情服务器IP和端口号)随便填写就可,回测流程中只按此返回,并无其他实际意义。

VNPY仿真柜台和市场上其他量化交易框架的区别

以上期所CTP为例,只提供原生API就是C++的,这些API大多是采用C++封装的DLL或SO库文件。

由于原生API对策略开发者而言并不友好开发周期较长,所以涌现了一批Python技术为代表的量化交易框架二次包装的量化交易框架。市场上这些CTP开源框架,但本质上都是通过调用原生C++的库文件来实现,

比如Python 框架可能用的是Ctypes技术,JAVA则可能用的JIN或swig技术封装。

这些框架相对于原生的C++ API,是更偏上层的东西,提供了大量第三方方法、函数、类等,这些方法、函数、类是这个框架所特有的。

而VNPY CTP仿真柜台是和CTP api是同一个级别的底层库,设计原则是尽量不采用第三方方案,以CTP标准进行设计。

所以市场上所有针对CTP的框架,其实都可以用在VNPY CTP仿真柜台上。

VNPY CTP仿真柜台开创的全新的量化交易回测方式,兼容几乎全部的第三方CTP框架。

支持的编程语言和CTP框架

对于各种CTP 编程语言框架,例如Python框架、Java框架、C#框架等,VNPY仿真柜台的实现是一样的,因为这些语言的框架本质上还是调用C++的库文件。 支持各种自编CTP程序和各种编程语言框架,例如C++、Python、JAVA、C#等。 支持 VN.PY、 PyCTP等所有框架和自编程序。 上海期货交易所只提供了 C++原生DLL,对于其他语言均是第三方封装了,只能称为CTP框架。

支持的操作系统

VNPY底层仿真回测系统支持Windows操作系统,版本要求Windows7、Windows2008及以上。

如何理解VNPY官方倡导的“精细化回测”?

VNPY官方认为,量化交易回测不仅要测试参数,更要测试策略逻辑和子方案组合。

所谓精细化回测,就是可以追溯到每一笔交易记录的信号触发变量值和逻辑分支,这一点对于CTP开发者通过日志功能尤为容易实现,而且VNPY的仿真柜台文件自带交易记录写入功能,至于资金曲线图形化显示功能则考虑到需要尽可能比较不同策略子方案资金曲线的不同你,则尽量不要显示文字,而对于K线图表对精细化回测而言是不太重要的。

对精细化回测的基础条件则必须是VNPY的TICK级回测,而这一点在下文提到的前3类回测类型中基于数据量庞大和带宽成本的原因都很难实现,而VNPY提出的仿真柜台方案开创性的完美的解决了这个问题。

VNPY仿真回测柜台的这种现实方式也许对一些喜欢K线显示交易信号的开发者不习惯 ,但实际上只有VNPY倡导的这种资金曲线显示方式才能更好的表达出量化交易方案微调子方案之间的优劣的异同。

VNPY仿真回测系统解决了第三方回测框架各自一套费标准方法的问题,通过对原生API进行仿真来实现回测,这样做的好处是可以提供和原生API一致的方法,不再依赖于平台,所以VNPY仿真回测系统支持市场上绝大多数的CTP框架。

VNPY并没有采用市场上各种量化交易框架常用的架构,由于VNPY仿真回测柜台是定位于TICK级的仿真回测,还考虑兼容市面上接口下的各种框架,最终VNPY开创的独特的回测方式成为一种全新的量化交易回测方式。

VNPY仿真回测目前主要提供了基于CTP接口(支持商品期货、股指期货、商品期权、股指期权)的仿真。

VNPY仿真柜台实现量化回测对比前三类量化软件回测具备极大的优势,使得量化交易真正实现的精细化回测的付诸于实施,可以真正避免了和真实盘口不一致的情况,几乎100%还原了真实的价格变化,是真正面向职业开发者的好产品。

常见量化交易软件回测曲线是这样的

常见量化交易软件常见回测曲线

VNPY仿真回测柜台资金曲线是这样的

通过下图可以看出,VNPY仿真柜台可以精确的反映了TICK级回测的精度资金曲线分时图,和实盘资金曲线取样比较达到了99.9%的一致

VNPY仿真回测柜台资金曲线

采用VNPY CTP仿真回测柜台测试策略逻辑和子方案组合实施例:

下面以一个策略模板基础上开发的二个子策略做资金曲线对比 回测3分钟(4小时TICK数据),趋势策略采用了A,B2套不同的止损方案对比 合约上海期货交易所 ni2003 2019年11月4日~2019年12月17日这段时间的TICK数据进行回测,资金曲线图如下所示:

回测四小时TICK 数据

回测数据2019年11月4日~2019年11月7日

回测数据2019年11月4日~ 2019年12月17日

由上面的资金曲线分时图进行对比和分析,可以很容易得出结论,B方案更合理,B方案收益比A方案收益更高。

如果以B方案基础,再增加一个交易条件(开仓条件、平仓条件、止损条件、止盈条件、过滤条件等),就可以进一步产生B1方案、B2方案、B3方案、B3方案等,接着再做一次资金曲线的对比回测,获得最优方案。

如此循环往复若干次后,就可以得到一个非常合理完美的策略。

这种通过VNPY开创的第四类仿真回测“精细化回测”所倡导的研发策略的方式,相比仅仅靠参数优化的方式是更加容易开发出优秀量化交易策略的。

该大类趋势策略,通过30组子方案得测试优化,获得效果最好得7个子策略资金曲线如下,可完美用于实盘

通过下面2张流程图(原生API典型C++策略接入实盘架构、 VNPY仿真柜台实现回测架构 )可以很直观的理解VNPY仿真柜台和CTP原生API的区别,进而理解VNPY仿真柜台开创的第四类回测方式。

原生API典型C++策略接入实盘架构

VNPY仿真柜台实现回测架构

无论是你自己开发的CTP系统还是CTP框架,甚至是快期V2交易客户端,都可以通过替换dll方式接入VNPY仿真柜台柜台。

VNPY仿真柜台具备以下优点:

(1)回测精度高,比第二类回测精度高出2个数量级,也就是100倍左右; (2)性能好,可非常容易通过提升硬件来加快回测速度; (3)兼容性高,不依赖第三方方方法,原有策略转回测极容易,功能开发的自由度高; (4)用户覆盖面广,支持C++框架,Python框架,JAVA框架,C#框架在内的所有API框架。支持多种语言。不管你是C++程序员,还是Python程序员,JAVA程序员都能很好满足您的代码回测要求; (5)策略保密性好,比如C++开发的策略,可以采用加密壳进行保护,策略在指定的本地计算机或托管服务器运行,可做IP绑定、硬件绑定、账户绑定,所以安全性极高。

VNPY仿真回测这项底层仿真回测技术是和编程语言无关的,并且没有第3方平台提供的方法,可以在不修改原有代码的前提下实现回测。

VNPY仿真回测支持各种自编CTP程序,例如C++、Python、JAVA、C#等,同时还支持各种编程语言框架和自编程序。几乎是无所不兼容,这样的产品避免了CTP策略开发者过于依赖平台的窘境。

大多数基于K线的回测都会丢失不少细节的,会产生较大的回测误差,会误导策略开发者。

此外,由于VNPY仿真回测是基于TICK的回测,比大多数第三方软件回测精度高2个数量级以上,实现更精细化的回测。

可以真正帮助策略开发者掉入量化交易回测陷阱。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • restapi(4)- rest-mongo : MongoDB数据库前端的httpserver

    完成了一套标准的rest风格数据库CRUD操作httpserver后发现有许多不足。主要是为了追求“通用”两个字,想把所有服务接口做的更“范generic”...

    用户1150956
  • C# 不能用于文件名的字符

    在 Windows 有一些字符是不能作为文件名,尝试重命名一个文件,输入/ 就可以看到windows 提示的不能作为文件名的字符

    林德熙
  • 三星“人造人”项目曝光!效果太逼真,可自主生成新表情、动作和对话

    这是一个“数字虚拟人”(artificial human)项目,效果非常逼真,官方效果展示如下:

    量子位
  • 克隆虚拟机的注意点

    在虚拟机中的 “管理”——>克隆虚拟机 更改虚拟机的IP,配置文件为 /etc/sysconfig/network-scripts/ifcfg-ens32 中 ...

    运维小白
  • JS构造函数内的方法与构造函数prototype属性上方法的对比

    为了阅读方便,我们约定一下:把方法写在构造函数内的情况我们简称为函数内方法,把方法写在prototype属性上的情况我们简称为prototype上的方法

    前端博客 : alili.tech
  • 构造函数内的方法与构造函数prototype属性上方法的对比(转)

    本文的目的是让大家理解什么情况下把函数的方法写在JavaScript的构造函数上,什么时候把方法写在函数的prototype属性上;以及这样做的好处.

    山河木马
  • 排错-LR安装No Background bmp defined in ...的解决办法

    LR安装No Background bmp defined in section General entry BGBmp的解决办法

    授客
  • 粗读《Visualizing and Measuring the Geometry of BERT》

    BERT和类似的语言模型到底学会了何种语言的关系和模式,一直是大家想知道的,本文尝试从几个实验探索这一点。

    段清华DEAN
  • Flooded! UVA - 815 (sort排序)

    _DIY
  • Android上的自定义字体 - 通过XML进行动态字体选择

    code_horse

扫码关注云+社区

领取腾讯云代金券