如图所示,我的系统开仓限制条件有holding=0,但是在椭圆内,本来不应该开仓的,因为平仓是在k线收盘,但是图表交易信号显示本根k线holding=0,所以又开了新仓,请问这种情况如何解决?

此主题相关图片如下:5.jpg
在代码里面,从上倒下,先满足平仓条件后平仓,之后又满足开仓条件开仓
我的程序是先平后开,但是不管用,还是出现这种情况,后来在论坛找了这么一段代码就可以了,具体是什么原理我也不清楚。
if holding=0 and 开多条件 and bj=0 then begin
buy(1,1,LIMITR,上轨2);
bj:=1;
end
if holding=0 and 开空条件 and bj=0 then begin
buyshort(1,1,LIMITR,下轨2);
bj:=1;
end
if holding=0 and 开多条件 and bj=1 and exitbars>0 then buy(1,1,LIMITR,上轨2);
if holding=0 and 开空条件 and bj=1 and exitbars>0 then buyshort(1,1,LIMITR,下轨2);
我的开平顺序是这样写的,总是出现上一次平仓的那根k线就开仓了。
开多条件:=h>=上轨2 AND M5>M10 ;/
开空条件:=l<=下轨2 AND M5<M10 ;//
平多条件1:= L<=下轨1 ;
平空条件1:=h>=上轨1 ;
SELL(DTYDZS ,1,MARKET);
SELLSHORT(KTYDZS ,1,MARKET);
平多1:sell(平多条件1 ,PosNum,LIMITR,SELLPRICE1);
平空1:sellshort(平空条件1 ,PosNum,LIMITR,BUYPRICE1);
开多:buy(开多条件 and holding=0 AND BOFU<0.03 AND TOTALDAYTRADE<2 and t1 and cyc>1,PosNum,LIMITR,上轨2);
开空:buyshort(开空条件 and holding=0 AND BOFU<0.03 AND TOTALDAYTRADE<2 and t1 and cyc>1,PosNum,LIMITR,下轨2);
此主题相关图片如下:1.jpg

上边的不行,把holding放在前边才行。
开多条件:=h>=上轨2 AND M5>M10 and holding=0 ;
开空条件:=l<=下轨2 AND M5<M10 and holding=0 ;
平多条件1:= L<=下轨1 ;
平空条件1:=h>=上轨1 ;
SELL(DTYDZS ,1,MARKET);
SELLSHORT(KTYDZS ,1,MARKET);
平多1:sell(平多条件1 ,PosNum,LIMITR,SELLPRICE1);
平空1:sellshort(平空条件1 ,PosNum,LIMITR,BUYPRICE1);
开多:buy(开多条件 AND BOFU<0.03 AND TOTALDAYTRADE<2 and t1 and cyc>1,PosNum,LIMITR,上轨2);
开空:buyshort(开空条件 AND BOFU<0.03 AND TOTALDAYTRADE<2 and t1 and cyc>1,PosNum,LIMITR,下轨2);
写前面之后,后面的开仓所产生的holding不会被前面的holding判断所获取,所以不会对平仓条件的持仓判断结果产生影响