序列变量取值问题

刚开始学习咱们系统的量化策略编写

在读咱们系统自带的第一个交易策略 VolumeWeightedMomentumSys_S 时,发现一个问题SEPrice 变量无论在哪根K线上的SEPrice[1]和SEPrice值都是相同的。如上图:

AATR 和 SEPrice 两个都是序列变量,在K线上输出第一和第二个值时,AATR变量值AATR[1]和AATR两个的值时不同的,符合认知。但是SEPrice 变量无论在哪根K线上的SEPrice[1]和SEPrice值都是相同的。但实际明明是有变化的。只有输出SEPrice[2]和SEPrice时,才能确定出现变化的K线。这是为什么?这样的情况下策略中变量取值用SEPrice[1]和SEPrice有什么区别?

序列数组变量如何按索引取值
关于序列变量的问题
序列变量,递归问题
简语言也有序列变量的问题??
序列变量
关于函数里面序列变量的使用问题
数组和变量序列相互赋值问题
序列变量求解
序列变量和全局变量区别
关于序列变量函数和if

可能吗? SEPrice[1] 和 SEPrice永远一样,  SEPrice和SEPrice[2] 不一样?

值是传递的,必然有一个节点会改变这个值

那么节点在哪里? 肯定是赋值的时候

正常理解是这样,必然有一个节点。但是我这样输出的结果确实是一样的。

以下是完整代码

// 名称: 成交量加权动量交易系统 空

//----------------------------------------------------------------------//

Params

   Numeric MomLen(5);                                                 //UWM参数

   Numeric AvgLen(20);                                             //UWM参数

   Numeric ATRLen(5);                                                 //ATR参数

   Numeric ATRPcnt(0.5);                                             //入场价格波动率参数

   Numeric SetupLen(5);                                            //条件持续有效K线数

Vars

   Series<Numeric> VWM(0);

   Series<Numeric> AATR(0);  

   Series<Numeric> SEPrice(0);  

   Series<Bool> BullSetup(False);

   Series<Bool> BearSetup(False);

   Series<Numeric> SSetup(0);

Events

   OnBar(ArrayRef<Integer> indexs)

   {

       

       

       VWM = XAverage(Vol * Momentum(Close, MomLen), AvgLen);            //定义UWM

       AATR = AvgTrueRange(ATRLen);                                    //ATR

       BullSetup = CrossOver(VWM,0);                                    //UWM上穿零轴定义多头势

       BearSetup = CrossUnder(VWM,0);                                    //UWM下穿零轴定义空头势

       Commentary("BullSetup" + IIFString(BullSetup,"true","false"));

       Commentary("BearSetup" + IIFString(BearSetup,"true","false"));

       Commentary("SEPrice" + Text(SEPrice));

       Commentary("SEPrice[1]" + Text(SEPrice[1]));

       Commentary("AATR" + Text(AATR));

       Commentary("AATR[1]" + Text(AATR[1]));

       PlotNumeric("SEPrice", SEPrice);

       If (BearSetup )                                                 //空头势开始计数并记录当前价格

       {

           SSetup = 0;

           SEPrice = Close;

       }

       Else    SSetup = SSetup[1] + 1;                                        //每过一根BAR计数    

       //系统入场

       If (CurrentBar > AvgLen And MarketPosition == 0 ) //当空头势满足并且在SetupLen的BAR数目内,当价格达到入场价格后,做空

       {

           If( Low <=SEPrice[1] - (ATRPcnt * AATR[1]) And SSetup[1] <= SetupLen And SSetup >= 1 And Vol > 0)

           {

               SellShort(0, Min(Open,SEPrice[1] - (ATRPcnt * AATR[1]))) ;

           }

       }

       //系统出场

       If (MarketPosition == -1 And  BarsSinceEntry > 0 And Vol > 0)  //多头势平掉空单

       {

           If( BullSetup[1] == True )

           {

               Buytocover(0,Open);

           }

       }

   }

或者说我重新描述一下,换个问法:

我在K线上输出SEPrice[1] 和 SEPrice这两个值,一直是一样的。

输出SEPrice[1] 和 SEPrice[2]这两个值才能发现这个节点。

为什么会出现SEPrice[1] 和 SEPrice一直相同这种情况?