系统案例当中的平仓问题,希望老师可以帮忙解答一下

Params
    Numeric DMI_N(14);                    //DMI的N值
    Numeric DMI_M(6);                    //DMI的M值, 本策略中用不到
    Numeric ADXLevel(25);                //ADX低于此值时被认为行情处于震荡中
    Numeric ADXLowThanBefore(3);        //入场条件中ADX需要弱于之前值的天数
    Numeric ConsecBars(3);                //入场条件中连续阳线或阴线的个数
    Numeric ATRLength(10);                //ATR值
    Numeric ProtectStopATRMulti(0.5);        //保护性止损的ATR乘数
    Numeric ProactiveStopBars(10);        //入场后主动平仓的等待根数
    
Vars
    //DMI最终输出
    Series<Numeric> oDMIPlus;
    Series<Numeric> oDMIMinus;
    Series<Numeric> oDMI;
    Series<Numeric> oADX;
    Series<Numeric> oADXR;
    Series<Numeric> oVolty;
    //DMI过程计算
    Series<Numeric> sDMI;
    Series<Numeric> sADX;
    Series<Numeric> cumm;
    Series<Numeric> sVolty;
    Numeric PlusDM;
    Numeric MinusDM;
    Numeric UpperMove;
    Numeric LowerMove;
    Numeric SumPlusDM(0);
    Numeric SumMinusDM(0);
    Numeric SumTR(0);
    Series<Numeric> AvgPlusDM;
    Series<Numeric> AvgMinusDM;
    Numeric SF;                        // smoothing factor
    Numeric Divisor;
    Numeric i;
    Series<Numeric> TRValue;
    //--------------------
    Series<Numeric> ATR(0);                //ATR值
    Series<Numeric> ConsecBarsCount(0);    //连续阳线或阴线计数
    
    Series<Numeric> ProtectStopL;            //基于ATR的保护性止损
    Series<Numeric> MP;                    //MarketPosition的状态记录
    
