平仓的代表条件加一个
enterbars>0就可以了表示当根k开仓后不会平
把你平多和开多的条件输出限制看下当时是否都符合。你输出enterbars ,和holding,应该是在这个位置之前也有历史的开仓位置,
INPUT:q(100,5,500,5) m(3,3,18,3) n(2,2,20,2);
VARIABLE:p=0;
w:=q/5;
y:=if(ISLASTBAR,(if(0<DATATYPE<7,DATATYPE,DRAWNULL)),DRAWNULL);
g:= NUMTOSTR(y ,0 );
ref5k:STKINDIEX('' ,' ma.ma1(5)' ,0 , g,-1 ,200 );
ref10k:STKINDIEX('' ,' ma.ma1(10)' ,0 ,g,-1 ,200 );
ref20k:STKINDIEX('' ,' ma.ma1(20)' ,0 ,g,-1 ,200 );
kd:= ref5k>ref10k
and ref10k>ref20k
and ref5k<(CLOSE+n*MINDIFF)
and ref5k>(L-m*MINDIFF);
kd1:= ref5k>ref10k
and ref10k>ref20k
and ref5k<(CLOSE+n*MINDIFF)
and ref5k>(L-m*MINDIFF) ;
bd:= ( (MA(C,10)>MA(C,5))or ((C-ENTERPRICE)>q))
and enterbars >1;
ds := (ENTERPRICE-c)>w ;
kg:= ref5k<ref10k
and ref10k<ref20k
and ref5k>(CLOSE-n*MINDIFF)
and ref5k<(H+m*MINDIFF);
kg1:= ref5k<ref10k
and ref10k<ref20k
and ref5k>(CLOSE-n*MINDIFF)
and ref5k<(H+m*MINDIFF);
bg:= ((MA(C,10)<MA(C,5))or ((ENTERPRICE-c)>q))
and enterbars >1;
gs := ((C-ENTERPRICE)>w);
IF HOLDING<0 THEN BEGIN
IF bg and enterbars>0 THEN BEGIN
平空:SELLSHORT(1,0,THISCLOSE),
p:=0;
END
IF gs and enterbars>0 THEN BEGIN
空损:SELLSHORT(1,0,THISCLOSE);
END
IF p=1 and kg1 THEN BEGIN
加空:BUYSHORT(1,1,THISCLOSE);
p:=2;
END
END
IF HOLDING=0 THEN BEGIN
IF kd THEN BEGIN
多开:BUY(1,30%,THISCLOSE);
END
END
IF HOLDING>0 THEN BEGIN
IF bd and holding>0 THEN BEGIN
平多:SELL(1,0,THISCLOSE),ORDERQUEUE;
p:=0;
END
IF ds and holding>0 THEN BEGIN
多损:SELL(1,0,THISCLOSE),ORDERQUEUE;
END
END
IF HOLDING=0 THEN BEGIN
IF kg THEN BEGIN
空开:BUYSHORT(1,1,THISCLOSE);
p:=1;
END
END
我把enterbars>0的条件加进去了,用户再试试看