我的C#加权移动平均结果与TradingView的结果不同,TradingView如何计算WMA?

问题描述 投票:0回答:1

TradingView上的财务图表根据一系列过去的股价提供weighted moving average (WMA)的值。

我已经编写了一个C#方法(如下所示)来计算这些WMA值,因此在给定相同股价数据的情况下,它们与TradingView上的结果完全相同。

测试脚本后,我相信我正在正确计算WMA,并已在another online WMA calculator上验证了我的结果。

我的问题是,我的结果与TradingView的结果略有不同,通常在每个WMA值的精度的小数点后三位。

为您提供一个真实的例子,以下是苹果从2020年4月1日起的10个收盘价:

  1. 3:00 PM-$ 241.30
  2. [2:59 PM-$ 241.01
  3. [2:58 PM-$ 241.04
  4. [2:57 PM-$ 241.01
  5. [2:56 PM-$ 241.00
  6. [2:55 PM-$ 241.15
  7. [2:54 PM-$ 241.47
  8. [2:53 PM-$ 241.35
  9. [2:52 PM-$ 241.61
  10. [2:51 PM-$ 241.57

它们通过“ Prices”对象进入我的脚本(该对象可以包含比实际需要更多的价格值,因此还有额外的“ startIndex”和“ howManyPeriods”参数:]

 public static decimal WeightedMovingAverage(Prices prices, int startIndex = 0, decimal howManyPeriods = -1)
    {
        // Get the correct number of periods
        if (howManyPeriods < 1) howManyPeriods = prices.Count - startIndex;

        // Loop through calculations for the WMA
        decimal numerator = 0, denominator = 0;
        for (int i = 0; i < howManyPeriods; i++)
        {
            Price price = prices[i + startIndex];
            numerator += price.Value * (howManyPeriods - i);
            denominator += i + 1;
        }
        return numerator / denominator;
    }

在此示例中,这10个值产生WMA结果241.16272727

TradingView的wma Pine函数返回241.16324727

[<0.00052]的微小差异...但是这对我来说是个大问题,因为我将此结果用于其他数学运算,并且差异变得更大,因此无法使用。我找不到区别的解释,这使我陷入了停顿。

我怀疑这是Pine中的舍入错误,因为其user manual指定为:

Pine中的浮点数的内部精度为1e-10

我从TradingView或Pine上找到的关于他们如何精确计算其WMA的唯一documentation似乎完全符合我的脚本,因此我没有主意,正在寻求帮助。希望我只是缺少明显的东西!

我最大的猜测是,派恩有一个替代的WMA方程,但我找不到它。

任何帮助或想法都将不胜感激!

TradingView上的财务图表提供了基于一系列过去股价的加权移动平均(WMA)值。我已经编写了一种C#方法(如下所示)来计算这些WMA值,因此它们是...

c# moving-average pine-script tradingview-api computational-finance
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.