Events
    OnBar(ArrayRef<Integer> indexs)
    {
        
        
        //系统设置
        //DMI指标计算, 最终将输出ADX指标
        //--------------------------DMI计算开始-----------------------------------//
        SF = 1/DMI_N;
        TRValue = TrueRange; 
        If(CurrentBar == DMI_N)
        {
                for i = 0 To DMI_N - 1
                {
                        PlusDM = 0 ;
                        MinusDM = 0 ;
                        UpperMove = High[i] - High[ i + 1 ] ;
                        LowerMove = Low[ i + 1 ] - Low[i] ;
                        if (UpperMove > LowerMove And UpperMove > 0 )
                        {
                                PlusDM = UpperMove;
                        }else if (LowerMove > UpperMove And LowerMove > 0)
                        {
                                MinusDM = LowerMove ;
                        }
                        SumPlusDM = SumPlusDM + PlusDM ;
                        SumMinusDM = SumMinusDM + MinusDM ;
                        SumTR = SumTR + TRValue[i] ;
                }
                AvgPlusDM = SumPlusDM / DMI_N ;
                AvgMinusDM = SumMinusDM / DMI_N ;
                sVolty = SumTR / DMI_N ;
        }Else if(CurrentBar > DMI_N)
        {
                PlusDM = 0 ;
                MinusDM = 0 ; 
                UpperMove = High - High[1] ;
                LowerMove = Low[1] -Low ;
                if (UpperMove > LowerMove And UpperMove > 0 )
                {
                        PlusDM = UpperMove;
                }else if (LowerMove > UpperMove And LowerMove > 0 )
                {
                        MinusDM = LowerMove ;
                }
                AvgPlusDM = AvgPlusDM[1] + SF * ( PlusDM - AvgPlusDM[1] ) ;
                AvgMinusDM = AvgMinusDM[1] + SF * ( MinusDM - AvgMinusDM[1] ) ;
                sVolty = sVolty[1] + SF * ( TRValue  - sVolty[1] ) ;
        }Else
        { 
                oDMIPlus = InvalidNumeric;
                oDMIMinus = InvalidNumeric;
                oDMI = InvalidNumeric;
                oADX = InvalidNumeric;
                oADXR = InvalidNumeric;
                oVolty = InvalidNumeric;
        }
        
        if (sVolty > 0)
        {
                oDMIPlus = 100 * AvgPlusDM / sVolty ;
                oDMIMinus = 100 * AvgMinusDM / sVolty ;
        }else
        {
                oDMIPlus = 0 ;
                oDMIMinus = 0 ;
        }
        Divisor = oDMIPlus + oDMIMinus ;
        if (Divisor > 0)
        {
                sDMI = 100 * Abs( oDMIPlus - oDMIMinus ) / Divisor;
        }else
        {
                sDMI = 0 ;
        }
        cumm=Cum( sDMI );
        if(CurrentBar > 0)
        {
                if (CurrentBar <= DMI_N)
                {
                        sADX = Cumm / CurrentBar ;
                        oADXR = ( sADX + sADX[ CurrentBar - 1 ] ) * 0.5 ;
                }else  
                {
                        sADX = sADX[1] + SF * ( sDMI - sADX[1] ) ;
                        oADXR = ( sADX + sADX[ DMI_M - 1 ] ) * 0.5 ;
                }
        }
        oVolty = sVolty;
        oDMI = sDMI;
        oADX = sADX;
        
        //--------------------------DMI计算结束-----------------------------------//
        //ATR计算
        ATR = AvgTrueRange(ATRLength);    
        
        //系统入场
        //当ADX指数低于25且低于ADXLowThanBefore天前的值时, 如果出现连续ConsecBars根阴线(收盘低于前根即可), 则在下根k线开盘做多
        
        ConsecBarsCount = CountIf(Close < Close[1], ConsecBars);
        
        If(MarketPosition<>1 And CurrentBar > DMI_N)
        {
            if(oADX[1] < ADXLevel And oADX[1] < oADX[ADXLowThanBefore+1] And ConsecBarsCount[1] == ConsecBars And Vol > 0)
            {
                Buy(0,Open);
                //基于ATR的保护性止损
                ProtectStopL = Low[1] - ProtectStopATRMulti * ATR[1];
            }
        }
        
        //系统出场
        
        If(MarketPosition == 1 And mp[1] == 1 And Vol > 0)
        {
            //入场ProactiveStopBars根K线后的主动性平仓
            If(BarsSinceEntry >= ProactiveStopBars)
            {
                Sell(0,Open);
            }
            //基于ATR的保护性止损
            Else if(L <= ProtectStopL[1])
            {
                Sell(0,Min(Open, ProtectStopL[1]));
            }
        }
        MP = MarketPosition;
    }

在最后平仓的部分有两个地方没有看懂,希望老师可以帮忙解答一下:

第一个问题其中通过MP引入持仓的函数,在IF语句当中用MP[1] == 1 和marketposition == 1,请问这两者当中有什么区别吗?

问题二:在参数当中声明ProactiveStopBars(10);//入场后主动平仓的等待根数

平仓当中有这样一句,按照我个人的理解是为,当Bar数大于开仓Bar的10根Bar以后平仓,但是导入图表后主动平仓的Bar数大于10根。以上两个问题,希望老师有时间可以帮忙解答一下,感激不尽

//入场ProactiveStopBars根K线后的主动性平仓
            If(BarsSinceEntry >= ProactiveStopBars)
            {
                Sell(0,Open);
            }

尾盘自动平仓失败了,求大神解答一下
关于图表交易系统开平仓撤单问题
请老师解答,TBPY使用问题
希望老师出递进优化的课程
请老师帮忙讲解一下这样写的好处
代码报错,请老师帮忙看一下
求老师帮忙指点一下
回测遇到的2个问题 请老师解答下
老师帮忙写一下Extremes 函数的注解
请教一下老师,模拟测试当中出现交易量大于当前资金可开仓数量,应该如何解决呢?

第一 marketposition不能回溯,为了能取到之前的持仓状态,用一个序列类型mp记录marketposition

第二 并不能复现出持仓时间超过10根的情况,请详细描述公式参数,什么品种,周期等级,信号发生在哪根bar上