认识期货之前,得先理解什么是“现货”。
在金融市场中,“现货”是指能够通过买卖交易,立即转换所有权的“实物”。
期货:买卖双方通过签订合约,跨越时间在“未来”完成交易的方式。
特点 a:买卖合约
期货通常以标准化合约的形式,集中在期货交易所,进行买卖。
现货交易的对象是“实物”,但期货的交易对象是合约(合同)本身。
特点 b:以小博大
在投资期货时,也需要缴纳一定的保证金和手续费,对象是期货交易所。
保证金的比例不是固定的,目前我国的最低保证金为交易金额的 5%
。
这种以小博大的方式,就是金融市场常说的“杠杆”。
特点 c:双向交易
和一般的股票市场不同,期货可以买多也可卖空。甚至,你可以既买多也卖空。
如果你觉得未来的价格是上涨(看涨),那么就可以做多,开多单,买入合约。
如果你觉得未来的价格是下跌(看跌),那么就可以做空,开空单,卖出合约。
它执行的是当日无负债结算制度,当天结算所有合约的盈亏。
保证金不足或者在规定时间内没有补足,交易所就会对其进行强制平仓。
若账户里的保证金直接亏损且无法追加保证金,被强平,我们称为“爆仓”。
若强平之后,依然出现倒欠钱的情况,我们称为“穿仓”。
期货的平仓就是手里有“做多合约”就强行卖出合约,如果有“做空合约”就强行买入合约。
做多
和做空
是两个相对的概念。
做多
,是通过股价的上涨盈利,而做空
,靠的是股价下跌盈利。
因而在期货市场,无论是上涨还是下跌趋势,都有投资者从中赚钱。
特点 d:多样性
市面的期货种类也逐步丰富,大致可分为商品期货和金融期货。
像黄金、农产品、原油一类属于商品期货,较为流行的金融期货有外汇、利率等。
不同类型的期货,所要缴纳的保证金比例也不一样。
CTA(Commodity Trading Advisor),中文翻译为“商品交易顾问”。
原指代美国交易农产品期货的顾问,也被称作“管理期货”,由 NFA(全国期货业协会)认定,并在 CFTC(商品期货交易委员会)注册,监管的投资经理人。
一般是指通过给客户提供期权、期货方面的交易建议,或者直接通过受管理的期货账户,参与实际交易来获得收益的机构或个人。
随着商品期货市场的发展,CTA 的业务范围也在扩大,CTA 的内涵也不断充实。
现在,人们提到 CTA,有着多种含义:
1)指代标准定义的商品交易顾问;
2)指代 CTA 基金,也就是进行期货管理的基金;
3)指代机构或者个人所使用的策略;
4)指代投资于期货的资产管理产品。
现在用一句话来概括就是:CTA 是期货行业中的一种基金管理方式
。
CTA 策略又称“管理期货策略”,是指在期货市场利用期货价格变动趋势获利的一种投资策略。
CTA 交易策略有以下几大特点:
1)与股市的相关性低。CTA 策略的主要标的是期货市场的各个品种,这种底层资产本身就与传统市场差异较大,产品之间的相关性也很低,有利于分散风险;
2)保证金交易制度。由于期货市场采用保证金交易制度,各不同品种通过保证金交易,可以实现数倍乃至数十倍的无成本杠杆;
3)具有危机 Alpha 的“保险”作用。因为期货是双向交易的机制,所以 CTA 可以跟随行情趋势,做多或做空标的来获取收益。
CTA 策略大致可分为两类:套利类策略和趋势跟踪策略。
主要依赖不同金融产品价格之间的稳定关系,根据品种间的价差在“某个范围”内的波动,通过“买卖价差”进行获利。
套利策略的主要特点是“赚胜率高的小钱”,每笔交易的确定性较高,盈利相对较小。
本质上,它是一种反趋势(与主流趋势相反)的策略,和趋势跟踪策略互补
常见的套利策略有:期现套利
、跨期套利
、跨市场套利
、跨品种套利
。
目前市场上流通较广的 CTA 策略,主要以趋势类策略为主。
趋势策略的盈利依赖于市场的波动性,捕捉市场单方向运行的行情。一旦市场出现大方向性的波动时,该类策略的收益会较高。
但是当市场较为平稳、没有明显的方向性波动,这类策略就对市场的变化不够敏感了,也难以发挥他们的作用。
所以,做好止损也是该类策略中的重要环节。
趋势策略的主要特点是“亏小赚大”。
CTA 的趋势策略会根据趋势级别不同,将趋势类策略大致分为日内策略以及日间策略。
所谓的日内策略,是指一种短期交易策略,一天结束时平仓,从价格的小幅波动中获利,更关注市场短期(一天)变动。
而日间策略则相反,通常是隔夜持仓,也可以是隔周/月持仓,从市场大的行情和趋势中获利。
日内趋势策略主要是通道突破类策略。
常见的日内策略有 R-Braker 策略、Dual Thrust 策略、菲阿里四价策略、空中花园策略。
这几个常见的日内策略都属于通道突破策略,核心都在于通道上下轨的确定
日间趋势策略这类策略大体可分为:
1)通道类策略。一般根据确认的价格中枢,以及计算得到的波动范围,确定一个通道的上下轨,价格突破上下轨则认为是某一趋势,可以进行交易。
2)信号类策略。主要依赖一些技术指标,以确认价格的趋势进而指导交易。
常见的日间策略还有 Aberration 策略、ATR 策略、动量策略、肯特纳策略。
肯特纳通道,英文为 Keltner Channel,是 Chester Keltner 在二十世纪六十年代首次推出,最开始应用于期货,后经过演变和改良,也逐步推广于股票、外汇等各大金融市场。
它由上轨、中轨、下轨三条线组合而成(也称上通道、中通道及下通道),是一种通道类策略。
肯特纳通道的计算方式如下:
1)中轨:N 日(收盘价+最高价+最低价)/3 的指数移动平均线 EMA;
2)通道宽度:N 日 ATR * k;
3)上轨:中轨 + 通道宽度;
4)下轨:中轨 - 通道宽度。
注:k 为 N 日 ATR 的倍数,该变量越大,通道的宽度越大。
用一句话总结:肯特纳通道的中轨为价格数据的移动平均线(EMA),而通道的上下轨由中轨叠加平均真实波幅(ATR)所构成
。
与布林带通道对比:
公式出现了两个陌生的技术指标:EMA
和ATR
。在 ForTrader 中,你可以直接调用专门的类与函数,计算出结果。
EMA
原文为 Exponential Moving Average,直译过来,就是指数移动平均值,也称之为 EXPMA 指标。
当天的 EMA 值 = 近期数据权重 * 当前价格 + 剩下的权重 * 前一天的 EMA 值
。
ATR
是一种震荡类指标,英文全称是 Average True Range。
其中,Average 是平均的意思,True Range 翻译过来是“真实波幅”(TR),整体译为“平均真实波幅”。
是指过去一段时间,真实波幅的指数移动平均值,用于描述价格的波动情况。
ATR 的计算公式要分两步来理解,一个是 TR
,另一个是 EMA
。
首先,最关键的部分,是TR(真实波幅)的计算,它的计算公式如下图所示 👇。
计算当日的 TR
值,至少要用到两根 K 线,分别是今日和前一日的 K 线。
如图所示,当前交易日为阴线,前一个交易日为阳线。
真实波幅就是从以下三种情况中,找到它们波动幅度最大的值,获取幅度方法就是计算数值之差的绝对值。
情况 ① 是:(当日最高价 - 当日最低价)的绝对值;
情况 ② 是:(当日最高价 - 前一日收盘价)的绝对值;
情况 ③ 是:(当日最低价 - 前一日收盘价)的绝对值。
上图中,情况 ① 的波幅最大(线段最长),
所以当前交易日的真实波幅就是 ① 的值:
(当日最高价 - 当日最低价)的绝对值。
根据市场价格的不同走向,肯特纳通道策略能发出不同类型的交易信号。
当中轨
处于上升趋势,且市场价格
突破上轨,表示此时的市场处于强势,上涨趋势将延续一段时间,可以做多。止损条件设置为价格向下突破中轨。
当中轨
处于下降趋势,且市场价格
突破下轨,表示此时的市场处于弱势,市场价格大概率将持续下跌一段时间,可以做空。止损条件设置为价格向上突破中轨。
综上,根据价格与肯特纳通道上中下轨的不同突破情况,肯特纳通道策略有以下几个重要的使用方法:
1)如果当日的中轨值大于前一日的中轨值,并且收盘价向上突破了上轨,那就发出做多信号;
2)如果当日的中轨值小于前一日的中轨值,并且收盘价向下跌破了下轨,那就发出做空信号;
3)当持有多仓的时候,收盘价跌破了中轨时,则发出平多信号;
4)当持有空仓的时候,收盘价上穿了中轨时,则发出平空信号。
下图为使用肯特纳策略,产生做多信号(买点)、平多信号(卖点)的示
指标模块主要实现以下三个功能:
period
为周期参数,主要控制肯特纳通道中轨 EMA 和 上下轨 ATR 的周期。
将该参数设为 10,意思是计算均值的滑动周期数为两周交易日。
k
为倍数参数,用于控制肯特纳上下轨与中轨的距离。
将该参数设为 1.5,意思是中轨与上下轨保持 1.5 倍 ATR 的距离。
参数名称period
和 k
可以自定义,但要保证后面使用该参数时,名称一致。
肯特纳通道三个指标包括,上轨、下轨和中轨。
在此之前,需要先实例化肯特纳通道类KeltnerChannel()
,传入参数:标的对象context.data
、周期period
、通道倍数devfactor
。
通过实例.属性
的方式,分别获取到肯特纳通道的上轨、下轨、中轨。
你也许注意到了,中轨(context.middle_line)和上下轨(upper_line、lower_line)的变量命名方式并不相同。
这是因为,上下轨的计算在指标模块就能结束了。但后面的择时模块将持续使用中轨数据,于是增加了context.
前缀,令其变成全局模块皆可访问的变量。
之前,我们获取“两线交叉信号”的方式,是通过判断数据序列之间的大小关系,以上穿信号为例。👇
你可以直接调用 CrossOver()
类,获取两线的交叉信号。
该类有两个参数,分别传入你想计算交叉的数据序列,以数据 1
和数据 2
为例:
当返回的值为 1.0
,说明 数据 1
上穿 数据 2
。
当返回的值为 -1.0
,说明 数据 1
下穿 数据 2
。
计算收盘价与肯特纳通道上轨的交叉信号。CrossOver()
类第一个参数传入收盘价 context.data.close
,第二个参数传入肯特纳通道的上轨 upper_line
。
如下图,为收盘价向上突破肯特纳通道上轨的情况。 👇
下图为计算的是收盘价与肯特纳通道下轨的交叉信号。CrossOver()
类第一个参数传入收盘价 context.data.close
,第二个参数传入肯特纳下通道 lower_line
。
最后计算的是收盘价与肯特纳通道中轨的交叉信号。CrossOver()
类第一个参数传入收盘价 context.data.close
,第二个参数传入肯特纳中轨 context.middle_line
。
选择期货“螺纹钢2201(RB2201)”为交易标的,只需将标的代码 "RB2201.XSGE",以列表格式赋值给 symbol_list
即可。 👇
该模块将实现肯特纳通道策略最核心的开仓逻辑。
择时模块主要实现了 4 个功能:
通过 if 条件判断语句去包含了三个判断条件:
1)当前是否无持仓:hold_size == 0
;
2)收盘价是否向上突破通道的上轨,即收盘价与上轨的交叉信号是否为 1.0:context.upper_signal[0] == 1.0
;
3)通道的中轨是否向上,即当日的中轨值是否大于昨日:context.middle_line[0] > context.middle_line[-1]
。
只有三个条件同时满足的行情,才会执行买入代码,调用context.buy()
,发送做多信号。
若上述语句无法被全部被满足,代码将执行下一个条件判断语句,即择时模块的功能二。
elif 条件判断语句同样包含了三个判断条件:
1)当前是否无持仓:hold_size == 0
;
2)收盘价是否向下突破通道的下轨,即收盘价与下轨的交叉信号是否为 -1.0:context.lower_signal[0] == -1.0
;
3)通道的中轨是否向下,即当日的中轨值是否小于昨日的中轨值:context.middle_line[0] < context.middle_line[-1]
。
如果上述条件都满足,则调用 卖出代码, context.sell()
,发送做空信号。
若上述两条判断语句都未满足,代码将继续往下执行另一条 elif 语句。
第二个 elif 条件判断语句,包含两个判断条件:
1)当前是否持多仓:hold_size > 0
;
2)收盘价是否向下突破通道的中轨,即收盘价与中轨的交叉信号是否为 -1.0:context.mid_signal[0] == -1.0
。
如果上述条件都满足,则调用 平仓代码 context.close()
,发送平多信号。
假设上述三个判断语句都不满足,代码将会执行最后一个判断语句。
第三个elif 条件判断语句,包含了两个判断条件:
1)当前是否持空仓,在 ForTrader 中,持仓数为负即持有空仓:hold_size < 0
;
2)判断收盘价是否向上突破通道的中轨,即收盘价与中轨的交叉信号是否为 1.0:context.mid_signal[0] == 1.0
。
当上述条件都满足,则调用平仓代码 context.close()
,发送平空信号。
本次策略没有设置额外的风控逻辑,代码写上 pass 即可。 👇
指标模块代码:
标的模块代码:
择时模块代码:
风控模块代码:
肯特纳通道策略的关键参数有两个:周期参数
、倍数参数
。
1)周期参数:决定了肯特纳中轨 EMA 和 ATR 的计算周期。
周期参数的数值越小,意味着策略受近期数据影响越大,反之策略受近期数据的影响越小。
先固定倍数参数1.5
,再分别缩小和扩大周期,看看策略的效果。
a. 第二组测试数据:设置周期参数的值为 60、倍数参数的值为 1.5。
通过两个参数调整,可以得出回测对比图。
通过调整结果可知,周期参数不宜过大。
这背后的原因是,参数越大,近期行情的影响会远期价格数据被平均掉,均线的滞后性变大。
2)倍数参数:决定了肯特纳通道的上、下轨与中轨的距离。
倍数参数的值越大,肯特纳通道的上、下轨与中轨的距离越远,策略越难开仓,因为策略的开仓条件之一是价格上穿通道的上轨或下穿通道的下轨。
我们先固定周期参数的值为 10
,再分别缩小和扩大倍数参数。
a. 第一组测试数据:设置周期参数的值为 10、倍数参数的值为 1。
b. 第二组测试数据:设置周期参数的值为 10、倍数参数的值为 3。
通过两个参数调整,可以得出回测对比图。
对比这两组参数回测结果,可知:倍数参数不宜太大
。
倍数参数值太大,很难达到开仓条件,当出现真正符合策略的行情,因为入场晚点,导致损失了一部分的收益。
通过上面 4 组参数的测试,可以总结出以下两点:
1)周期参数不宜太大
。周期参数太大,会造成肯特纳通道过于平滑(降噪过度),无法及时反应价格趋势性的变动,错失进场时机,损失利润;周期参数太小,会受到短期偶然性行情的影响。
2)倍数参数不宜太大
。倍数参数太大,会造成开仓信号过少甚至无法触发。
我为你提供了一组参数组合。
收益率相对较高的一个组合是:5、0.5
。
5、0.5
这组参数值表示:肯特纳指标计算不需要太长的历史周期,肯特纳的通道倍数也可以适当减小,以增加交易机会。
提示:
本公司发布内容均为市场公开信息,不构成投资建议,投资者据此操作,风险自担。市场有风险,投资需谨慎!
联系客服