我想将一个 pine 脚本的 linreg 函数传输到 php,我需要一些帮助,哪些值被准确地传递给了 linreg 函数。
即我在 pine-script 中的 linreg 函数如下所示:
linreg(close, 20, 0)
为了在 php 中计算线性回归,我有以下函数:
public static function linear_regression($x, $y) {
// calculate number points
$n = count($x);
// ensure both arrays of points are the same size
if ($n != count($y)) {
trigger_error("linear_regression(): Number of elements in coordinate arrays do not match.", E_USER_ERROR);
}
// calculate sums
$x_sum = array_sum($x);
$y_sum = array_sum($y);
$xx_sum = 0;
$xy_sum = 0;
for($i = 0; $i < $n; $i++) {
$xy_sum+=($x[$i]*$y[$i]);
$xx_sum+=($x[$i]*$x[$i]);
}
// calculate slope
$m = (($n * $xy_sum) - ($x_sum * $y_sum)) / (($n * $xx_sum) - ($x_sum * $x_sum));
// calculate intercept
$b = ($y_sum - ($m * $x_sum)) / $n;
// return result
return array("m"=>$m, "b"=>$b);
}
我现在的问题是我必须将哪些数据传递给我的 php 函数才能获得与 pine 脚本中相同的结果。
最佳答案
我已经根据您的 PHP 脚本创建了一个纯 Pine linreg 函数。这会产生与内置 ta.linreg 完全相同的结果。
pine_linreg(src, len, offset=0) =>
// These are constants, we need to calculate them only on the 1st bar
var float x_sum = 0.0
var float xx_sum = 0.0
if bar_index == 0
for i = 0 to len - 1
x_sum += i
xx_sum += i * i
y_sum = math.sum(src, len)
xy_sum = 0.0
for i = len - 1 to 0
xy_sum += i * src[len - 1 - i]
// slope
slope = (len * xy_sum - x_sum * y_sum) / (len * xx_sum - x_sum * x_sum)
// intercept
intercept = (y_sum - slope * x_sum) / len
linreg = intercept + slope * (len - 1 - offset)
诀窍在于 x 数组是时间轴,并且总是 [0, 1, ..., len-1]。 y 数组是源。然后你应该使用的公式是 pine 函数的最后一行,也记录在 ta.linreg 的文档中。
关于php - pine-script linreg 函数如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65541564/