我的公式有什么问题?
Params Numeric AA(20000); Numeric BB(0.07); Numeric CC(0.16); Vars Bool VAR1(False); Bool VAR2(False); Bool VAR3(False); Bool VAR4(False); Bool VAR5(False); Bool VAR6(False); Bool VAR7(False); Bool VAR8(False); Bool VAR9(False); Numeric Minpoint; Numeric UPLOTS1; Numeric DNLOTS1; Numeric UPLOTS2; Numeric DNLOTS2; Series<Numeric> KZS; Series<Numeric> DZS; Series<Numeric> COdiff1; Series<Numeric> COdiff2; Bool UpTrend(False); Bool DownTrend(False); Events OnBar(ArrayRef<Integer> indexs) { // 集合竞价过滤 If(BarStatus == 2 && Time == 0.090000 && CurrentTime < 0.090000) Return; If(BarStatus == 2 && Time == 0.210000 && CurrentTime < 0.210000) Return; If(BarStatus == 2 && Time == 0.103000 && CurrentTime < 0.103000) Return; If(BarStatus == 2 && Time == 0.133000 && CurrentTime < 0.133000) Return; //涨跌停板过滤 If((Close==Q_LowerLimit) or (Close==Q_UpperLimit)) Return; COdiff1 = Close[1]-Open[1]; COdiff2 = Close[2]-Open[2]; If(COdiff1>0 && COdiff2>0) { UpTrend = True; } Else If(COdiff1<-0 && COdiff2<-0) { DownTrend = True; } Range[0:DataSourceSize() - 1] { VAR4 = data0.L>=data0.L[1] AND data0.H>=data0.H[1]+1; VAR5 = data0.H<=data0.H[1] AND data0.L<=data0.L[1]-1; VAR6 = data1.L>=data1.L[1] AND data1.H>=data1.H[1]+1; VAR7 = data1.H<=data1.H[1] AND data1.L<=data1.L[1]-1; VAR8 = (Time>=0.090500 And Time<=0.101000) Or (Time>=0.103000 And Time<=0.145500) Or (Time>=0.210500 And Time<=0.225500); VAR9 = (Time==0.093000 And CurrentTime<=0.095800) OR (Time==0.100000 And CurrentTime<=0.101300) OR (Time==0.110000 And CurrentTime<=0.112800) OR (Time==0.133000 And CurrentTime<=0.135800) OR (Time==0.140000 And CurrentTime<=0.142800) OR (Time==0.143000 And CurrentTime<=0.145800) OR (Time==0.213000 And CurrentTime<=0.215800) OR (Time==0.220000 And CurrentTime<=0.222800) OR (Time==0.223000 And CurrentTime<=0.225800); //KZS = L[BarsSinceEntry]; //PlotNumeric("MA1",KZS); If(((data0.H[1]-data0.L[1]+2)*0.8)/((data0.H[1]+1)*(BB+0.01))<0.03) { UPLOTS1=IntPart((AA*0.8)/((data0.H[1]+1)*5*(BB+0.01))); } If(((Data0.H[1]-data0.L[1]+2)*0.8)/((data0.H[1]+1)*(BB+0.01))>=0.03) { UPLOTS1=IntPart((AA*0.03)/((data0.H[1]-data0.L[1]+2)*5)); } If(((data0.H[1]-data0.L[1]+2)*0.8)/((data0.L[1]-1)*(BB+0.01))<0.03 ) { DNLOTS1=IntPart((AA*0.8)/((data0.L[1]-1)*5*(BB+0.01))); } If(((data0.H[1]-data0.L[1]+2)*0.8)/((data0.L[1]-1)*(BB+0.01))>=0.03 ) { DNLOTS1=IntPart((AA*0.03)/((data0.H[1]-data0.L[1]+2)*5)); } If(((data1.H[1]-data1.L[1]+2)*0.8)/((data1.H[1]+1)*(BB+0.01))<0.03) { UPLOTS2=IntPart((AA*0.8)/((data1.H[1]+1)*5*(BB+0.01))); } If(((Data1.H[1]-data1.L[1]+2)*0.8)/((data1.H[1]+1)*(BB+0.01))>=0.03) { UPLOTS2=IntPart((AA*0.03)/((data1.H[1]-data1.L[1]+2)*5)); } If(((data1.H[1]-data1.L[1]+2)*0.8)/((data1.L[1]-1)*(BB+0.01))<0.03) { DNLOTS2=IntPart((AA*0.8)/((data1.L[1]-1)*5*(BB+0.01))); } If(((data1.H[1]-data1.L[1]+2)*0.8)/((data1.L[1]-1)*(BB+0.01))>=0.03) { DNLOTS2=IntPart((AA*0.03)/((data1.H[1]-data1.L[1]+2)*5)); } //开多1 If((data0.H[1]>data0.H[2] AND data0.L[1]>data0.L[2]) AND (data1.H[1]>data1.H[2] AND data1.L[1]>data1.L[2]) AND VAR4 AND VAR8 and data0.MarketPosition==0) { data0.Buy(1,data0.H[1]); } //开空1 If((data0.H[1]>data0.H[2] AND data0.L[1]>data0.L[2]) AND (data1.H[1]>data1.H[2] AND data1.L[1]>data1.L[2]) AND VAR5 AND VAR8 and data0.MarketPosition==0) { data0.SellShort(1,data0.L[1]); } //开多2 If((data0.H[1]<=data0.H[2] AND data0.L[1]>=data0.L[2]) AND (data1.H[1]<=data1.H[2] AND data1.L[1]>=data1.L[2]) AND VAR6 AND VAR8 and data1.MarketPosition==0) { data1.Buy(2,data1.H[1]); } //开空2 If((data0.H[1]<=data0.H[2] AND data0.L[1]>=data0.L[2]) AND (data1.H[1]<=data1.H[2] AND data1.L[1]>=data1.L[2]) AND VAR7 AND VAR8 and data1.MarketPosition==0) { data1.SellShort(2,data1.L[1]); } //开多3 If((data0.H[1]<=data0.H[2] AND data0.L[1]>=data0.L[2]) AND (data1.H[1]>data1.H[2] AND data1.L[1]>data1.L[2]) AND VAR6 AND VAR8 and data1.MarketPosition==0) { data1.Buy(3,data1.H[1]); } //开空3 If((data0.H[1]<=data0.H[2] AND data0.L[1]>=data0.L[2]) AND (data1.H[1]>data1.H[2] AND data1.L[1]>data1.L[2]) AND VAR7 AND VAR8 and data1.MarketPosition==0) { data1.SellShort(3,data1.L[1]); } //开多4 If((data0.H[1]>data0.H[2] AND data0.L[1]>data0.L[2]) AND (data1.H[1]<=data1.H[2] AND data1.L[1]>=data1.L[2]) AND VAR4 AND VAR8 and data0.MarketPosition==0) { data0.Buy(4,data0.H[1]); } //开空4 If((data0.H[1]>data0.H[2] AND data0.L[1]>data0.L[2]) AND (data1.H[1]<=data1.H[2] AND data1.L[1]>=data1.L[2]) AND VAR5 AND VAR8 and data0.MarketPosition==0) { data0.SellShort(4,data0.L[1]); } } } 为什么将公式进行模拟交易的时候空仓时也不能开仓?如何修改才能保证条件满足后开一次仓,而不是频繁开仓?将marketposition==0这个条件去掉后,能开仓,但发出两个相同的委托单.