0

TradingView上的财务图表提供基于一系列过去股票价格的加权移动平均 (WMA)值。

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

在测试了我的脚本后,我相信我正确地计算了 WMA,并在另一个在线 WMA 计算器上验证了我的结果。

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

举一个现实生活中的例子,以下是苹果自 2020 年 4 月 1 日起的 10 个收盘价:

  1. 下午 3:00 - 241.30 美元
  2. 下午 2 点 59 分 - 241.01 美元
  3. 下午 2:58 - 241.04 美元
  4. 下午 2 点 57 分 - 241.01 美元
  5. 下午 2:56 - 241.00 美元
  6. 下午 2:55 - 241.15 美元
  7. 下午 2 点 54 分 - 241.47 美元
  8. 下午 2 点 53 分 - 241.35 美元
  9. 下午 2 点 52 分 - 241.61 美元
  10. 下午 2:51 - 241.57 美元

它们通过“价格”对象进入我的脚本(它可以包含比实际需要更多的价格值,因此额外的“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 的舍入错误,因为他们的用户手册指定:

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

我从 TradingView 或 Pine 找到的关于他们如何计算 WMA的唯一文档似乎与我的脚本完美匹配,所以我没有想法,正在寻求帮助。希望我只是错过了一些明显的东西!

我最好的猜测是 Pine 有一个替代的 WMA 方程,但我一直没能找到它。

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

4

1 回答 1

0

See the v4 refman for the calculation: https://www.tradingview.com/pine-script-reference/v4/#fun_wma

于 2020-04-03T05:38:53.103 回答