linearTimeTrend

语法

linearTimeTrend(X, window, [intercept=true], [minPeriods])

TA-lib 系列函数参数说明和窗口计算规则请参考: TA-lib 系列

详情

基于数据 X 中的每个元素,向前选取 window 指定范围的窗口计算线性回归。

当 X 中存在空值时,空值处理方式取决于是否指定 minPeriods

  • 未指定 minPeriods 时,第一个非空元素之前的空值不参与计算,对应结果保持为空;第一个非空元素之后的空值按 0 处理。

  • 指定 minPeriods 时,窗口仍按位置滑动,空值保留在窗口中但不参与计算,也不按 0 处理。若窗口内的有效数据个数小于 minPeriods,则该位置输出空值。

参数

X 是一个向量/矩阵/表。

window 是一个大于 1 的正整数,表示滑动窗口长度。

intercept BOOL 类型标量,可选参数,默认值为 true。表示线性回归是否包含截距项。设置为 false 时,仅计算 beta。

minPeriods 整型标量,可选参数,表示窗口中参与计算所需的最少有效数据(非空值)个数。

  • 当未指定 minPeriods 时,第一个非空元素之前的空值不参与计算,对应结果保持为空;第一个非空元素之后的空值按 0 处理。

  • 当指定 minPeriods 时,空值不再按 0 处理。若窗口内的有效数据个数小于 minPeriods,则该位置输出空值。

返回值

一个元组,包含两个元素 alpha 和 beta,对应 talib 中的 linearreg_intercept(线性回归截距)和 linearreg_slope(线性回归斜率指标)

例子

例 1. 通过 intercept 参数设置是否进行含截距的线性回归。

x = 3 3 5 7 8 9 10 11 15 13 12 11 10

// 默认 intercept=true,包含截距
linearTimeTrend(x, 3)
// output: ([,,2.666666666666666,3,5.166666666666667,7,8,9,9.5,12,14.833333333333333,13,12],[,,1,2,1.5,1,1,1,2.5,1,-1.5,-1,-1])

// intercept=false,不包含截距,alpha 返回空
linearTimeTrend(x, 3, false)
// output: ([,,,,,,,,,,,,],[,,2.6,3.8,4.6,5.200000000000001,5.8,6.400000000000001,8.199999999999999,8.199999999999999,7.400000000000001,6.8,6.200000000000001])
例2. 使用 minPeriods 参数控制窗口内最少有效数据个数。
x = NULL NULL 3 NULL 5 7 8
linearTimeTrend(x, 3)
// output: ([,,,,1.666666666666667,0.5,5.166666666666667],[,,,,1,3.5,1.5])

// 指定 minPeriods=3:窗口内有效数据不足 3 个时输出空值
linearTimeTrend(x, 3, true, 3)
// output: ([,,,,,,5.166666666666667],[,,,,,,1.5])

例3.

n = 10
t = table(09:00:00 + 1..n as time, rand(`A`B, n) as sym, rand(100.0, n) as val1, rand(1000..2000, n) as val2)
select time, sym, linearTimeTrend(val1, 3) as `alpha`beta from t
time sym alpha beta
09:00:01 B
09:00:02 A
09:00:03 A 85.0844 -30.0688
09:00:04 B 49.3461 7.3621
09:00:05 B 30.4248 28.3589
09:00:06 A 83.106 -7.7515
09:00:07 B 78.4412 -17.7575
09:00:08 A 56.8575 4.4732
09:00:09 A 53.8492 -6.0653
09:00:10 A 61.7888 -4.5586