在物理学中,振幅是表示波动或振动中距离平衡位置或静止位置的最大位移。在商品期货中,振幅指的是开盘后当日最高价和最低价之间的差的绝对值与昨日收盘价的百分比。振幅能够反映品种的活跃程度。本篇文章将使用发明者量化平台的MY语言开发一个均价振幅ATR策略。
对于CTA趋势跟踪策略来说,趋势行情是其获利来源,而振幅则直接反映了一个品种是否活跃,间接反映了一个品种是否有趋势行情。振幅有很多计算方式,比如当日振幅和周期振幅。以周期振幅为例,假设铁矿石10日前的收盘价为1000,当前K线最高价为1050(上涨5%),最低价为950(下跌5%),那么振幅就是10%。换句话说,振幅就是当前K线最高价减去当前K线最低价,再除以前10日K线的收盘价的绝对值。
除了周期振幅的计算方式,还有一种更简单的计算方式,即当日振幅,它等于最高价减去最低价或者收盘价减去开盘价。而本策略是以N日的平均收盘价减去N日的平均开盘价真实波动幅度主要用于判断开平仓的时机。真实波动幅度(ATR)是计算一段时期内价格波动幅度的移动平均值。它最初由WellesWilder在《技术交易系统中的新概念》一书中提出。
真实波动幅度经常在趋势跟踪策略中被引用。如果ATR的值越高,表示价格的趋势性越强;反之,ATR的值越低,表示价格的趋势性越弱。因此,在策略的开平仓条件中使用ATR作为一部分可以有效过滤部分震荡行情。
第1步:计算均价振幅。
定义均价振幅(AMP),即收盘价均线减去开盘价均线。
第2步:计算真实波动幅度。
首先计算出TR(当天的真实波幅),计算公式为:TR = 当天的高点减去当天的低点。但是有时候价格会出现跳空高开或跳空低开的情况,在这种情况下,当天的TR值为:
跳空高开:TR = 当天的高点减去昨天的收盘价。
跳空低开:TR = 昨天的收盘价减去当天的低点。
由于一天的TR有随机性,不能代表最近市场整体的波动率,所以使用ATR更能衡量市场的波动性。常用的是以14周期的ATR为例,即:ATR = (前13天的TR + 当天的TR)/14。最后,可以使用一个系数计算开平仓价格。
多开价格:如果均价振幅上穿0,那么其价格是最高价加上NATR。
空开价格:如果均价振幅上穿0,那么其价格是最低价减去NATR。
多平价格:如果均价振幅下穿0,那么其价格是最低价减去NATR。
空平价格:如果均价振幅下穿0,那么其价格是最高价加上NATR。
第4步:下单交易。
多头开仓:如果当前K线数量大于N,并且收盘价大于等于BKP。
空头开仓:如果当前K线数量大于N,并且收盘价小于等于SKP。
多头平仓:如果均价振幅下穿0,或者收盘价小于等于SPP。
空头平仓:如果均价振幅上穿0,或者收盘价大于等于BPP。
回测开始日期:2016-01-01
回测结束日期:2021-04-01
数据品种:铁矿石指数
数据周期:日线
滑点:开平仓各2跳
回测配置
回测绩效
收益概览