CTA策略之--基于Bollinger通道的日频商品期货趋势策略
由qxiao创建,最终由gaojiawei 被浏览 96 用户
引言
目前国内CTA策略和基金发展的如火如荼,截止2021年初,全球对冲基金行业管理的总资产为8263亿美元,其中CTA基金的总资产高达3015亿美元
截至最新数据,目前国内私募中有接近7000只产品正在使用CTA策略,其规模的扩张速度是令人震惊的。同时令人关注的即是他扩张速度的背后惊人的绝对收益的挖掘能力
本文就CTA策略最基本的趋势策略着手,介绍基于动量理论中最经典的Bollinger通道策略
策略概览
正如引言所讲,本文所介绍的策略的根本思想来自于经典的动量理论–Bollinger通道,并在其基础上参考了各种业界关于风险控制、资金管理、杠杆调整等方面上的细节处理,优化后得到的一个日线上的商品期货CTA趋势策略
下面对整个策略构建中可能会涉及到的几个方面进行简单的介绍:
品种选择
我国目前期货全市场共有70个品种可供交易,整体来看期货市场已经颇具规模
但是根据不同交易所和品种类型,每个期货品种会有着独特的交易属性。所以在策略构建时,对品种池进行筛选也是一项必要的工作
因为金融期货属性(包括品种宏观因素、政策因素以及投机因素等)与商品期货的不同,所以在此策略中已经将金融期货所涉及到的6个品种剔除掉
并且在该策略当中,我们也不会完全将这上述三类品种池完整的放入策略,我们会对品种进行固定周期的筛选,即每过一段时间,我们会根据相应标的池当中的所有品种进行过去半年或一年的平均交易量的排名,过滤掉排名靠后不活跃的品种,只对排名靠前相对交易活跃的品种进行交易
策略频率
作为经典的CTA趋势跟踪策略,Bollinger通道的策略逻辑所能应用到的策略频率是有着一定的广度的,1分钟、15分钟、60分钟、日线甚至周线上,都是可以对该策略进行构建的。本文中所介绍到的策略频率为日线。
策略逻辑
作为主流的趋势跟踪策略,Bollinger通道CTA策略的整体逻辑其实十分简单,其主要思想就是围绕布林带的三个基本指标构成:
- 中线:N日价格均线
- 上压力线:N日价格均线 + a * N日价格标准差
- 下支撑线:N日价格均线 - a * N日价格标准差
根据这三条移动轨道线,可以制定出一个常用且效果良好的趋势跟踪策略:
- 价格上穿上压力线的时候,从动量理论角度是形成了向上趋势的通道突破走势,故进行开多仓信号的触发
- 价格下穿下支撑线的时候,形成了向下趋势的突破,故进行开空仓信号的触发
- 在多仓或空仓持有阶段,价格下穿或上穿中线时,认为价格已经回归,故作平仓信号的触发
资金管理
在基础策略逻辑构建基础之上,我们对策略中每个品种所涉及到的资金分配进行了细节上的处理,其中包括杠杆率调整、波动率调整、止盈止损逻辑以及开仓信号调整等
杠杆率调整
使用到的杠杆率调整是基于趋势CTA策略中常用的ATR指标管理方法。其中,ATR(Average True Range)是一个被用来衡量一个品种真实波动率的指标,所以当ATR值越高,我们认为该品种的真实波动越大,故常见的策略中很多都会利用此指标对每个品种的杠杆系数进行反向控制
此策略中,对于杠杆率的调整用到了基于ATR指标的衍生指标,我们称之为真实低波动率指标 -- Leverage ATR,具体计算方式参考下图:
与常见ATR指标不同的地方,在于Lev_ATR对ATR进行了倒数并乘以了一个价格以及预期波动率系数(即图例中的0.5%)
这么做的原因在于处理之后的指标能更直观、正向的反映出一个单位的风险可以带来多少的真实波动,所以一般情况下,我们会直接将调整计算后的Lev_ATR指标作为每个品种的开仓倍数
由于对整体策略波动率控制的考虑,我们对该指标进行了裁剪,将品种的最大杠杆系数限制在4倍
波动率调整
这里的波动率是指整个策略的波动率,即我们会根据策略过去一段时间的绩效表现进行杠杆率的二次调整。这里用来衡量绩效表现的指标可以为策略收益已实现波动率、绝对收益率、策略收益序列方差等
调整后的品种开仓杠杆率如下图: \n
其中,在计算波动率调整的系数Mul_Vol的时候,我们需要提前设定一个对整体策略杠杆的预期:
止盈止损逻辑
根据Bollinger通道策略的独有特性我们可以得知,在基础策略逻辑中已经包含到了止损逻辑,即当价格回归中线时的平仓信号处理
但是传统的Bollinger通道策略缺少对止盈信号的处理,于是在原有的三条线基础上可新增了两条止盈轨道线,即在原有的上下轨道线与价格标准差相乘的系数的基础上进行扩宽
比如,上下轨道线中的系数为2或者3,所以在此基础上,止盈轨道线可以做到5到10倍的标准差。此逻辑可根据自有策略逻辑进行添加,并不是必需
开仓信号调整
传统策略当中,每当触发开仓信号之后,都会对该品种进行一个固定单位的开仓手数操作。但在商品期货品种当中,大部分品种都是具有一定的周期性和主力合约切换的特性,所以如果能通过某个指标来控制或者判断未来该品种的开仓信号质量的话,就能很大程度上对策略的波动率和回撤起到良好的控制作用
本策略是以持仓量在过去一段时间内的变化量作为该指标的,即当OI_pct大于1的时候,我们认为未来该品种的持仓量有继续扩大的趋势,即保持正常的开仓手数作为信号;而当OI_pct小于1的时候,我们认为未来该品种对持仓量进行继续缩小的可能性较大,为了减少策略波动,对开仓手数作减半的处理
参考资料
- 国信金工 - CTA系列专题之二:基于Bollinger通道的商品期货交易策略
- 兴业证券 - CTA策略系列报告之一:顺势而为,趋势为王
- 国泰君安 - 量化CTA策略:理念、框架与实战
策略表现
以下策略是根据上述策略逻辑基础上进行构建的。但在经过大量的回测测试和模拟交易测试之后,我们发现得到的绩效表现在日间频率上其实并不尽人意,所以对其进行了一些改造
主要改造逻辑:
- 去除根据波动率对杠杆率进行调整
- 去除根据持仓量对开仓手数进行限制
- 去除止盈逻辑
- 更改了品种筛选逻辑
上述提到的品种筛选逻辑,在原文中提到的筛选逻辑是筛选出过去半年的日均成交额超过50亿的商品期货品种作为交易合约池。但在实验过后,我们会发现根据这样筛选出来的品种其实对动量效应的解释性有限,导致会出现下图这种长时间收益持平的情况: 所以为了改善上述这种情况,我们对其品种筛选逻辑进行了重新设定,即采用趋势强度因子来进行品种筛选,跟去过去一年的趋势强度指标来决定未来半年或一年的交易合约池
- 回测时段:2010-01-04至2022-08-31
- 品种筛选:根据过去1年的趋势强度指标进行下半年的品种筛选
- 资金分配:固定每个品种可用资金根据每日总资金浮动,总资金1个亿
年份 | sharpe_ratio | calmar_ratio | returns | max_drawdown | annual_volatility |
---|---|---|---|---|---|
2010 | 1.11 | 1.38 | 0.402888 | -0.3066 | 0.3853 |
2011 | 0.42 | 0.42 | 0.087606 | -0.2096 | 0.3279 |
2012 | 0.74 | 1.46 | 0.184370 | -0.1200 | 0.2650 |
2013 | 0.38 | 0.44 | 0.047241 | -0.1420 | 0.2288 |
2014 | 2.13 | 3.99 | 0.577270 | -0.1470 | 0.2289 |
2015 | 0.62 | 0.78 | 0.108847 | -0.1618 | 0.2389 |
2016 | 1.12 | 1.43 | 0.346909 | -0.2393 | 0.3044 |
2017 | -0.39 | -0.43 | -0.123187 | -0.2216 | 0.2041 |
2018 | 0.64 | 0.98 | 0.139429 | -0.1409 | 0.2507 |
2019 | 2.14 | 4.95 | 0.537015 | -0.1206 | 0.2312 |
2020 | 1.56 | 2.87 | 0.548758 | -0.1974 | 0.3210 |
2021 | -0.97 | -0.66 | -0.237035 | -0.3505 | 0.2402 |
2022 | 0.80 | 1.10 | 0.112433 | -0.1970 | 0.3030 |
总计 | 0.71 | 0.53 | 8.6770 | -0.3843 | 0.2752 |
https://bigquant.com/experimentshare/d44ade6961054bd3bb17cd68c33ddb98
结论
对于策略的打磨是需要花大量的时间和精力的,特别是对于期货CTA策略而言,会有很多细节需要处理和改善,比如:
- 合约的移仓换月逻辑;
- 主力合约的选择;
- 品种的选择;
- 参数的优化;
- 信号触发后的委托方式;
- 等等……
诸多细节需要策略的制定者根据不同的需求进行考量,并且付诸于代码实现,再到模拟或实盘进行样本外的考察,每一步都不可或缺
\