删除二维数组一个元素后遇到的问题
我定义了一个二维数组addopen用来记录加仓信息(止损价格,手数),以做空为例如果上一根K线是阳线就开盘价加仓1手,同时设定1倍ATR止损,这两个信息同时记录在二维数组里面。收盘过均线全平仓;如果均线小于加仓止损价就从数组里面删除相关元素,如果盘中最高价大于数组中记录的止损价就平仓相应手数并从数组中删除相应元素。 今天运行中发现一个问题:数组中删除一项元素以后for循环遍历的时候会跳过下一个元素,并且盘中实时提示信号闪烁,这个该如何解决? Params Numeric Length(26); Vars Series<Numeric> Lots_now (0); Numeric Lots(0); Numeric StdDev(2.0); Numeric ATR; Global Array<Array<Numeric>> addopen; //定义数组 Series<Numeric> Ma20; Numeric price; Numeric i; Events OnBar(ArrayRef<Integer> indexs) { ATR = Round(XAverage(TrueRange,Length),0); lots=1; ma20=Average(Close[1],Length); PlotNumeric("ma20",ma20); if(marketposition!=-1&&close[1]<ma20) { sellshort(lots,open); Lots_now =Lots ; } If(MarketPosition ==-1 && Close[1]>Open[1] && Lots_now < 30) //上一根是阳线,加仓 { If(Close[1]>ma20) SellShort(0,Open); //过均线全部平仓 If(Close[1]>Open[1] && Lots_now < 30)//加仓 { SellShort(1,Open); Array<Numeric> addInfo; addInfo[0] = Open+ATR; addInfo[1] = Lots; ArrayPushBack(addopen,addInfo); Lots_now = Lots_now + Lots; } } For i=0 to GetArraySize(addopen)-1 { price=addopen[i][0]; lots=addopen[i][1]; Print("开始新一轮循环"); Print("i="+Text(i)); Print("大小:" +text(GetArraySize(addopen))); Print("addopen="+TextArray(addopen)); Print("price="+Text(price)); If(price==0 Or Lots==0) Continue; If(ma20 <= price) { ArrayErase(addopen,i,1); //移除加仓数组相应信息 Continue; } If(High>=price) { BuyToCover(Lots,Max(price,Open)); ArrayErase(addopen,i,1); //移除加仓数组相应信息 Lots_now = Lots_now - Lots; } } } 螺纹指数运行如下图: