Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google sheets GoogleFinance函数用于计算google sheets中的指数移动平均值_Google Sheets_Google Sheets Formula_Moving Average_Google Finance_Google Finance Api - Fatal编程技术网

Google sheets GoogleFinance函数用于计算google sheets中的指数移动平均值

Google sheets GoogleFinance函数用于计算google sheets中的指数移动平均值,google-sheets,google-sheets-formula,moving-average,google-finance,google-finance-api,Google Sheets,Google Sheets Formula,Moving Average,Google Finance,Google Finance Api,我正在使用google sheets和google Finance函数获取股票数据。我能用下面的公式计算一个简单的移动平均线。我试图得到每只股票长度为8,13,21,55的指数移动平均值。关于指数移动平均线公式的任何建议 =AVERAGE(INDEX(GoogleFinance("MSFT","all",WORKDAY(TODAY(),-8),TODAY()),,3)) 编辑: 添加我的谷歌表单体验 我发现这个用户的名字是“Jonathan K 2806” 请尝试以下更简单且可能足够的方法:

我正在使用google sheets和google Finance函数获取股票数据。我能用下面的公式计算一个简单的移动平均线。我试图得到每只股票长度为8,13,21,55的指数移动平均值。关于指数移动平均线公式的任何建议

=AVERAGE(INDEX(GoogleFinance("MSFT","all",WORKDAY(TODAY(),-8),TODAY()),,3))
编辑: 添加我的谷歌表单体验

我发现这个用户的名字是“Jonathan K 2806”

请尝试以下更简单且可能足够的方法:

​​​​/**
 * Calculates the EMA of the range.
 *
 * @param {range} range The range of cells to calculate.
 * @param {number} n The number of trailing samples to give higer weight to, e.g. 30.
 * @return The EMA of the range.
 * @customfunction
 */
function EMA(range, n) {
  if (!range.reduce) {
    return range;
  }

  n = Math.min(n, range.length);
  var a = 2 / (n + 1);

  return range.reduce(function(accumulator, currentValue, index, array) {
    return currentValue != "" ? (currentValue * a + accumulator * (1-a)) : accumulator;
  }, 0);
}

​转到工具->脚本编辑器,将其粘贴到那里,然后点击保存,然后返回电子表格并在单元格中键入=EMA($A2:$A100,10)​ 或者您希望如何使用它。

以下公式用于计算当前指数移动平均值(EMA):

均线=收盘价x衰减\多人游戏+均线(前一天)x (1-U多人游戏)

均线赋予近期价格更高的权重,而常规移动平均线赋予所有价值同等的权重

衰变_多人游戏的选择应大于0且小于1

如果你选择一个更大的数字,就像短期移动平均线(更快的衰减),如果你选择一个更小的数字,就像长期移动平均线

要在google sheet中实现这一点,您必须创建一个新列,表示每天的EMV值。您必须填写第一个EMV值(第一个收盘价),然后使用上述函数根据当前收盘价和以前的EMV值计算每个新的EMV

我在这里创建了一个谷歌表单作为示例:
上述公式在技术上与指数移动平均数不同。 指数衰减函数如下所示。

它通常用于建模随时间衰减的影响,越重的权重越接近的条目(如上所述)。尽管如此,上述公式并不相同

EWMA/EMA的实际形式有所不同,可在此处找到:

上述情况可能被视为指数平滑的一种变体,但实际上并非如此:

就个人而言,我更喜欢使用e^-ax函数加权平均值。我可以控制“a”参数用于早期和后期项目的权重,以便更好地调整权重

currentValueComponent_i=currentValuex*e^-时间_i/Tau 为所需数量的项目添加尽可能多的currentValueComponents。 Tau是元素63%衰减的时间常数,根据加权平均值中包含的项目数,将添加到每个迭代中


资料来源:我是一名工程师。我定期这样做。

最简单的方法是,给定一列
X2:X..
和单元格
Z1
中的权重系数a,指数移动平均值可以在行
Y2:Y..
中递归计算,如下所示:

EMA
=X2
=$Z$1*X3+(1-$Z$1)*(Y2)
=$Z$1*X4+(1-$Z$1)*(Y3)
=$Z$1*X5+(1-$Z$1)*(Y4)
=... # the pattern will repeat itself properly using the drag function 
递归公式如下所述:


当然,这只适用于数据点之间的间隔始终相同的情况。

对Jonathan K的工作进行了一些改进

  • 提高短输入(range.length=1或2)的精度

  • 边界检查

  • 指定输入数组的预期顺序

  • 给出一个可供选择的定义

  • 添加一个测试函数

    /**
    *计算范围的EMA。
    *
    *@param{range}range要计算的单元格范围。新值(更高的权重)应位于左侧。
    *@param{number}n要赋予更高权重的后续样本数,例如30。
    *低于1的值被视为1,它只返回最近的值。
    *@返回该范围的EMA。
    *@customfunction
    */
    函数EMA(范围,n){
    如果(!range.reduce){
    //无法运行ema-保释
    返回范围;
    }else if(range.flat和range.reverse){
    //如果可能,请展平阵列并重新组织,右侧(最后一个)有新值
    //注意:删除。如果输入范围最右边的元素是最新的/需要更高的权重,则相反
    range=range.flat().reverse();
    }
    n=Math.max(n,1);//n的下界为1
    var a=1-(2/(n+1));
    //在现有的a设置中,86%的EMA总重量将属于前n个值。
    
    //a的另一个定义,其中n是需要保留的间隔数(我认为您需要添加更多信息,说明您希望该函数如何执行,不仅仅是数学上的,例如,您希望它看起来有多远。以及它是否需要装入一个单元格,或者是否可以(a)使用用户定义的函数和/或(b)将解决方案放在几个单元格/列上。我也想这样做。你做到了吗?我从中获得的值与我在tradingview中获得的值无关。comIt是一个很长的过程,我找到了这个答案的引用,大麦可以记住它。抱歉,这有一个非常严重的错误,它将一个起始值0添加到累加器。换句话说,累加器中的第一个值并没有得到它的全部重量,只有alpha。在极短的范围内(nfully agree@Barett,我刚刚很长时间根据作者Jonathan K 2806提供了答案,没有改变。你的努力得到了重击