gpt4 book ai didi

r - 计算最高进先出交易

转载 作者:行者123 更新时间:2023-12-05 03:26:27 25 4
gpt4 key购买 nike

我正在尝试对交易使用最高进先出会计方法。最高进先出意味着当您卖出时,您首先卖出最贵的股票。

这是我的买卖(从 R calculate aggregate gains or loss using FIFO method 借来的例子 - 这是一个类似但不同的问题):

buy = data.frame(BuyTransactionID = c(1:10),
Ticker=c(rep('MSFT',4),rep('AMZN',3),rep('DOCU',3)),
Date=c(rep('01-01-2018',2),rep('01-14-2020',2),rep('01-01-2018',2),rep('01-14-2020',1),'01-01-2018','03-15-2020','04-06-2020'),
Price=c(100,102,102,107,2000,2010,2011,197,182,167),
Quantity=c(10,10,5,5,1,1,2,12,15,15))

sell = data.frame(SellTransactionID=c(1:7),
Ticker=c('MSFT','MSFT','AMZN','AMZN','DOCU','DOCU','DOCU'),
Date=c('01-07-2020','01-20-2020','01-01-2020','01-30-2020','01-15-2020','04-10-2020','04-20-2020'),
Price=c(97,110,2100,2050,210,205,225),
Quantity=c(15,12,1,3,10,5,3))

规则如下:

  1. 您先卖出最昂贵(价格最高)的股票。
  2. 您不能在购买之前出售股票
  3. 您不能多次卖出相同的股票

示例问题:

第一笔交易(SellTransactionID = 1)是 2020 年 7 月 1 日 15 股 MSFT。因此,在该日期之前购买的任何商品都可以出售。根据日期,符合条件的股票是来自 BuyTransactionID 1 和 2 的股票。BuyTransactionID 2 是最高价。因此,BuyTransactionID 2 的 10 股全部售出,剩余 5 股来自 BuyTransactionID 1。

期望的输出:

“售出日期”= 售出日期(不言自明);

'Ticker' = 售出的代码;

' yield ' = 售出的总金额;

“成本基础”= 已售股票的加权平均值。

示例解决方案:

这是 SellTransactionID 1 的解决方案。适当的解决方案会自动执行此操作并计算所有 SellTransactionID。

result <- data.frame(SellDate = '01-07-2020', Ticker = "MSFT", Proceeds = 1455, CostBasis = 101.33)

成本基础示例:

成本基础计算为加权平均值。对于前面的示例,成本基础计算如下:(Quantity1 * Price1 + Quanity2 * Price2 + .....)/所有 Quantity(s) 的总和

例如上面的例子:(10 * 102 + 5 * 100)/15

最佳答案

@DPH 的回答非常好,但不幸的是不够准确。我会解释原因。

这是一个新的数据集,其中所有购买都先于销售:

buy = data.frame(BuyTransactionID = c(1:10),
Ticker=c(rep('MSFT',10)),
Date=c(rep('01-01-2020',10)),
Price=c(100,102,102,107,105,111,109,112,115,106),
Quantity=c(10,10,5,5,1,1,2,12,15,15))


sell = data.frame(SellTransactionID=c(1:4),
Ticker=c('MSFT','MSFT','MSFT', 'MSFT'),
Date=c('01-07-2020','01-20-2020','01-21-2020',
'01-22-2020'),
Price=c(120,119,117, 121),
Quantity=c(7,12,1, 5))

如果您应用@DPH 的解决方案,您将得到以下结果: enter image description here

请注意,“Remain_Price”没有变化,最后三笔交易的“Sales_Cost”也没有变化。发生这种情况是因为该函数确定了首次销售后剩余的股票数量以及剩余股票的平均价格。首次出售前购买的股票不能再单独出售。他们现在被视为具有平均价格和剩余股份数量的单一实体。

例如,本例共买入76股。第一次销售卖出 7 股。现在,如“Remain_Qtd”中所示,仍有 69 股剩余。计算剩余股票的平均价格 - 该价格为 106.5652 美元。现在,该流程认为所有 69 股的定价为 106.5652 美元,剩余销售减少了“Remain_Qtd”的数量,但不会更改“Remain_Price”。剩余股份不能再按购买时的价格考虑,它们统称为剩余股份的一部分和平均剩余价格。

出现这种情况是因为对象dfo和对象sdfdfo的回收。特别是,此行计算平均剩余价格,然后通过 dfosdf 回收。

Price = (sum(ip * iq) - v) / sum(sdf$Quantity)

Quantity = sum(sdf$Quantity) 将所有剩余份额相加。

我认为@DPH 的回答很棒,但希望可以对其进行修改以单独处理每次购买,而不是汇总过去的购买。

关于r - 计算最高进先出交易,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71729979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com