问题描述
我有一个这样的 csv:
symbol date side quantity average_price
AAPL 2020-12-31T14:28:48.019000Z buy 1 112.01
AMD 2020-12-29T19:14:21.111000Z buy 1 91.33
AMD 2020-12-29T14:28:48.019000Z sell 5 92.42
AAPL 2020-12-28T19:14:21.111000Z sell 3 115.45
AAPL 2020-12-23T14:28:48.019000Z buy 1 108.11
AAPL 2020-12-20T19:14:21.111000Z sell 2 110.03
AMD 2020-12-18T14:28:48.019000Z buy 7 88.74
AAPL 2020-12-16T19:14:21.111000Z buy 4 100.93
这只是数据的一小部分样本,只有 AAPL 和 AMD 2 家公司。实际的 csv 比这要长得多,有更多的公司。
鉴于我拥有 1 股 AAPL 和 3 股 AMD。我需要弄清楚我购买这些股票的交易日期和价格。所以我要找的结果是:
1 share of APPL on 2020-12-31T14:28:48.019000Z for 112.01
和
1 share of AMD on 2020-12-29T19:14:21.111000Z for 91.33
2 shares of AMD on 2020-12-18T14:28:48.019000Z for 88.74
基本上这是在 FIFO 基础上计算的。 AMD:7-5+1=3 和 APPL:4-2+1-3+1=1...
我真的不知道该怎么做...我在想也许使用队列?不知何故?但在走这条路之前......我想我应该发布这个,看看是否有更好的方法?
仅供参考...当前的 csv 是 700 行...将来可能会更大。也许 7000 行?如果任何解决方案涉及遍历 csv,则可能是相关的。
解决方法
以分析的方式看待它,就好像您是软件一样,并为自己制定有关过程的(可靠的)规则。通过文本文件逐行查找反向行(相对)较慢,因此可能首先在查找速度较快的结构或 sqlite 内存数据库中导入行。
您可以按公司进行子查询,并按日期订购。然后,您可以通过该子查询对“FIFO”进行反向操作。
我无法真正了解排序和排序以及您如何组合买入/卖出,但这对您来说可能很简单。
希望这能给你一些启发。