测试一【单阳不破基础测试】
【测试逻辑】
A. 测试的买入条件:出现单阳不破形态,以收盘价买入;
B. 测试的卖出条件:买入后第二天,以收盘价卖出;
【测试代码】[N3=3]
//一、定义仓位
FUND:=10000000; //资金
LOTS:=INTPART(FUND*0.8/(C*MARGIN*UNIT+FEE));//计算开仓手数
//定义ATR指标
TR:MAX(MAX((H-L),ABS(REF(C,1)-HIGH)),ABS(REF(C,1)-L));//算出(当日最高-当日最低)、(当日最高-昨日收盘)的绝对值、(昨日收盘-当日最低)的绝对值,再求这3个值中的最大值
ATR:MA(TR,N);//求N个周期内的TR的简单移动平均
//定义单阳不破形态
//1、定义引线的长度:最高-最低;
DYBP_REFk线IAN:ABS(REF(H,N3)-REF(L,N3))>1*REF(ATR,N3);
//2、再定义一个变量:记录箱体的上下沿;
DYBP_SG:=REF(H,N3);
DYBP_XG:=REF(L,N3);
//3、接下来去判断下一根k线的最高、最低价是否在最高价、最低价之内,如果突破了,就把新的最高价、最低价记录下来;没有的话,就用原来的最高最低;
DYBP_XSG:=IF((L>REF(L,N3) AND H>REF(H,N3)),DYBP_SG,H);//突破上沿,则取箱体新上沿
DYBP_XXG:=IF((L<REF(L,N3) AND H<REF(H,N3)),DYBP_XG,L);//突破下沿,则取箱体新下沿
//4、记录k线数量,从最开始的k线到突破箱体之间的k线的数量;【先判断当日收盘价是否突破箱体,如果未突破,M 就取N3+1;M:IF((C>REF(L,N3) OR C<REF(H,N3)),N3+1,N3);】
M:IF((DYBP_XSG OR DYBP_XXG),N3+1,N3);
//5、如果突破了箱体的最高价
DYBPk线IAN_1:=REF(ISUP,M) && REF(L,M)<REF(C,(M-1)) && REF(L,M)<REF(C,(M-2)) && REF(L,M)<C
&& REF(H,M)>REF(H,(M-1)) && REF(H,M)>REF(H,(M-2)) && REF(H,M)>C && REF(DYBP_XSG,M)>REF(DYBP_XSG,(M-3)) && REF(L,M)<REF(C,(M-3));
DYBPk线IAN_2:=REF(ISUP,N3) && REF(L,N3)<REF(C,(N3-1)) && REF(L,N3)<REF(C,(N3-2)) && REF(L,N3)<C
&& REF(H,N3)>REF(H,(N3-1)) && REF(H,N3)>REF(H,(N3-2)) && REF(H,N3)>C;
DYBPk线IAN_XG:IF((C>REF(L,N3) AND C>REF(H,N3)),DYBPk线IAN_1,DYBPk线IAN_2);
//6、如果突破了箱体的最低价
DYBPk线IAN_3:=REF(ISUP,M) && REF(L,N3)<REF(C,(M-1)) && REF(L,M)<REF(C,(M-2)) && REF(L,M)<C
&& REF(H,M)>REF(H,(M-1)) && REF(H,M)>REF(H,(M-2)) && REF(H,M)>C && REF(H,M)>REF(H,(M-3)) && REF(DYBP_XXG,M)<REF(DYBP_XXG,(M-3));
DYBPk线IAN_XD:IF((C<REF(L,N3) AND C<REF(H,N3)),DYBPk线IAN_3,DYBPk线IAN_2);
DYBPk线IAN_XGORXD:=DYBPk线IAN_XG OR DYBPk线IAN_XD;
DYBP:=DYBP_REFk线IAN && DYBPk线IAN_XGORXD;//单阳不破形态
//执行交易
DYBP,BK(LOTS);//满足k线形态,开仓做多
//针对单阳不破:以收盘价突破箱体的上沿或下沿为平仓条件
C<REF(L,M) || C>REF(H,M),SP(BKVOL);
|