同根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
 

开仓后无法平仓
增加止盈止损后,原位置不开仓了
开仓后,如何记录开仓价前一根棒的最低价作为止损
开仓K实时开仓,并同K实时止损
账户空仓,开实盘后是居然先平仓再开仓。问题出在哪里?
如何写:在X根K线内触发过条件A后,满足条件B开仓
同一根bar反向开仓2次问题
开仓后,如何从开仓价格开始画横线
手动开仓后,想自己移动止盈,还有固定止损
如何用ATR和实盘权益计算开仓手数

你说的不对

只用程序运行完相关平仓语句,marketposition就会立即刷新为最新状态

你应该考虑一下,是不是开仓语句写在了平仓语句前。按照顺序执行的机制,还没运行止损语句,当然开仓语句是不能执行成功的。

这种问题只要把开仓语句和平仓语句前后顺序换一换,注意一下运行逻辑就行了,很简单的问题。