上篇文章我们讲到了关于ATR的策略,介绍了一些ATR的基本信息和原理。通常使用ATR策略,一般都默认为上下轨道,类似布林带策略,开仓和平仓的依据都主要根据这两条轨道。
我们是否可以在两条轨道外再添加一条,使其更加适用于与震荡行情,使策略逻辑更加细化,能应付趋势和震荡。这条额外添加的趋势震荡判断线至少可以让我们的有效开仓次数增加,这样既提高了资金的使用率,也提高的潜在的收益率。
以下是一个在优宽量化用My语言编写的ATR策略的改进版本,为策略逻辑额外添加一条轨道,使潜在收益率得到了很大的提升,各位读者可以尝试参考
源码:
// 确定CN
VOLAT:=STD(C,N); // VOLAT(波动率):M周期收盘价的标准差
VOLATCHANGE:=(VOLAT-REF(VOLAT,1))/VOLAT; // 2个VOLAT的变化率
N1:=(1+VOLATCHANGE)*MINN; // VOLATCHANGE : 波动率变化
N2:=INTPART(N1); // 取整
N3:=MIN(N2,MAXN); // 确认CN不大于60
CN:=MAX(N3,MINN); // 确认CN不小于20
MIDTR^^MA(C,CN); // 确定MIDTR
UPTR^^MIDTR+2*STD(C,CN); // 确定UPTR
DOWNTR^^MIDTR-2*STD(C,CN); // 确定DOWNTR
HPOINT^^HV(H,CN),DOT,COLORRED; // 计算前一周期CN周期内最高价的最大值。
LPOINT^^LV(L,CN),DOT,COLORBLUE; // 计算前一周期CN周期内最低价的最小值。
// 开仓
L<=LPOINT AND L<DOWNTR AND BARPOS>MINN,SK(AMOUNT); //当最低价小于DOWNTR和低点,且K线位置大于60,收盘价卖开
H>=HPOINT AND H>UPTR AND BARPOS>MINN,BK(AMOUNT); //当最高价大于UPTR和高点,且K线位置大于60,收盘价买开
// 启动止损
C>=SKPRICE*(1+STOPRANGE*0.001),BP(SKVOL);
C<=BKPRICE*(1-STOPRANGE*0.001),SP(BKVOL);
// 平仓
C<MIDTR,SP(BKVOL); // 当收盘价小于MIDTR,收盘价卖平
C>MIDTR,BP(SKVOL); // 当收盘价大于MIDTR,收盘价买平
// 动态止损
REF(BKHIGH,1)>BKPRICE*(1+2*0.001*STOPRANGE) AND C<HV(C,BARSBK)*(1-STOPRANGE*0.001),SP(BKVOL); // 买开后最高价大于买开价*(1+2*0.001*STOPRANGE),且收盘价小于买开后最高收盘价*(1-STOPRANGE*0.001),收盘价卖平
REF(SKLOW,1)<SKPRICE*(1-2*0.001*STOPRANGE) AND C>LV(C,BARSSK)*(1+STOPRANGE*0.001),BP(SKVOL); // 卖开后最低价小于卖开价*(1-2*0.001*STOPRANGE),且收盘价大于卖开后最低收盘价*(1+STOPRANGE*0.001),收盘价买平
主图指标显示:
MIDTR^^MA(C,CN); // 确定MIDTR
UPTR^^MIDTR+2STD(C,CN); // 确定UPTR
DOWNTR^^MIDTR-2STD(C,CN); // 确定DOWNTR
HPOINT^^HV(H,CN),DOT,COLORRED; // 计算前一周期CN周期内最高价的最大值。
LPOINT^^LV(L,CN),DOT,COLORBLUE; // 计算前一周期CN周期内最低价的最小值。
副图: 无
用优宽量化平台的回测结果如下: