// 定义输入参数Input:len(60),natr(2); // len - ATR计算周期长度(60根K线), natr - ATR倍数因子(2倍)// 定义变量var:mp(0),istxsettledate(False); // mp - 当前持仓方向及数量, istxsettledate - 是否为交割日标志// 计算当前持仓状态(多头为正,空头为负,0表示空仓)mp = marketposition * currentcontracts;// 判断是否为交割日(每月第3个周三)if dayofmonth(date) > 14 and dayofmonth(date) < 22 and dayofweek(date) = 3 then beginistxsettledate = true; // 满足条件则为交割日endelse beginistxsettledate = False; // 否则不是交割日end;// 定义交易条件condition1 = SlowK(14) < 50; // 慢速K值低于50(超卖区域)condition2 = SlowK(14) > 50; // 慢速K值高于50(超买区域)condition3 = AvgTrueRange(len) < AvgTrueRange(len)[1]; // ATR值下降(波动减小)condition4 = AvgTrueRange(len) > AvgTrueRange(len)[1]; // ATR值上升(波动增大)condition5 = istxsettledate and Time >= 1200; // 交割日且时间在12:00之后// 多头入场条件:空仓且满足超卖+波动减小if mp = 0 and condition1 and condition3 then begin// 在下一根K线的(昨日收盘价 + natr*ATR)处挂突破买单buy("B1") next bar at CloseD(1) + natr * AvgTrueRange(len) stop;end;// 空头入场条件:空仓且满足超买+波动增大if mp = 0 and condition2 and condition4 then begin// 在下一根K线的(昨日最低价 - natr*ATR)处挂突破卖单sellshort("S1") next bar at low[1] - natr * AvgTrueRange(len) stop;end;// 交割日平仓条件:有持仓且在交割日12:00后if mp <> 0 and condition5 then begin// 市价平掉所有多头仓位sell("LX") currentcontracts contracts next bar at market;// 市价平掉所有空头仓位buytocover("SX") currentcontracts contracts next bar at market;END;
策略条件
★使用商品及时间周期:
(1)data1:60分国内期货品种
★仓別:留仓
★策略想法
★思考方向:
本策略希望透过简单的KD和ATR,再利用多空进场条件不对称的方式,来达到简单又有些不同的小而美策略,在策略组合中发挥互补的效果。
心得
此策略有点在测试KD到底能作的什么程度,以交易次数来看是还不错,不过只有在结算日才会出场的这个条件更是喧宾夺主,因为即使作错方向也是不停损若在实际交易上可能会有执行上的困难性,可真是实验性十足。
关注我们微信及群,第一时间获取最新策略解析及程式码
关注微信:
加入群:每天接收新策略新思路
关注公众号:每天经典策略不错过!

