MACD指标TV和FMZ不一致的原因分析(+手写EMA指标)

Author: 老胡, Created: 2021-09-24 16:18:35, Updated:

今天翻译一个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; }


More

老胡 今天我又在策略中用到这个指标,比较后发现日线和TV中相差不大,甚至完全一致,但低级别的差别很大,最后一翻尝试,也有了些收获。

老胡 下面有朋友留言说无所谓、实际这个是要看需求的、如果自己或者客户有这个需求、对我们做开发的人来说,不管它有用没用,你都得认认真真搞明白的。

syue 只要不是高频,趋势类策略不必计较晚点进场早点进场,如果非常在意这些说明策略容错能力有问题,那么指标就更无所谓了

syue 只要不是高频,趋势类策略不必计较晚点进场早点进场,如果非常在意这些说明策略容错能力有问题,那么指标就更无所谓了

syue 只要不是高频,趋势类策略不必计较晚点进场早点进场,如果非常在意这些说明策略容错能力有问题,那么指标就更无所谓了

小小梦 「TV中的第1根K线和FMZ中的第1根K线不是同一个时间」具体是指? K线长度不对等也不影响指标计算的,只要K线数据一样。

轻轻的云 好哒~~~~~~

小小梦 如果K线数据一样,只是多一根少一根, 不应该差别很大的。。。

轻轻的云 胡哥,那么会不会 FMZ 的 SuperTrend 的指标和TV的总是晚一根K线时间,也是这个原因呢??? 这个问题总是会影响到下单 或者 转向的机会的滞后。。。。愁死我了。。。

轻轻的云 胡哥,梦大,那么会不会 FMZ 的 SuperTrend 的指标和TV的总是晚一根K线时间,也是这个原因呢??? 这个问题总是会影响到下单 或者 转向的机会的滞后。。。。愁死我了。。。

小小梦 是K线数据BAR数量不一样,会影响迭代计算的数值。 对应的BAR数据是一样的。

老胡 影响的,每一根都有权重,比如小时线、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)/2*1/3+C3*2/3,完全不同的,