自己编写的ema和系统内置的ema计算结果有差异但是不知道原因

如题,因为策略里面不得不在循环中计算ema,而自带的ema必然是要引用序列的,所以采用折中的办法自己写了一个ema的计算函数,用数组把序列数据copy出来算,但是算出来的结果和开拓者自带的总是有误差,希望有大佬能帮忙看一下这个误差是什么导致的。取的数组经过反复验证是符合函数要求且没有问题的。下面是我自己写的函数: Numeric EMA3(Integer n, Array<Numeric> sourceData){ // 数据要求是长度比n大至少5倍,并且过去的数据在前,将来的数据在后 Numeric alpha = 2/(n+1); Numeric EMA3 = sourceData[0]; Integer j; for j = 1 to GetArraySize(sourceData) - 1 { EMA3 = sourceData[j] * alpha + EMASs * (1 - alpha); } Return EMA3; }以jm2601为例子,9月12日收盘后,5分钟线上最新的k线算出来的ema在n为4时的值是1162.23而官方自带的ema值算出来是1162.28,在百分位上差了5了,但是按照ema的计算原理,当数据量在n的5倍时,收敛差距已经在千分位水平了,这个误差显然是有问题的,但是我不知道问题在哪里,请各位大佬指点。

请提供完成的可编译可复现内容