TradingView上的财务图表根据一系列过去的股价提供weighted moving average (WMA)的值。
我已经编写了一个C#方法(如下所示)来计算这些WMA值,因此在给定相同股价数据的情况下,它们与TradingView上的结果完全相同。
测试脚本后,我相信我正在正确计算WMA,并已在another online WMA calculator上验证了我的结果。
我的问题是,我的结果与TradingView的结果略有不同,通常在每个WMA值的精度的小数点后三位。
为您提供一个真实的例子,以下是苹果从2020年4月1日起的10个收盘价:
它们通过“ 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值,因此它们是...