当对冲套利遇上价比斜率

量化君也
12904-22 13:31

作者:量化君也

题图:量化君也微信公众号


开年计划的那篇文章中有提到过,文章中的期货策略源码合计不下100套,但绝大部分以趋势型单边策略为主,对冲/套利类策略占比不高,于是乎,今年打算发掘一些这方面的策略,将策略兵器库丰富起来。

说话就要算话,这不就来了嘛,今天的主要目的就是基于交易开拓者TBQuant构建一个通用的期货对冲/套利策略模板,小伙伴们基于这个模板的原理,结合自己对不同品种间强弱判断的指标/因子,就可以构建自己的期货对冲/套利策略。

图片

在TBQuant当中,量化策略的核心构成要素就是策略单元,官方的说法是“策略单元 = 数据源 + 交易策略”,其实说白了,就是一个策略单元由若干个期货品种加上若干个要应用到这些品种上的策略公式。

对于新手而言,或是刚从TB旗舰版转过来的小伙伴,往往构建策略单元的时候,基本上都是一个策略单元设置成一个期货品种外带一个策略公式,这对于趋势单边策略来说,绝对是没有问题的,也是很好的范式,但是对于对冲/套利来说,这就不适用了,这也是很多新手小伙伴觉得在TBQuant上,这类策略很难写或没有实现思路的原因。

因为对冲/套利策略要同时考虑到两个及以上期货品种之间的强弱对比关系,因此需要在同一个策略单元之内纳入多个期货品种,然后还需要在策略公式当中,同时横向对比多个期货品种间的强弱关系,以及单独区分处理每一个品种的进出场和持仓。

听起来感觉很复杂的样子,其实跟着我的操作步骤,你就会对这类策略的构建流程有大致的了解,咱先来看一下TBQuant当中对于多数据源/多品种的处理逻辑。

在策略研究/策略交易工作区当中,新建策略单元时,一定要采用【叠加】的方式,这里以螺纹钢和铁矿石为例,因为铁矿石是螺纹钢的生产原材料,它们的价格走势之间存在强相关关系,非常适合。采用【批量】的新建方式,则是会将螺纹钢和铁矿石都单独新建到不同的策略单元中去,而不是在同一个策略单元。

图片

图片

经过上面这个步骤,咱就有了一个策略单元,这个策略单元里面有螺纹钢和铁矿石这2个期货品种,现在离可执行可回测的策略单元,就差一个策略公式,那问题就来了,在TBQuant的策略公式当中,如何区分这两个品种谁是谁呢?

这就要提到TBQuant编程当中的Range关键字了,它可以用来指定品种范围,在指定范围下计算的数据都是只属于这个品种,就连系统自动生成的持仓等数据也是只属于这个品种。

咱上面的策略单元里有2个品种,第一个是螺纹钢,那在策略公式当中的就是对应Range[0:0],第二个是铁矿石,对应的就是Range[1:1]。Range的下标是从0开始的,依次往后递增,对应的顺序就是同一个策略单元内期货品种的排列顺序。

那除了单独区分品种之外,还需要将它们的数据都放到一起判断强弱,那怎么处理呢?这个也好办,Range除了指定单个品种之外,还可以指定多个品种,咱这个策略单元的话,写成Range[0:1]就可以了。

在Range[0:1]里面,要在不同品种的数据和指标前面加上Data关键字以示区分,比如说Data0.Close代表的是螺纹钢的收盘价,Data1.Close表示的是铁矿石的收盘价,如果不加,则默认使用Data0对应品种的数据。

这个对冲/套利策略的代码框架到这里就很明朗了,需要放在一起计算的数据和指标就放在Range[0:1]里面,单独计算和处理的就放到Range[0:0]和Range[1:1]里面,所以整个策略的代码框架如下所示,以预判价差趋势扩大为例。

Params
  //此处添加策略参数

Vars
  //此处添加策略变量

