//海龟20日55日股票组测试//海龟交易系统20日+55日突破,过滤开仓信号+止损
#CALL [999001,海龟系统之调用上证相关数据]AS VAR1 // 调用上证指数数据
#CALL [999001,海龟系统之调用上证相关数据]AS VAR2
#CALL [999001,海龟系统之调用上证相关数据]AS VAR3
#CALL [999001,海龟系统之调用上证相关数据]AS VAR4
C1 := VAR1.CC;//上证收盘价
H1 := VAR2.HH;//上证最高价
L1 := VAR3.LL;//上证最低价
ATR := VAR4.ATR;//上证ATR
//一、计算 个股的 ATR
TR := MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));
GGATR : MA(TR,20);
//二、定义高点低点、突破高点低点
H20 := HV(H1, 20);//20日高点
L20 := LV(L1, 20);//20日低点
H10 := HV(H1, 10);//10日高点
L10 := LV(L1, 10);//10日低点
H55 := HV(H1, 55);//55日高点
TPH20 := CROSSUP(C1, H20);
TPH10 := CROSSUP(C1, H10);
DPL20 := CROSSDOWN(L1, L20);
DPL10 := CROSSDOWN(L1, L10);
TPH55 := CROSSUP(C1, H55);
DRAWTEXT(TPH20 ,H ,'20高'), VALIGN2, FONTSIZE20, COLORWHITE;
DRAWTEXT(DPL10 ,L ,'10低'), VALIGN2, FONTSIZE20, COLORWHITE;
DRAWTEXT(TPH55 ,H+60 ,'55高'), VALIGN2, FONTSIZE20, COLORWHITE;
DRAWTEXT(DPL20 ,L-60 ,'20低'), VALIGN2, FONTSIZE20, COLORWHITE;
//三、记录上突破、下跌破次数
TPH20CS := COUNT(TPH20, 0);//记录向上突破20日的次数
DPL10CS := COUNT(DPL10, 0);//记录向下跌破10日的次数
DPL20CS := COUNT(DPL20, 0);
DPL10CSS := IF(TPH20, DPL10CS, REF(DPL10CS, BARSLAST(TPH20)));//判断这次突破20日和上次突破20日之间是否有跌破10日低点
TPH20CSS := IF(DPL10, TPH20CS, REF(TPH20CS, BARSLAST(DPL10)));//判断这次跌破10日和上次跌破10日之间是否有突破20日高点
DPL20CSS := IF(TPH55, DPL20CS, REF(DPL20CS, BARSLAST(TPH55)));//判断这次突破55日和上次突破55日之间是否有跌破20日低点
//四、记录符合条件的位置上的收盘价
//1、记录符合平仓条件位置上的收盘价
//如果当前是跌破10日低点,且上次突破20日高点之后没有跌破10日低点,就记录下当前的收盘价
PC := IF(DPL10 AND COUNT(DPL10, BARSLAST(TPH20))=1, C1, REF(C1, BARSLAST(DPL10 AND COUNT(DPL10, BARSLAST(TPH20))=1)));
//2、记录符合开仓条件位置上的收盘价
//如果当前是突破20日高点,同时和上一次突破20日高点之间有发生跌破,则记录当前的收盘价 //DPL10CS>DPL10CSS
KC := IF(TPH20 AND DPL10CS>REF(DPL10CSS, 1), C1, REF(C1, BARSLAST(TPH20 AND DPL10CS>REF(DPL10CSS, 1))));
KC5 := IF(TPH55 AND DPL20CS>REF(DPL20CSS, 1), C1, REF(C1, BARSLAST(TPH55 AND DPL20CS>REF(DPL20CSS, 1))));
//定义20日突破的止损平仓条件
ZSJ := KC-2*ATR;
ZS55 := CROSSDOWN(L1, KC5-2*ATR);
//定义个股的止损平仓价
GGZSJ : BKPRICE-2*GGATR;
DRAWICON(CROSSDOWN(L, GGZSJ) ,H ,'IC01');
//五、判断上次符合开仓平仓条件下,如果开仓,是否是盈利的
YK := IF((PC-KC)>0, 1, -1);
//六、定义开平仓条件
//1、定义20日开仓条件
ZDXH20 := TPH20 AND DPL10CS>REF(DPL10CSS, 1) AND REF(YK, 1)<0;
//2、定义20日平仓条件
PDXH20 := DPL10 && COUNT(DPL10, BARSLAST(TPH20 AND DPL10CS>REF(DPL10CSS, 1) AND REF(YK, 1)<0))=1 && L1<L10 && L1>L20;
//3、定义55日开仓条件
ZDXH55 := TPH55;
//4、定义55日平仓条件
PDXH55 := BKVOL>0 && DPL20;
//定义止损平仓条件
ZSPD := BKVOL>0 && CROSSDOWN(C1, ZSJ);//上证的止损平仓条件
GGZS := BKVOL>0 && CROSSDOWN(C, GGZSJ);//个股的止损平仓条件
//七、定义仓位
LOTS := INTPART(MONEYTOT*N1 / C /100)*100;
LOTS1 := INTPART(MONEYTOT*N1 / C /100)*100;
//八、定义开平仓逻辑
//1、开仓信号
ZDXH20 && H20<>H55, BK(LOTS);
//判断上一次开仓是突破20日开的仓位还是突破55日开的仓位
//如果是根据突破20日开的仓位,就把仓位记录下来
LOT20 := IF(ZDXH20 && H20<>H55, LOTS, REF(LOTS, BARSLAST(ZDXH20 && H20<>H55)));
ZDXH55 && H20<>H55, BK(LOTS1);//只突破55日高点
ZDXH20 && ZDXH55, BK(2*LOTS);//突破突破20日和55日
ZDXH55 && H20=H55, BK(LOTS1);//突破55日
//个股的止损平仓条件
GGZS, SP(BKVOL);
//2、止损平仓
ZS55, SP(BKVOL);
ZSPD, SP(LOT20);
ZSPD AND L1>(KC5-2*ATR), SP(BKVOL/2);
//3、平仓信号
PDXH20, SP(LOT20);
DPL10 && L1>L20 && COUNT(DPL10, BARSLAST(ZDXH20 && ZDXH55))=1, SP(BKVOL/2);
PDXH55, SP(BKVOL);
|