我目前正在研究J的一些示例,并正在尝试进行指数移动平均。
对于简单的移动平均线,我做了如下操作:
sma =: +/%[
给出以下内容:
5 sma 1 2 3 4 5
1.2 1.4 1.6 1.8 2
经过更多的挖掘,我找到了q中指数移动平均线的一个例子。
.q.ema:{first[y]("f"$1-x)\x*y}
我尝试使用以下代码将此移植到J:
ema =: ({. y (1 - x)/x*y)
但是这会导致以下错误:
domain error
| ema=:({.y(1-x) /x*y)
这是x = 20
,y
是由20个随机数组成的数组。
我注意到的一些事情可能会对您有所帮助。
1]当您明确声明动词时,您需要使用:
显式连词,在这种情况下,由于您有二元动词,因此正确的形式为4 : 'x contents of verb y'
您对sma =: +/%[
的第一个定义是默认的,因为没有显示x
或y
变量。
ema =: 4 : '({. y (1 - x)/x*y)'
2)我不知道q,但是在J中,好像您要在整数/
列表中插入1 - x
一个名词x * y
。我猜您真的要除以%
。您可以使用gerunds作为Insert的参数,但是它们是表示动词的特殊名词,1 - x
不表示动词。
ema =: 4 : '({. y (1 - x)%x*y)'
3)下一个问题是,您将创建一个带有(1 - x) % x * y
的数字列表,但是此时y
是一个与数字列表相邻的数字,而没有动词之间将是一个错误。也许您打算使用y * (1 - x)%x*y
?
目前,我不确定您想要指数移动平均线做什么,希望我提供的线索能为您提供所需的推动力。