如何处理买入卖出历史记录 csv

问题描述

我有一个这样的 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”进行反向操作。

我无法真正了解排序和排序以及您如何组合买入/卖出,但这对您来说可能很简单。

希望这能给你一些启发。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...