summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bla.py34
1 files changed, 24 insertions, 10 deletions
diff --git a/bla.py b/bla.py
index b93feb0..ad50df5 100644
--- a/bla.py
+++ b/bla.py
@@ -3,33 +3,47 @@ from collections import defaultdict, deque
from datetime import datetime
class FIFOQueue:
+ """
+ Crypto trading FIFO queue.
+
+ Will track trades.
+ """
def __init__(self):
self.queue = deque()
- def add(self, amount, cost, date):
- self.queue.append((amount, cost, date))
+ def add(self, amount, total_cost, date):
+ """
+ Add trade to queue.
+ """
+
+ self.queue.append((amount, total_cost, date))
def remove(self, amount):
+ """
+ Remove a specified amount from the queue, returning the
+ trades used to buy.
+ """
if amount <= 0:
raise ValueError("The amount to remove must be positive.")
+
remaining = amount
cost_basis = 0
- date_acquired = None
-
entries = []
+
while remaining > 0:
if not self.queue:
raise ValueError(f"Insufficient assets in queue to process sale of {amount}.")
- quantity, cost, date = self.queue[0]
+
+ quantity, total_cost, date = self.queue[0]
if quantity > remaining:
- cost_basis += remaining * cost
- self.queue[0] = (quantity - remaining, cost, date)
- entries.append((remaining, cost, date))
+ cost_basis += remaining * (total_cost / quantity)
+ self.queue[0] = (quantity - remaining, total_cost, date)
+ entries.append((remaining, total_cost, date))
remaining = 0
else:
- cost_basis += quantity * cost
+ cost_basis += quantity * (total_cost / quantity)
remaining -= quantity
- entries.append((quantity, cost, date))
+ entries.append((quantity, total_cost, date))
self.queue.popleft()
return cost_basis, entries