TradingView上的财务图表提供基于一系列过去股票价格的加权移动平均 (WMA)值。
我编写了一个 C# 方法(如下所示)来计算这些 WMA 值,因此在给定相同股票价格数据的情况下,它们与 TradingView 上的结果完全相同。
在测试了我的脚本后,我相信我正确地计算了 WMA,并在另一个在线 WMA 计算器上验证了我的结果。
我的问题是我的结果与 TradingView 的结果略有不同,通常在每个 WMA 值的精度小数点后第三位不同。
举一个现实生活中的例子,以下是苹果自 2020 年 4 月 1 日起的 10 个收盘价:
- 下午 3:00 - 241.30 美元
- 下午 2 点 59 分 - 241.01 美元
- 下午 2:58 - 241.04 美元
- 下午 2 点 57 分 - 241.01 美元
- 下午 2:56 - 241.00 美元
- 下午 2:55 - 241.15 美元
- 下午 2 点 54 分 - 241.47 美元
- 下午 2 点 53 分 - 241.35 美元
- 下午 2 点 52 分 - 241.61 美元
- 下午 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 方程,但我一直没能找到它。
任何帮助或想法将不胜感激!