Events
  OnInit()
  {
    Range[0:1]
    {
      //此处添加策略设置,比如后复权、真实价格映射等
    }
  }

  OnBar(ArrayRef<Integer> indexs)
  {
    //两个品种公共计算部分
    Range[0:1]
    {
      价差 = Data0.Close - Data1.Close;
      //此处添加若干指标计算
      预测价差走势扩大 = ...;
      预测价差走势缩窄 = ...;
      出场条件 = ...;
    }

    // 螺纹钢
    Range[0:0]
    {  

      if(预测价差走势扩大)
      {
        //做多螺纹钢
      } 

      if(预测价差走势缩窄)
      {
        //做空螺纹钢
      } 

      if(出场条件 and MarketPosition!=0)
      {
        //螺纹钢平仓
      }
    }

    // 铁矿石,开仓方向与螺纹钢相反
    Range[1:1]
    {  
      if(预测价差走势扩大)
      {
        //做空铁矿石
      } 

      if(预测价差走势缩窄)
      {
        //做多铁矿石
      } 

      if(出场条件 and MarketPosition!=0)
      {
        //铁矿石平仓
      }
    }
  }

在这个对冲/套利策略框架模板中,价差 = 品种1 - 品种2,你可以使用自己的指标判断两个品种之间的强弱关系,然后预测它们之间的价差是扩大还是缩小,如果是扩大的话,做多品种1的同时做空品种2,缩小的话,做空品种1的同时做多品种2。

发现没有,对于只有2个品种的对冲/套利,这跟品种叠加的先后顺序无关,是Data0对应螺纹钢也行,Data1对应螺纹钢也可以,交易逻辑都是一样的,所以不用纠结期货品种的先后添加顺序哈。

对于具体的两个品种之间的强弱判断预测,我这里提供一个简单的思路,就简单称之为“价比套利策略”吧,价比(价格比率)就是两个品种之间价格相除,然后再计算价比的斜率,大致的交易逻辑是:价比创近期新高且斜率放大,做多品种1做空品种2;价比创近期新低且斜率缩小,做空品种1做多品种2。出场则采用价比吊顶回落的出场方式,比如价差扩大时,价比在不断增大不断创新高,等从高点回落到一定幅度则出场,价差缩小也是同理。

以刚才说的螺纹钢和铁矿石为例,套上这个价比套利策略公式,回测当中使用主力连续后复权数据,做真实价格映射,使用真实价格确定交易手数,等市值对冲,当根Bar出交易信号,下一根Bar开盘交易,回测净值曲线如下所示。

图片

除了螺纹钢和铁矿石这个套利交易对外,咱还可以拓展到别的交易对,只要它们之间存在逻辑上的相关关系就行,比如棉花和棉纱,比如沪深300(IF)和中证500(IC)股指期货,多交易对叠加还可以平滑净值曲线,在这里我选了8个交易对,它们的回测净值曲线如下。

图片

图片

好了,今天的主要内容就唠完了,对期货对冲/套利策略感兴趣的小伙伴,可以根据上面的策略代码框架模版去尝试一下,对了,补充说明一下,如果是做钢厂利润套利那种涉及到3个及以上品种的套利策略,那在写策略时一定要记住同一个策略单元中品种的叠加顺序,千万千万不要搞混了。


版权声明:文章版权归原作者所有,部分文章由作者授权本平台发布,若有其他不妥之处的可与小编联系。

免责声明:
您在阅读本内容或附件时,即表明您已事先接受以下“免责声明”之所载条款:
1、本文内容源于作者对于所获取数据的研究分析,本网站对这些信息的准确性和完整性不作任何保证,对由于该等问题产生的一切责任,本网站概不承担;阅读与私募基金相关内容前,请确认您符合私募基金合格投资者条件。
2、文件中所提供的信息尽可能保证可靠、准确和完整,但并不保证报告所述信息的准确性和完整性;亦不能作为投资决策的依据,不能作为道义的、责任的和法律的依据或者凭证。
3、对于本文以及文件中所提供信息所导致的任何直接的或者间接的投资盈亏后果不承担任何责任;本文以及文件发送对象仅限持有相关产品的客户使用,未经授权,请勿对该材料复制或传播。侵删!
4、所有阅读并从本文相关链接中下载文件的行为,均视为当事人无异议接受上述免责条款,并主动放弃所有与本文和文件中所有相关人员的一切追诉权。

0
好投学堂
第一时间获取行业新鲜资讯和深度商业分析,请在微信公众账号中搜索「好投学堂」,或用手机扫描左方二维码,即可获得好投学堂每日精华内容推送和最优搜索体验,并参与编辑活动。

推荐阅读

0
0

评论

你来谈谈?
发表

联系我们

邮箱 :help@haotouxt.com
电话 :0592-5588692
地址 :福建省厦门市湖里区航空商务广场7号楼10F
好投学堂微信订阅号
扫一扫
关注好投学堂微信订阅号
Copyright © 2017-2024, All Rights Reserved 闽ICP备19018471号-6