期货软件TB系统源代码解读系列26-TSF

TSF时序预测指标,这指标我没用过,百度找它的算法也没找着,到是在外国 站看到了一些内容,可哥们看代码还行,看外文就只能借助翻译工具了,但翻译出来的不伦不类的,也懒得去组织内容了。我看了这指标代码,算法也不复杂,就一个求线性回归罢了,数学好点的,看一下就明白,实在不行的,就跟我一样用笨方法,一条条记下来,算一遍就明白的。

在说线性回归代码前,先看它用到的求和函数Summation代码,直接附上了,这个之前也解读过了,如下:

Params

NumericSeries Price(1);

Numeric Length(10);

Vars

Numeric SumValue(0);

Numeric i;

Begin

SumValue = 0;

for i = 0 to Length – 1

{

SumValue = SumValue + Price[i];

}

Return SumValue;

End

接下来就是真正需要解读的求线性回归函数LinearReg的代码了,解读如下:

Params

NumericSeries Price(1);//声明数值序列参数Price,初值为1.//

Numeric Length(10);//声明数值参数Length,初值为10.//

Numeric TgtBar(0);//声明数值参数TgtBar,初值为0.//

NumericRef LRSlope; //声明引用参数LRSlope。//

NumericRef LRAngle;//声明引用参数LRAngle。//

NumericRef LRIntercept;//声明引用参数LRIntercept。//

NumericRef LRValue;//声明引用参数LRValue。//

Vars

Numeric SumXY(0);//声明数值变量SumXY,初值为0.//

Numeric SumY;//声明数值变量SumY。//

Numeric SumX; //声明数值变量SumX。//

Numeric SumXSqr;//声明数值变量SumXSqr。//

Numeric Divisor;//声明数值变量Divisor。//

Numeric i;//声明变量i。//

Begin

if (Length > 1)//假如周期参数Length(初值10)大于1成立,执行下列代码了。//

{

SumX = Length * ( Length – 1 ) * 1/2;//直接代入数值,变量SumX = 10 * (10-1)* 1 / 2。//

SumXSqr = Length * ( Length – 1 ) * ( 2 * Length – 1 ) * 1/6 ;//变量SumXSqr = 10 *(10-1)*(2*10-1)*1/6.//

Divisor = Sqr( SumX ) – Length * SumXSqr ;//这里只看Sqr函数了,即算括 里数值的平方。相关数据上两行已经算出来了,这一行也就是代入直接读就行了。//

SumY = Summation( Price, Length ) ;//这里就是把价格Price与周期Length,返回函数求和就行了,最后把得到的值返回来赋值给变量SumY了。//

for i = 0 to Length – 1 //循环语句,即变量 i 从0到 9执行花括 求值,直到跳出循环了。//

{

SumXY = SumXY + i * Price[i] ;//比如第一个0代入,SumXY = 0 + 0 * Price[0];再接着循环第二个值1,SumXY = 0 + 0 * Price[0] + 1 * Price[1];第三个2,SumXY= 0 + 0 * Price[0] + 1 * Price[1] +2 * price[2]…这就是累加起来的循环求和罢了,直到变量 i =10,不符合条件了,直接跳出来,接着执行下面代码。//

}

LRSlope = ( Length * SumXY – SumX * SumY) / Divisor ; //你说这公式里还有哪个值没求出来的,也是直接代入数据求值了,即可得出引用参数LRSlope值。//

LRAngle = Atan ( LRSlope ) ; //这里Atan函数,意思是返回参数的反正切值,比如Atan (1) = 0.785398这意思理解了吧,这个函数是TB系统自带的函数名,只要理解它意思就行了。这代入引用参数LRSlope数值不就可以求出引用参数LRAngle值 了嘛。//

LRIntercept = ( SumY – LRSlope * SumX ) / Length ; //这个也是直接把上面算得的相应数值代入公式,算得出LRIntercept值来。//

LRValue = LRIntercept + (Length – 1 – TgtBar)*LRSlope;//这引用参数LRValue,也是如此了。//

Return True; //返回真值,即把四个引用参数数值返回给主函数了。//

}Else//这是假如周期Length >1,不成立情况下。//

{

Return False;//返回假值,就是没有返回值了。//

}

End

这一步步也就是数值代入,算下来不难吧,代码也就是这么一回事了。我们来看TSF时序预测指标代码了,这更简单,都是直接把参数返回线性回归函数LinearReg,直接得出相应值来的。代码如下:

Params

Numeric Length(9);

Numeric TgtBar(7) ;

Vars

Numeric oLRSlope( 0 );

Numeric oLRAngle( 0 );

Numeric oLRIntercept( 0 );

Numeric oLRValue( 0 ) ;

Begin

LinearReg( Close, Length, TgtBar, oLRSlope, oLRAngle, oLRIntercept, oLRValue ) ; //记得规则吧,线性回归有声明了多少个参数,这括 里就得有对应的多少个参数。//

PlotNumeric(“TSP”,oLRValue);//画线TSP,值为oLRValue值。//

End

添加到超级图表上,你会发现它跟移动均线很相像,从这我们可以考虑一下,能不能做成跟移动均线一样的程序化系统的,结果会不会不错呢?有兴趣的朋友自己试试了,添加一下买卖条件就行。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2018年7月3日
下一篇 2018年7月4日

相关推荐