如题,因为策略里面不得不在循环中计算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倍时,收敛差距已经在千分位水平了,这个误差显然是有问题的,但是我不知道问题在哪里,请各位大佬指点。
请提供完成的可编译可复现内容