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公式修改和重写的权利

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

KDJ中为何有SummationFC函数?
疑问
A_GetOpenOrderCount()疑问
算法代理疑问
运行机制的疑问
关于OnTimer的疑问
关于setbaseperiod的几个疑问
TB算法代理参数疑问
SetBeginBarMaxCount疑问
疑问救助

如果currentbar是3,计算结果就不正确。

所以tb有一个修正机制,如果图表bar数量没到函数需要的最大回溯值,不出信号。

Series<Numeric> SumValue(0,3);中的 (0,3),0是初始值为0,3是最大回溯范围为3

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

代码里最多只回溯了1,所以设置了3

设置5和8区别也不是很大。

主要是因为回溯是需要内存空间的,回溯越多,需要准备的空间越大。

这里限制最大回溯范围,就是为了节省内存空间,提高执行速度。

这个限制数值离实际使用越接近,节省越多。

但是出意外导致故障的概率也越大。

如果你通过各种嵌套导致实际回溯超过了限制值,可能就会出问题