Мой результат взвешенного скользящего среднего C# отличается от результата TradingView, как TradingView вычисляет WMA?
Финансовые графики на TradingView предоставляют значение взвешенной скользящей средней (WMA) на основе ряда прошлых цен на акции.
Я написал метод C# (показан ниже) для вычисления этих значений WMA, поэтому они точно такие же, как результаты в TradingView, при тех же данных о ценах на акции.
После тестирования моего сценария я считаю, что рассчитываю WMA правильно, и проверил свои результаты на другом онлайн-калькуляторе WMA.
Моя проблема в том, что мои результаты немного отличаются от результатов TradingView, обычно различаются точностью до третьего десятичного знака для каждого значения WMA.
Чтобы дать вам реальный пример, вот набор из 10 цен закрытия для Apple с 1 апреля 2020 года:
- 15:00 - 241,30 доллара США
- 14:59 - 241,01 доллара США
- 14:58 - 241,04 доллара
- 14:57 - 241,01 доллара США
- 14:56 - 241 доллар США
- 14:55 - 241,15 доллара США
- 14:54 - 241,47 доллара
- 14:53 - 241,35 доллара
- 14:52 - 241,61 доллара
- 14: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, но я не смог его найти.
Любая помощь или идеи будут приняты с благодарностью!
1 ответ
См. Справочник v4 для расчета: https://www.tradingview.com/pine-script-reference/v4/