全部 TBQuant功能 TBL语言 TB开户 问答专区 其他
请教一个自建函数的写法
Jswake 分享到
2021-04-12 13:39

/------------------------------------------------------------------------
// 简称: LinearReg
// 名称: 求线性回归
// 类别: 用户函数
// 类型: 内建函数
// 输出: 布尔型
//------------------------------------------------------------------------
Params
    Series<Numeric> Price(1);    //数值型序列值
    Numeric Length(10);         //周期数
    Numeric TgtBar(0);            //Bar偏移
    NumericRef LRSlope;         //斜率返回值
    NumericRef LRAngle;            //角度返回值
    NumericRef LRIntercept;        //Y轴截距返回值
    NumericRef LRValue;            //回归返回值
Vars
    Numeric SumXY(0);
    Numeric SumY;
    Numeric SumX; 
    Numeric SumXSqr;
    Numeric Divisor;
    Numeric i;
Begin
    if (Length > 1)
    {
        SumX = Length * ( Length - 1 ) * 1/2;
        SumXSqr = Length * ( Length - 1 ) * ( 2 * Length - 1 ) * 1/6 ;    
        Divisor = Sqr( SumX ) - Length * SumXSqr ;            
        SumY = Summation( Price, Length ) ;
        for i = 0 to Length - 1 
        {
            SumXY = SumXY + i * Price[i] ;
        }
        
        LRSlope = ( Length * SumXY - SumX * SumY) / Divisor ;
        LRAngle = Atan ( LRSlope ) ;
        LRIntercept = ( SumY - LRSlope * SumX ) / Length ;
        LRValue = LRIntercept + (Length - 1 - TgtBar)*LRSlope;
        Return True;
    }Else
    {
        Return False;
    }
End

这是系统自带的线性回归,在旗舰版中运用的时候直接使用

LinearReg(close,length,X,X,X,X,X,);就能得到赋值结果。但是在TBQ里面不行,提示序列变量回溯不能传参给引用类型,如何解决?

Jswake

Vars
    //此处添加变量
    Series<Numeric> LRSlope(0);
    Series<Numeric> LRIntercept(0);
    Series<Numeric> LRAngle(0);
    Series<Numeric> LRValue(0);

应用的设定里是这么写的

2021-04-12 13:52
kyover

请把具体应用的代码贴出来 这个一定是你语法错了

2021-04-12 13:46
Jswake
@kyover

LinearReg(close,Length,0,LRSlope,LRAngle,LRIntercept,LRValue);

这就是我应用的代码,就这一行,旗舰版里这么写没问题

2021-04-12 13:50
您未登录,请先 登录注册 后发表评论
顶部