今天翻译一个TV的策略、用到了MACD指标、对比FMZ和TV,趋势是一致,但具体数值差别还是有点大、为了找出原因、我花了一个晚上的功夫、做了不少的尝试:
依次使用:TA.MACD,talin.MACD, 以及社区中开源的一个指标库、
对比结果:上面3个完全一致、
但与回测页面中TV图表MACD不一致、
MACD实际是EMA指标进一步计算得到的,为了简化问题分析、我把对MACD的比较、换成对EMA的比较、
但对比后发现也是不一致、我开始怀疑是EMA算法FMZ和TV不一致、
翻看了TV对EMA算法的介绍、自己手工写了一个EMA的指标算法(附最后)
再次对比、发现还是和直接用TA.EMA一致,没有任何差别。
难道是数据源的问题?
为了进一步简化分析、我将EMA的参数改成2、回测范围缩短、图表拉到最左边、我想从第一根K线开始比较EMA值、看最后到底是什么时候开始这个值不一致的、
当我拉到第一根时,却惊奇的发现TV中的第1根K线和FMZ中的第1根K线不是同一个时间,TV的要往前多出来一根、
这样的话、从第1根起这个EMA值就已经不一样了,而后面的每一根的EMA都对前面的EMA值有一定的权重、
这也就难怪后面所有的数据都不一致、分析至此结束、原因很奇葩、但总算是找到了。
function whl_ema(src, length) {
var arr = [];
var sum = 0;
var alpha = 2 / (length + 1)
for(var i in src){
if(i<length-1) {
arr[i] = null;
sum += src[i];
}else if(i==length-1){
arr[i] = (sum+src[i])/length;
}else{
arr[i] = alpha * src[i] + (1 - alpha) * arr[i-1]
}
}
return arr;
}
影响的,每一根都有权重,比如小时线、TV中是第1根是:12:00,而FMZ中第1根是13:00,差了1根,这样计算时,假设EMA参数为2,这样计算第3根K线(FMZ中是第2根)的EMA,FMZ中EMA = (C2+C3)/2,而TV中EMA=(C1+C2)/21/3+C32/3,完全不同的,
- 1

