Этот пост действительно стоит прочитать. Доступна другая лучшая версия этой темы здесь.
Если вы посмотрите на таблицу ниже, я пытаюсь найти среднюю цену для каждой транзакции без добавления вспомогательных столбцов. Средняя цена верна, когда на стороне Купить, но показывает неверную среднюю цену на стороне Продажа, для которой я ищу формулу, формулу массива или UDF для средней цены. столбец.
Date | Side | Qty | Price | Value | Holding | Avg Price |
---|---|---|---|---|---|---|
1-Jul | Buy | 225 | 10000 | 2250000 | 225 | 10000 |
2-Jul | Buy | 75 | 10200 | 765000 | 300 | 10050 |
3-Jul | Sell | -150 | 9950 | -1492500 | 150 | 10150 |
Формула для Value у меня есть =E3*D3
, для Holding — =SUM($D$3:D3)
, а для Средней цены — =SUMPRODUCT($D$3:D3,$E$3:E3)/SUM($D$3:$D3)
, которую я перетащил вниз. Вроде все правильно, кроме последнего значения 10150. В идеале должно быть 10 100 в соответствии с приведенной ниже логикой FIFO.
1-й заказ: Количество = 225 | Цена = рупий. 10 000,00
2-й заказ: Количество = 75 | Цена = рупий. 10 200,00
Чтобы рассчитать среднюю цену, сначала рассчитайте значение (Количество x Цена). Следовательно:
1-я сделка: руб. 22 50 000,00
2-я сделка: рупий. 7 65 000,00
Общее количество = 300
Общая стоимость первых двух заказов: 100 000 руб. 30,15,000.00
Разделите общую стоимость на общее количество:
рупий 30 15 000,00 ÷ 300 = 10 050,00 рупий (используя формулу =sumproduct
)
3 июля мы разместили ордер на продажу 150 (из 300). Цена: рупий. 9 950,00
Теперь здесь будет применяться метод FIFO (first in first out). Метод проверит первую сделку (на стороне покупки). В данном случае это 225. 150 проданных акций будут вычтены из 225 (первое владение). Баланс, оставшийся от первого владения, который ранее составлял 225, теперь будет 225 - 150 = 75.
После FIFO таблица преобразуется таким образом после вычета количества продажи. См. первое количество, измененное с 225 до 75, потому что было продано 150 акций.
Date | Side | Qty | Price | Value | Holding | Avg Price |
---|---|---|---|---|---|---|
1-Jul | Buy | 75 | 10000 | 750000 | 75 | 10000 |
2-Jul | Buy | 75 | 10200 | 765000 | 150 | 10100 |
Обратите внимание: если бы количество проданных товаров превышало 225, то было бы принято решение перейти к следующей сделке, чтобы вычесть оставшееся количество.
Теперь, чтобы получить решение этой проблемы, необходимы дополнительные вспомогательные столбцы или вспомогательные таблицы, которые я хочу искоренить и найти формулу, формулу массива или UDF для расчета средней цены. Прошу специалистов Excel помочь мне с этой проблемой.
Еще один пример того, что я пытаюсь сделать, приведен ниже, где вложенная цена показывает неверную:
Date | Side | Qty | Price | Value | Holding | Avg Price |
---|---|---|---|---|---|---|
1-Jul | Buy | 5 | 10 | 50 | 5 | 10 |
2-Jul | Sell | -3 | 17 | -51 | 2 | -0.5 |
3-Jul | Buy | 17 | 3 | 51 | 19 | 2.63 |
4-Jul | Sell | -15 | 7.8 | -117 | 4 | -16.75 |
Edit
Выполнено после получения решения от @Tom Sharpe
Чтобы получить среднюю цену, я объявил две переменные avgRate и sumRate двойными и немного изменил код For Each
. Посоветуйте, есть ли действенный способ. Спасибо, если это можно преобразовать в UDF, чтобы мне не приходилось запускать код снова и снова. Большое спасибо за прекрасное решение.
For Each bs In queue
Debug.Print ("qty=" & bs.qty)
Debug.Print ("rate=" & bs.rate)
avgRate = avgRate + (bs.qty * bs.rate)
sumRate = sumRate + bs.qty
Debug.Print avgRate / sumRate
Next
=SUMPRODUCT(A2:A5,C2:C5)/SUM(C2:C5)
или=SUM(D2:D5)/SUM(C2:C5)
- person P.b   schedule 04.07.2021