导语:商品期货交易上线啦!听闻这个消息的小编当然坐不住了,决定立刻商品期货走一波!本文选择实现的是经典的海龟交易法,之前量化课堂已经有海龟交易法在股票当中的应用了,这一次让我们来看看海龟策略在商品期货中的应用吧!
海龟交易是什么
作为经典的交易策略,相信很多人都已经很清楚什么是海龟交易法了,如果你已经清楚明白的知道了什么是唐奇安通道、真实波幅、N值(ATR)和Unit,也能够熟练地掌握他们的算法,那你大可直接跳过这一部分,进入策略实现的部分。
如果你想快速认识什么是海龟交易策略,或是想重新回顾一下,那就让我们开始吧!
唐奇安通道
先让我们上一张图!
图中这个完全将K线包裹在内的通道线就是唐奇安通道,它的上线与下线分别取的是20日最高价与最低价,因此当当前价格突破上线或者下线的时候,都能作为很好的突破信号。
就像上图图中所示,当价格突破上线的时候,往往意味着一轮向上行情的开启,我们在这个时候进行多仓买入操作。
类似的,当价格突破下线的时候,往往意味着一轮向下行情的开启,我们在这个时候进行卖空操作。
这就是海龟交易法的基础,当然,作为一个成熟的交易法则,我们还需要一些指标来判断加仓点、止损点与每次买入卖出的数量。而用来判断的依据,我们叫做真实波幅与N值。
真实波幅
话不多说先上公式!
TrueRange=Max(High?Low,|pre close?High|,|pre close?Low|)
其中:High是指当日最高价,Low为当日最低价,pre_close是指前一日收盘价。
公式看上去很复杂,其实它要表达的就是昨日收盘以后股票的最大波幅,让我们来看看K线图里真实波幅具体指哪一部分。
从图片中我们可以很容易的看出,真实波幅就是昨天收盘后股票的最大振幅,也就是图片中最长的那一根箭头所表示的位置。
N值(ATR)
N值是海龟交易法当中非常重要的一个概念,它还有一个名字,那就是ATR(Average True Range),也就是平均真实波幅的意思,话不多说,老规矩上公式先!
N(ATR)=1days×∑i=1daysTrueRangei
或者用滑动平均的方法:
N(ATR)t=(days?1)×N(ATR)t?1 TrueRangetdays
其中:days是取平均的天数,比如我们要取真实波幅20日的平均,days就取20;TrueRange是真实波幅。
从公式可以看出,
N(ATR)值其实就是标的days日内的平均真实波幅,当这个值大的时候,就说明这段时间股票每一天的波动率都很大,当这个值小的时候,就说明这段时间每一天的波动率都很小。因此在海龟交易法中,
每当标的价格上涨(下跌)0.5个N(ATR)时,我们就加仓1个Unit的多头(空头)仓位;当标的价格上涨(下跌)2个N(ATR)时,我们就对空头(多头)仓位进行平仓止损。让我们举一个例子来看看N值究竟怎么算~为了方便起见,我们就令days=5,由于TrueRange计算时用的是前一日的收盘价,因此我们自己计算时
收盘价要取前一日的数据而不是当天的:
- 收盘价: 35190., 35490., 36060., 35840., 35710.
- 最高价: 35700., 36080., 36210., 36060., 35990.
- 最低价: 35280., 35640., 35610., 35630., 35640.
用以上三行价格中的最大值减去最小值便能得到真实波幅数据:
- TrueRange: 510., 590., 600., 430., 350.
计算这五个数的平均值有(510 590 600 430 350)÷5=548
因此5日N(ATR)便为548
Unit
知道了买点、卖点、止损点与加仓点,我们就需要知道每一次建仓与加仓都需要购买多少数量,老规矩,看公式!
Unit=1%×AccountN(ATR)×coef
其中:Account表示账户中的总资金,coef为该商品期货一手的数量,如铜为5吨一手,则对铜的商品期货来说,coef就等于5。下面是一些常见商品期货的coef表格:
'A':10, 'AG':15, 'AL':5, 'AU':1000,
'B':10, 'BB':500, 'BU':10, 'C':10,
'CF':5, 'CS':10, 'CU':5, 'ER':10,
'FB':500, 'FG':20, 'FU':50, 'GN':10,
'HC':10, 'I':100, 'IC':200, 'IF':300,
'IH':300, 'J':100, 'JD':5, 'JM':60,
'JR':20, 'L':5, 'LR':10, 'M':10,
'MA':10, 'ME':10, 'NI':1, 'OI':10,
'P':10, 'PB':5, 'PM':50, 'PP':5,
'RB':10, 'RI':20, 'RM':10, 'RO':10,
'RS':10, 'RU':10, 'SF':5, 'SM':5,
'SN':1, 'SR':10, 'T':10000, 'TA':5,
'TC':100, 'TF':10000, 'V':5, 'WH':20,
'WR':10, 'WS':50, 'WT':10, 'Y':10,
'ZC':100, 'ZN':5
我们接着用之前那个例子来看看Unit的计算。之前的数据小编取的是期货铜的价格,则coef应该为5,假设我们的账户当中有1,000,000的现金。
Unit=1%×1,000,000548×5=3.65≈4
可以得到每一次购买、加仓,我们都需要购买4手的期货铜。
策略实现
到这里,相信你已经知道什么是海龟交易法了,让我们来总结一下这个策略究竟是怎样的吧!
- 计算期货标的的N(ATR)与Unit;
- 判断价格是否突破了唐奇安通道,若是向上突破则多头仓位开仓,空头仓位平仓;向下突破则空头仓位开仓,多头仓位平仓;
- 若期货价格高于(低于)上次买入价格0.5个ATR,则加仓一个Unit的多头(空头)仓位;
- 若期货价格低于(高于)上次买入价格2个ATR,则平仓多头(空头)仓位止损。
划重点——商品期货代码一定要注意
商品期货策略开始一定要记得设置账户属性为期货账户,不然是没有办法交易的哦~具体的代码参考如下:
set_subportfolios([SubPortfolioConfig(cash=context.portfolio.starting_cash, type='index_futures')])
set_order_cost(OrderCost(open_commission=0.000023, close_commission=0.000023,close_today_commission=0.0023), type='index_futures')
set_option('futures_margin_rate', 0.15)
回测
构建好策略以后,小编便用沪铜期货“CU”作为标的来试验了一下大名鼎鼎的海龟交易法:
结果还不错哦~大家可以克隆代码以后自己改标的尝试一下,还可以根据自己以往海龟交易的经验优化一下买点卖点与止损函数。
以上就是海龟交易法在商品期货的尝试,大家快把代码克隆起来,商品期货走一波!