没想到是maxbarsback污染的问题...
Params numeric offset(5); Vars Series<array<numeric>> pft_price; Series<array<numeric>> lst_price; numeric profit_price; numeric lost_price; numeric size; Defs Events OnInit() { printclear; } OnBar(ArrayRef<Integer> indexes) { If(close[1] > open[1] and CurrentContracts < 5 and CurrentBar>MaxBarsBack) { print("***"+dateTimeToString(date+time)+"***"); print("开仓"); buy(1, open); profit_price = open + 2*offset * minmove * PriceScale; lost_price = open - offset * MinMove * PriceScale; numeric size; //记录止盈价格 { size = GetArraySize(pft_price[0]); print(text(size)); if(size == 0) { pft_price[0][0] = profit_price; } Else { numeric i; for i = 0 to size - 1 { If(profit_price > pft_price[0][i]) { If(i == size - 1) ArrayPushBack(pft_price[0], profit_price); else Continue; } Else { ArrayInsert(pft_price[0], i, profit_price); break; } } } print("pft:" + textarray(pft_price[0])); } //止盈价格记录结束 //记录止损价格 { { size = GetArraySize(lst_price[0]); print(text(size)); if(size == 0) { lst_price[0][0] = lost_price; } Else { numeric i; for i = 0 to size - 1 { If(lost_price < lst_price[0][i]) { If(i == size - 1) { ArrayPushBack(lst_price[0], lost_price); print("末尾插入"); } else Continue; } Else { ArrayInsert(lst_price[0], i, lost_price); break; print("中间插入"); } } } print("lst:" + textarray(lst_price[0])); } } //止损价格记录结束 PlotNumeric("pft",pft_price[0][0]); PlotNumeric("lst",lst_price[0][0]); } //while开始 If(BarsSinceEntry>0 and low<=lst_price[0][0])//止损触发// { sell(1,min(open,lst_price[0][0])); print("***"+dateTimeToString(date+time)+"***"); print("止损"); ArrayErase(lst_price[0], 0, 1); size = GetArraySize(pft_price[0]); ArrayErase(pft_price[0], size-1, 1); }//while结束 //while开始 If(BarsSinceEntry>0 and high>=pft_price[0][0])//止盈触发 { sell(1,max(open,pft_price[0][0])); print("***"+dateTimeToString(date+time)+"***"); ArrayErase(pft_price[0], 0, 1); size = GetArraySize(lst_price[0]); ArrayErase(lst_price[0],size-1, 1); print("止盈"); }//while结束 If(BarStatus == 2) { print("---2---"); print("pft"); print(textarray(pft_price[0])); print("lst"); print(textarray(lst_price[0])); } PlotString("ct", text(CurrentContracts)); }v2版本,完稿