J 中的指数移动平均线

Exponential moving average in J

我目前正在研究 J 的一些示例,并且正在尝试计算指数移动平均线。

对于简单移动平均线,我做了如下操作:

sma =: +/%[

给出以下内容:

5 sma 1 2 3 4 5
1.2 1.4 1.6 1.8 2

经过更多挖掘,我发现了 q 中指数移动平均线的示例。

.q.ema:{first[y]("f"-x)\x*y}

我尝试使用以下代码将其移植到 J:

ema =: ({. y (1 - x)/x*y)

但是这会导致以下错误:

domain error
|   ema=:({.y(1-x)    /x*y)

这是 x = 20y 20 个随机数的数组。

我注意到的一些事情可能会对您有所帮助。

1) 当你显式声明一个动词时,你需要使用 : 显式连词,在这种情况下,因为你有一个二元动词,正确的形式是 4 : 'x contents of verb y' 你对 [ 的第一个定义=14=] 是默认的,因为没有显示 xy 变量。

ema =: 4 : '({. y (1 - x)/x*y)'

2) 我不知道 q,但在 J 中,您似乎在尝试将 / 一个名词 1 - x 插入到整数列表 x * y 中。我猜你真的想除 %。您可以使用动名词作为 Insert 的参数,但它们是表示动词的特殊名词,1 - x 不表示动词。

ema =: 4 : '({. y (1 - x)%x*y)'

3) 下一个问题是,您本来可以用 (1 - x) % x * y 创建一个数字列表,但此时 y 是一个与数字列表相邻的数字,中间没有动词将是一个错误。也许您打算使用 y * (1 - x)%x*y

此时我不确定您希望指数移动平均线做什么,希望我提供的线索能为您提供所需的动力。