You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 02:58:05