TradingView与NinjaTrader 8自定义EMA计算结果不一致问题求助
TradingView与NinjaTrader 8自定义EMA计算结果不一致问题求助
我参考了TradingView的EMA计算公式,把它适配成了NinjaTrader 8的C#代码,但运行后发现两边的EMA结果始终有细微差异,想请教哪里出了问题?
1. 参考的TradingView Pine Script EMA实现
pine_ema(src, length) => alpha = 2 / (length + 1) sum = 0.0 sum := na(sum[1]) ? src: alpha * src + (1 - alpha) * nz(sum[1])
2. 我自己写的NinjaTrader 8 C#实现
我把上面的逻辑改成了NT8的自定义方法,同时声明了全局变量private double lastEma = 0.0;和private bool isFirstCalculation = true;:
private double CustomEMA(int length) { double alpha = 2.0 / (length + 1.0); if (isFirstCalculation) { double sum = 0.0; for (int i = 0; i < length; i++) { sum += Open[i]; } lastEma = sum / length; isFirstCalculation = false; } else { lastEma = alpha * Open[0] + (1 - alpha) * lastEma; } return lastEma; }
3. 问题:计算结果不一致
我原本觉得代码逻辑是对的,但实际跑出来的数据有明显差异:
TW : 20409.74 NT8 : 20410.55
TW : 20356.14 NT8 : 20356.79
TW : 20310.51 NT8 : 20311.03
TW : 20321.41 NT8 : 20321.83
TW : 20441.98 NT8 : 20442.31
后来我对比了两边的详细日志,确认K线开盘价数据是一致的,但EMA计算从第一个结果开始就出现了偏差:
TradingView 日志(EMA(9))
2024-10-15T00:00:00.000+02:00 ;Open : 20637.5 ;EMA(9) : 20345.0939209805 2024-10-16T00:00:00.000+02:00 ;Open : 20340 ;EMA(9) : 20344.0751367844 2024-10-17T00:00:00.000+02:00 ;Open : 20332 ;EMA(9) : 20341.6601094275 2024-10-18T00:00:00.000+02:00 ;Open : 20385.5 ;EMA(9) : 20350.428087542 2024-10-21T00:00:00.000+02:00 ;Open : 20495.75 ;EMA(9) : 20379.4924700336 2024-10-22T00:00:00.000+02:00 ;Open : 20518.25 ;EMA(9) : 20407.2439760269 2024-10-23T00:00:00.000+02:00 ;Open : 20522.75 ;EMA(9) : 20430.3451808215 2024-10-24T00:00:00.000+02:00 ;Open : 20299.5 ;EMA(9) : 20404.1761446572 2024-10-25T00:00:00.000+02:00 ;Open : 20385 ;EMA(9) : 20400.3409157258 2024-10-27T23:00:00.000+01:00 ;Open : 20524 ;EMA(9) : 20425.0727325806 2024-10-28T23:00:00.000+01:00 ;Open : 20508 ;EMA(9) : 20441.6581860645 NOT ON CHART 2024-10-29T23:00:00.000+01:00 ;Open : 20725 ;EMA(9) : 20498.3265488516 2024-10-30T23:00:00.000+01:00 ;Open : 20486 ;EMA(9) : 20495.8612390813 2024-10-31T23:00:00.000+01:00 ;Open : 20065.25 ;EMA(9) : 20409.738991265 2024-11-01 NOT IN LOG BUT ON CHART 2024-11-04T00:00:00.000+01:00 ;Open : 20141.75 ;EMA(9) : 20356.141193012 2024-11-05T00:00:00.000+01:00 ;Open : 20128 ;EMA(9) : 20310.5129544096 2024-11-06T00:00:00.000+01:00 ;Open : 20365 ;EMA(9) : 20321.4103635277 2024-11-07T00:00:00.000+01:00 ;Open : 20924.25 ;EMA(9) : 20441.9782908222 2024-11-08T00:00:00.000+01:00 ;Open : 21225 ;EMA(9) : 20598.5826326577
NinjaTrader 8 日志(EMA(9))
2024-10-15 23:00:00;OPen : 20637.5;EMA(9) : 20343.5763065492 2024-10-16 23:00:00;OPen : 20340;EMA(9) : 20344.7610452393 2024-10-17 23:00:00;OPen : 20332;EMA(9) : 20349.4088361915 2024-10-18 23:00:00;OPen : 20385.5;EMA(9) : 20376.2270689532 2024-10-21 23:00:00;OPen : 20495.75;EMA(9) : 20404.8816551625 2024-10-22 23:00:00;OPen : 20539;EMA(9) : 20432.30532413 2024-10-23 23:00:00;OPen : 20522.75;EMA(9) : 20389.944259304 2024-10-24 23:00:00;OPen : 20299.5;EMA(9) : 20388.0054074432 2024-10-25 23:00:00;OPen : 20385;EMA(9) : 20410.1543259546 2024-10-28 22:00:00;OPen : 20524;EMA(9) : 20427.5234607637 2024-10-29 22:00:00;OPen : 20508;EMA(9) : 20481.3187686109 2024-10-30 22:00:00;OPen : 20725;EMA(9) : 20492.0050148887 2024-10-31 22:00:00;OPen : 20486;EMA(9) : 20397.954011911 2024-11-01 22:00:00;OPen : 20065.25;EMA(9) : 20349.0132095288 2024-11-04 23:00:00;OPen : 20141.75;EMA(9) : 20296.410567623 2024-11-05 23:00:00;OPen : 20128;EMA(9) : 20305.4784540984 2024-11-06 23:00:00;OPen : 20365;EMA(9) : 20423.1827632787 2024-11-07 23:00:00;OPen : 20924.25;EMA(9) : 20583.496210623
我的疑问
我原本以为初始化部分用length周期的开盘价平均值作为第一个EMA值,后续用EMA递推公式计算是对的,但对比日志发现从第一个计算结果开始就和TV的不一样。而且我确认两边的开盘价数据是一致的,那到底是哪里的逻辑错了?
备注:内容来源于stack exchange,提问作者Stephane Max
相关产品推荐
相关产品推荐

