期货程序化 函数ref 没有被声明(期货程序化交易合法吗)
日期:2023年04月22日 08:31 浏览量:1
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
添加到超级图表上,你会发现它跟移动均线很相像,从这我们可以考虑一下,能不能做成跟移动均线一样的程序化系统的,结果会不会不错呢?有兴趣的朋友自己试试了,添加一下买卖条件就行。
推荐阅读
-
芯片软件题材股票有哪些(芯片 软件)
2023-04-22
//声明数值序列参数Price,初值为1.//Numeric Length(10)
-
用友 portal(用友网络)
2023-04-22
//声明数值序列参数Price,初值为1.//Numeric Length(10)
-
金店加工黄金吗(金店加工黄金首饰)
2023-04-22
//声明数值序列参数Price,初值为1.//Numeric Length(10)
-
动力煤809期货(动力煤2109期货社区讨论)
2023-04-22
//声明数值序列参数Price,初值为1.//Numeric Length(10)
-
海蜇怎么做(海蜇怎么做好吃又简单方便)
2023-04-22
//声明数值序列参数Price,初值为1.//Numeric Length(10)
-
用友软件索引被破坏(用友软件索引被破坏怎么办)
2023-04-22
//声明数值序列参数Price,初值为1.//Numeric Length(10)