Есть подходящий вариант пример также на сайте TimeToTrade. Я постарался объяснить здесь, насколько мог.
Предполагая, что у меня есть следующая таблица покупок/продаж (дата в формате гггг-мм-дд):
Код: Выделить всё
id action amount per share total date
1. buy 2000 £1 £2000 2017-05-05 10:00
2. buy 1000 £1 £1000 2017-05-10 10:00
3. buy 1000 £1.5 £1500 2017-06-01 10:00
4. sell 2000 £2.5 £5000 2017-06-01 10:00
5. sell 1000 £2 £2000 2017-06-01 10:00
6. buy 1500 £0.5 £750 2017-06-20 10:00
- Продажа сначала сопоставляется с покупкой (FIFO) в тот же день
- Затем продажа сопоставляется с покупкой (FIFO) в течение следующих 30 дней
Распродажа наконец-то совпадает со средней суммой покупок в прошлое (объединенное в «Удержание по Разделу 104»)
- 1+2 в пуле = Всего 3000 акций по цене 3000 фунтов стерлингов (1 фунт стерлингов). на акцию)
- 3 имеет транзакции продажи совершаются в тот же день, поэтому на данный момент они не объединяются.
- 1000 из 2000 акций соответствуют покупке в тот же день (первым пришел — первым вышел)
1000 акций @ 1,5 фунта стерлингов = 1500 фунтов стерлингов — прибыль 1000*2,5 фунтов стерлингов — 1500 фунтов стерлингов = £1000
- 1000 из 2000 акций соответствуют покупке в тот же день (первым пришел — первым вышел)
- 1000 из оставшихся 1000 акций после продажи 4 совпадают с покупкой в течение следующих 30 дней (6)
- 1000 акций @ 0,5 фунта стерлингов = 500 фунтов стерлингов — прибыль 1000*2,5–500 фунтов стерлингов = 2000 фунтов стерлингов
- Сделка продажи 4 имеет общую облагаемую прибыль в размере 1000 фунтов стерлингов + 2000 фунтов стерлингов = 3000 фунтов стерлингов
- 5 больше не может соответствовать покупке 3 в тот же день, так как он исчерпан. соответствующих акций
- 500 из 1000 акций соответствуют покупке 6, так как у нее осталось 500 акций
500 акций @ 0,5 = 250 фунтов стерлингов - прибыль (500*2 фунтов стерлингов)-250 фунтов стерлингов = 750 фунтов стерлингов
- 500 из 1000 акций соответствуют покупке 6, так как у нее осталось 500 акций
- 500 из оставшихся 500 акций являются окончательно сопоставляется с объединенными активами из (1+2)
- 500 акций @ 1 = £500 — прибыль (500* £2)-£500 = £500
- Транзакция продажи 5 имеет общую налогооблагаемую прибыль в размере £750+500=£1250
Псевдокод того, что, по моему мнению, требуется:
Код: Выделить всё
- loop through all trades chronologically
- if it's a sell trade
- check if there any trades on the same day to match
- check for future buy trades (where sell trade < buy trade < sell trade + 30 days)
- use existing holdings if there are none and/or the matches aren't sufficient to fill the sell
- if it's a buy trade
- add it to a 'same_day' array
- loop through 'same_day' array on the next day to sum it up into a 'section 104 holding'
- keep reference of each trade in an indexed by trade id dictionary/object/hashmap to subtract and such when matching sell trades
Подробнее здесь: https://stackoverflow.com/questions/503 ... ital-gains
Мобильная версия