

刚开始学习咱们系统的量化策略编写
在读咱们系统自带的第一个交易策略 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有什么区别?
可能吗? 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一直相同这种情况?