英国税收的算法/伪代码(资本收益)

时间:2018-05-13 19:59:35

标签: python algorithm pseudocode

我一直在寻求为英国CGT税收实施算法(或伪代码)(如HRMC's website所述),但我无法理解我需要做的那种算法这有效地没有循环太多次。我试图尽可能多地搜索,甚至尝试了一些我自己的实现,但似乎无法让它正常工作。

TimeToTrade's website也有一个恰当的例子。我尽力在这里解释。

假设我有以下买/卖表(日期为yyyy-mm-dd):

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

根据HRMC,必须遵守以下规则:

  • 销售首先与同一天的买入(FIFO)相匹配
  • 然后在接下来的30天内将销售与买入(FIFO)相匹配
  • 销售最终与过去的平均购买量相匹配(汇集到“第104节持有”)

在手动操作时,我给出了以下计算:

  1. 1 + 2 合并= 3000股@ 3000英镑(每股1英镑)

  2. 3 在同一天有卖出交易,因此暂时不会合并。

    • 2000股中的1000股与同一天的买入相匹配(先到先出)
      • 1000股@£1.5 = 1500英镑 - 收益1000 *£2.5-£1500 =£1000
    • 其余1000股 4 中的1000股与未来30天内的买入相匹配( 6
      • 1000股@£0.5 =£500--收益1000 *£2.5-£500 =£2000
    • 卖出交易4的总收费为1000英镑+ 2000英镑= 3000英镑
  3. 5 在同一天无法再与 3 相匹配,因为它已经耗尽了匹配的股票

    • 1000股中的500股与买入 6 匹配,因为其剩余500股
      • 500股@ 0.5 = 250英镑 - 收益(500 *£2) - 250英镑= 750英镑
    • 其余500股中的500股最终与来自(1 + 2)的合并持股相匹配
      • 500股@ 1 = 500英镑 - 收益(500 *£2) - 500英镑= 500英镑
    • 卖出交易5的总收费为750英镑+ 500 = 1250英镑
  4. 总收费增加£3000 +£1250 =£4250 - 剩余可持续2500股@ 2500英镑

    我认为需要的伪代码

    - 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   
    

    非常感谢任何正确方向的指针。

0 个答案:

没有答案