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])
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 |
