同根BAR,先止损,后触发开仓,实盘无法开仓

问题:同根BAR,先止损,后触发开仓,实盘无法开仓。因为MarketPosition是先看上一根SAR最后的状态,然后是盘中,tick每次刷新,即便是已经止损了,本根bar应该先无持仓了。但因为TB机制,还是会先当运行中有持仓。故此,设置了一个MP(也相当认定是否有持仓)。但是实盘,还是一样止损后,再触发开仓条件,结果还是无法开仓 Params //主体需要 Numeric Length(120);//ATR周期 Numeric baifenbi(61.8);//百分比 Numeric KaiGuan(1); //平仓开关,1=不过夜,0=过夜 Vars //主体需要 NumericSeries ATR15M;//15分钟周期ATR NumericSeries Close1;//通道中轨,这里当成昨日收盘价,以此作为止损 NumericSeries UpperAvg;//通道上轨 NumericSeries LowerAvg;//通道下轨 Numeric TradeCloseTime(144500);//平仓时间 Numeric MinPoint; //一跳 NumericSeries MP;//设置持仓状态 Begin ATR15M=AvgTrueRange(Length);//15分钟周期ATR Close1=CloseD(1);//定义昨天的收盘价,这里也当通道中轨,作为止损 UpperAvg=Close1+(ATR15M*baifenbi/100); LowerAvg=Close1-(ATR15M*baifenbi/100); PlotNumeric("Close1",Close1);//通道中轨,这里是昨天白天收盘价 PlotNumeric("lineup",UpperAvg);//通道上轨,昨天收盘价+ATR*0.382 PlotNumeric("linelow",LowerAvg);//通道上轨,昨天收盘价-ATR*0.382 MinPoint = MinMove*PriceScale; //1跳 // 集合竞价和小节休息过滤 If(!CallAuctionFilter()) Return; //先设置个前置的截止时间,时间逻辑 If(Time>=TradeCloseTime*0.000001 And Time<=0.153000 And KaiGuan == 1)//超过下午截止时间,平仓 { Sell(0,Open); MP=0; // BuyToCover(0,Open); } Else //截止时间以外的操作 { //多头进场 If(MP == 0 And High > UpperAvg)//当无持仓,大于上轨,这里防止跳空,进行max开仓与上轨进行比较 { Buy(0,Max(Open,UpperAvg+MinPoint)); MP=1; } //多头出场 And High<=UpperAvg If(Mp[1] == 1 And Low[1] < Close1 AND Close[1] <= UpperAvg[1] And High<=UpperAvg)//如果有持仓,价格小于昨天收盘价平仓 { Sell(0,Min(Open,Close1-MinPoint)); MP=0; } } Commentary("上根bar持仓: "+Text(MP[1])); Commentary("本根bar持仓: "+Text(MP)); End

你说的不对 只用程序运行完相关平仓语句,marketposition就会立即刷新为最新状态 你应该考虑一下,是不是开仓语句写在了平仓语句前。按照顺序执行的机制,还没运行止损语句,当然开仓语句是不能执行成功的。 这种问题只要把开仓语句和平仓语句前后顺序换一换,注意一下运行逻辑就行了,很简单的问题。