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

 

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

 

上一篇文末的抽奖福利中

获奖的朋友是:

Shirley S

请在48小时内通过公众号留言联系领取奖品~

 
 

讲到中国金融市场的量化交易发展历史,绕不开的一个主题就是CTA策略。CTA这个词本身是Commodity Trading Advisor的缩写,在定义上是欧美一种交易期货衍生品为主的投资顾问,或者也可以理解为一种对冲基金的类型。

但在国内的CTA这个词,更多指的是一种以趋势跟踪(Trend Following)为主的量化交易策略,交易品种也同样是期货。因为其门槛较低(相对于多因子、期权波动率等策略),CTA策略大概2010年前后就开始在国内市场上流行起来。

虽然没有做过特别正式的统计,但CtaStrategy无疑一直是vn.py平台内用户量最大的量化应用模块。所以在这第二篇文章中,就来讲讲和CtaStrategy相关的两个项目:CTP APIMultiCharts

 

CTP API

 

官网:www.sfit.com.cn

类型:交易接口

国家:中国

语言:C++

启发:数据定义

CTP是上期技术公司推出的一套期货交易柜台系统,目前大概70-80%的期货公司都已经上线,其整体架构如下图所示:

description

用今天2020年的眼光来看,CTP柜台在交易方面的技术优势可能已经不那么明显,但是它的交易接口CTP API却走得远得多,甚至在一定程度上成为了国内金融市场的量化交易接口设计标准,类似FIX协议在欧美的地位。

究其原因,个人观点可以总结为代码精简和功能完善两个方面。

首先,不管行情还是交易,接口中都只包含两个大类:

  • API类

    • 提供主动函数,用于发送请求到服务器
  • SPI类

    • 提供回调函数,用于接收服务器的回报

没有麻烦的数据打包器、解包器,也没有消息客户端、主推订阅者,更没有一大堆的配置选项(授权文件、加密签名、缓冲区大小......),只有简简单单的两个类,不管哪家期货公司几乎都是完全一致的配置,做到了真正的标准化接入。

其次,在业务数据的定义上,不像恒生T2SDK等消息收发类接口需要查看Excel文档,才能知道代码要怎么写(还特别容易掉坑),CTP API则是采用了Struct结构体的定义形式,开发者只需看着.h头文件中的内容就能快速完成代码开发。其中最核心的业务数据结构,甚至两只手都能数的过来:

  • 主动请求

    • 登录请求
    • 下单请求
    • 撤单请求
  • 被动回报

    • 合约信息
    • 行情信息
    • 委托信息
    • 成交信息
    • 持仓信息
    • 资金信息

vn.py的底层接口设计,整体上借鉴了CTP API的风格。通过vnpy.trader.object定义了所有的标准数据结构,如ContractData、TickData、OrderRequest等,通过vnpy.trader.gateway定义了标准对接基类BaseGateway,从而实现将所有不同类型的接口(C++、Python、REST、FIX等)统一对接到vn.py系统上层的量化策略应用。

 

MultiCharts

 

官网:www.multicharts.com

类型:商业软件

国家:美国

语言:C#

启发:CTA策略

MultiCharts(缩写MC)是一款主要针对CTA类策略的量化交易平台,其创始人Dennis Globa曾经也是TradeStation(缩写TS,另一款起源于1991年的量化交易平台)的忠实用户。但因为觉得TS的功能有所不足(数据源限制、没有组合回测等),所以在2005年决定自立门户推出了MC,并且在策略开发语言上选择和TS保持兼容,使用经典的EasyLanguage语言。

EasyLanguage语言的特点,用一句话概括叫做:用普通英语来写量化策略。什么意思呢,看一行代码:

buy 2 contracts this bar close;

几乎不需要去学什么编程语法,你也能看明白这是要在当前K线收盘点买入2手合约。

简单易用的EasyLanguage让用户能够很快把策略代码给实现出来,同时MC也提供了许多强大的历史回测和参数优化功能:

description

逐日盯市的回测曲线

description

200个多个回测统计指标

description

参数优化结果的3D绘制

准确的历史数据回测,是CTA策略开发过程中最为重要的环节。所以vn.py的CtaStrategy模块在历史数据回测上,采用了和MC一致的计算逻辑,列举一些关键点:

  • 委托类型

    • 限价单(常规交易)
    • 停止单(突破交易)
  • 成交规则

    • T时刻下单,只能在T+1时刻后成交
    • 支持K线内部撮合成交,而非只能以收盘价成交
    • 策略只能下单和撤单,无法控制委托成交与否
    • 委托成交价格,由回测引擎基于撮合规则计算

同时也结合Python语言的优势做了额外改进:

  • 调用下单函数后,会立即返回本地委托号,用于实现细粒度委托挂撤单管理(回测+实盘)
  • 提供on_tick/on_order/on_trade等回调函数,允许用户获取交易底层数据,而不仅仅是K线和持仓
  • CTA策略以Python类的形式存在,采用面向对象的编程模式,可以实现复杂嵌套的策略逻辑(例如海龟的开仓过滤)

 

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