Финансовые графики в TradingView содержат значение взвешенной скользящей средней (WMA), основанное на ряде прошлых цен на акции.
Я написал метод C# (показанный ниже) для расчета этих значений WMA, чтобы они были точно такими же, как результаты в TradingView, с учетом тех же данных о ценах на акции.
После тестирования моего скрипта я поверил, что вычисляю WMA правильно, и проверил свои результаты на еще один онлайн-калькулятор WMA.
Моя проблема в том, что мои результаты немного отличаются от результатов TradingView, обычно отличаясь точностью до третьего десятичного знака для каждого значения WMA.
Чтобы дать вам реальный пример, вот набор из 10 цен закрытия для Apple с 1 апреля 2020 года:
- 3:00 PM - $241.30
- 2:59 PM - $241.01
- 2:58 PM - $241.04
- 2:57 PM - $241.01
- 2:56 PM - $241.00
- 2:55 PM - $241.15
- 2:54 PM - $241.47
- 2:53 PM - $241.35
- 2:52 PM - $241.61
- 2:51 PM - $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, но я не смог его найти.
Будем признательны за любую помощь или идеи!