SummationFC疑问

假设length为10,price为close,currentbar为3那么语句 SumValue = SumValue + Price[Length - 1] *(Length - i);中的 Price[Length - 1] 应该为close[10-1],也就是close[9],而currentbar为3,这个应该是不存在的吧? 另外 Series<Numeric> SumValue(0,3);中的 (0,3)是什么意思啊?//------------------------------------------------------------------------// 简称: SummationFC// 名称: 快速求和// 类别: 用户函数// 类型: 内建函数// 输出: 数值型//------------------------------------------------------------------------Params Series<Numeric> Price(1); //数值型序列值 Integer Length(10); //周期数Vars Series<Numeric> SumValue(0,3); Series<Numeric> MyLength(-1,3); Numeric i;Begin IF(MyLength[1] != Length) //长度变化或第一次运行 变长或变短 { MyLength = Length; If(InvalidInteger() == CurrentBar()) { return InvalidNumeric(); } SumValue = 0; If(CurrentBar() < Length) { For i = 0 To CurrentBar() { SumValue = SumValue + Price[i]; } SumValue = SumValue + Price[Length - 1] *(Length - i); } Else { For i = 0 To Length - 1 { SumValue = SumValue + Price[i]; } } } Else { SumValue = SumValue[1] + Price - Price[Length]; } Return SumValue;End//------------------------------------------------------------------------// 编译版本 GS2010.12.08// 版权所有 TradeBlazer Software 2003-2025// 更改声明 TradeBlazer Software保留对TradeBlazer平// 台每一版本的TradeBlazer公式修改和重写的权利//------------------------------------------------------------------------

如果currentbar是3,计算结果就不正确。所以tb有一个修正机制,如果图表bar数量没到函数需要的最大回溯值,不出信号。 Series<Numeric> SumValue(0,3);中的 (0,3),0是初始值为0,3是最大回溯范围为3

回复:为什么要设置最大回溯3呢? 和设置成为5或者8之类的有什么区别?

回复:代码里最多只回溯了1,所以设置了3设置5和8区别也不是很大。主要是因为回溯是需要内存空间的,回溯越多,需要准备的空间越大。这里限制最大回溯范围,就是为了节省内存空间,提高执行速度。这个限制数值离实际使用越接近,节省越多。但是出意外导致故障的概率也越大。如果你通过各种嵌套导致实际回溯超过了限制值,可能就会出问题