使用sql计算指数移动平均线

时间:2016-03-04 18:38:56

标签: sql

month   prices
10  $25.15
11  $41.53
12  $72.19
13  $33.16
14  $33.95
15  $43.87

我必须使用 sql 中的上述数据计算指数移动平均线。我不知道该怎么做。 TIA

PS: EMA(n)   =  EMA(n−1) + ( ( 2 / ( n + 1 ) ) × ( P(n) − EMA(n−1) ) )

以上是我们可以采用n = 6;

的公式

1 个答案:

答案 0 :(得分:0)

您的任务中最棘手的部分是在纯SQL中计算聚合产品(因为FYI:有许多标准聚合函数,如Sum(),Min(),Max()等,但没有产品P( ))。一种可能的解决方案描述于:Aggregate Product函数扩展SQL(http://www.codeproject.com/Tips/137564/Aggregate-Product-function-extends-SQL) 基于数学方程:

N           N
P(Xi)= Exp(SUM(Log(Xi)))
i=1         i=1

转换为以下SQL语句:

SELECT Exp(Sum(IIf([Num]=0,0,Log([Num]))))*IIf(Min([Num])=0,0,1) AS P
FROM Table1

您可以将此解决方案应用于您的问题。为了计算运行(移动)avg,您可以构建数据表的自连接,并对当前所有行应用计算。实际实现取决于您使用的特定数据库。

希望这可能会有所帮助。