为何下穿会有平仓

Params Numeric FastLength(12); //MACD Numeric SlowLength(26); //MACD Numeric MACDLength(9); //MACD Numeric ATRLength(77); // 平均波动周期 ATR Length Numeric fsLength(19); // 长周期 FailSafe Length Numeric teLength(8); // 离市周期 Trailing Exit Length Numeric ExitN(2.5);Vars Numeric MACDDiff; //MACD Numeric AvgMACD; //MACD Numeric MACDValue; //MACD Numeric MinPoint; // 最小变动单位 Series<Numeric> AvgTR; // ATR Numeric N; // N 值 Numeric TurtleUnits(100); // 交易手数 Series<Numeric> fsDonchianHi; // 唐奇安通道上轨,延后1个Bar,长周期 Series<Numeric> fsDonchianLo; // 唐奇安通道下轨,延后1个Bar,长周期 Numeric ExitHighestPrice; // 离市时判断需要的N周期最高价 Numeric ExitLowestPrice; // 离市时判断需要的N周期最低价 Numeric myEntryPrice; // 开仓价格 Numeric myExitPrice; // 平仓价格 Bool SendOrderThisBar(False); // 当前Bar有过交易 Series<Numeric> preEntryPrice(0); // 前一次开仓的价格 Series<Bool> upcross(False);Events OnBar(ArrayRef<Integer> indexs) { MACDDiff = XAverage( Close, FastLength ) - XAverage( Close, SlowLength ) ; AvgMACD = XAverage(MACDDiff,MACDLength); if (CrossOver(MACDDiff,AvgMACD)) { upcross=True; }Else if (CrossUnder(MACDDiff,AvgMACD)) { upcross=FALSE; }Else { upcross=upcross[1]; } If(BarStatus == 0) { preEntryPrice = InvalidNumeric; //PreBreakoutFailure = false; } MinPoint = MinMove*PriceScale; AvgTR = XAverage(TrueRange,ATRLength); N = AvgTR[1]; fsDonchianHi = HighestFC(High[1],fsLength); fsDonchianLo = LowestFC(Low[1],fsLength); ExitLowestPrice = LowestFC(Low[1],teLength); ExitHighestPrice = HighestFC(High[1],teLength); Commentary(\"N=\"+Text(N)); Commentary(\"preEntryPrice=\"+Text(preEntryPrice)); //Commentary(\"PreBreakoutFailure=\"+IIFString(PreBreakoutFailure,\"True\",\"False\")); // 当不使用过滤条件,或者使用过滤条件并且条件为PreBreakoutFailure为True进行后续操作 If(MarketPosition!=-1 ) { SellShort(100,Close); MyEntryPrice=Close; If(AlertEnabled ) { Alert(\"报警信息...\"); } Return; } //持仓处理 If(MarketPosition == 1 ) {if ( upcross==False ) // 跟踪止损退出 { myExitPrice = close; //myExitPrice = IIF(myExitPrice > Open, Open,myExitPrice); // 大跳空的时候用开盘价代替 Sell(0,myExitPrice); // 数量用0的情况下将全部平仓 } } Else If(MarketPosition == -1) {if ( upcross==True ) // 跟踪止损退出 myExitPrice = close; //myExitPrice = IIF(myExitPrice < Open, Open,myExitPrice); // 大跳空的时候用开盘价代替 BuyToCover(0,myExitPrice); // 数量用0的情况下将全部平仓 } }为何下穿会有平仓??下穿upcross==false,不满足条件,不应该执行,错在哪?

你如果要用uprcoss来控制,那你这个if控制的范围不对,必须把下面的buytocover用大括号括起来建议先把基础语法学明白

你这个平仓条件不是只要当前仓位是空仓立即平仓么?那开空仓后第二根bar很明显满足条件所以就平仓了啊?